Автентифікувати Джінкінс CI для приватного сховища Github


136

Я хотів би, щоб Дженкінс автоматично отримував дані з мого приватного сховища, розміщеного в Github. Але я поняття не маю, як виконати це завдання. Спробував документацію, створивши ssh-ключ для користувача jenkins, і все, що я бачу, це: "не в змозі клонувати репо". Я перевірив URL-адреси - вони дійсні.

Будь-які підказки, можливо ви знаєте деякі документи / блоги / що б там не описували такі речі?


Відповідаю на подібне запитання, відповідь ви можете побачити за посиланням нижче: jenkins & GitHub
— user965062

Відповіді:


139

Можливо, ви шукаєте підтримку GitHub для ключів розгортання ? Щоб цитувати цю сторінку:

Коли я повинен використовувати ключ розгортання?

Простий, коли у вас є сервер, який потребує доступу до однієї приватної репо. Цей ключ додається безпосередньо до сховища, а не до особистого облікового запису користувача.

Якщо це вже ви намагаєтеся, і це не спрацьовує, ви можете оновити своє запитання з детальнішою інформацією про використовувані URL-адреси, назви та місцезнаходження ключових файлів тощо.


Тепер про технічну частину: Як використовувати свій ключ SSH разом з Дженкінсом?

Якщо у вас є, скажімо, jenkinsкористувач unix, ви можете зберігати ключ розгортання в ~/.ssh/id_rsa. Коли Дженкінс спробує клонувати репо через ssh, він спробує використати цей ключ.

У деяких налаштуваннях ви не можете запустити Дженкінс як власний обліковий запис користувача, і, можливо, також не можна використовувати розташування ключа ssh за замовчуванням ~/.ssh/id_rsa. У таких випадках ви можете створити ключ в іншому місці, наприклад ~/.ssh/deploy_key, і налаштувати його sshдля використання із записом у ~/.ssh/config:

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

Оскільки все, що ви автентифікуєте у всіх сховищах Github, використовуючи, git@github.comі ви не хочете, щоб вищевказаний ключ використовувався для всіх ваших підключень до Github, ми створили псевдонім хоста github-opens-myproject . Тепер ваша URL-адреса клонування стає

git clone github-deploy-myproject:myuser/myproject

і це також те, що ви ставите як URL-сховище в Дженкінс.

(Зверніть увагу, що ви не повинні ставити ssh: // попереду, щоб це працювало.)


4
Бур, як ти створив ключ для джинкінів?
— Тіаго Дініз

5
"Ключ розгортання" - це будь-який старий ключ SSH. Те, що я зробив, виконується ssh-keygenпід час запуску користувача Дженкінса ("jenkins" на моєму сервері Ubuntu). Потім я додав ~jenkins/.ssh/id_rsa.pubдо розділу ключів розгортання сховища в github.
— Адам Монсен

10
у деяких встановленнях вам потрібно буде вказати це не в ~каталог. Але /var/lib/jenkins/.ssh/для того, щоб користувач jenkins за замовчуванням використовував ці клавіші!
— garmoncheg

7
Щоб продовжити коментар від @garmoncheg, зверніть увагу, що /var/lib/jenkins це домашня директорія ( ~) для jenkinsкористувача.
— Девід Харкнес

1
Хтось знає, як змусити гачки розгортання працювати з цим? Я бачу помилки, схожі на Could not match github-deploy-myproject:myuser/myprojectжурнал гака. Я ввів це, як моя URL-адреса Repo, так і збірки працюють так, щоб вона могла отримати доступ до GitHub. Це просто повідомлення від GitHub, яке не вдається викликати збірку.
— пого

36

Одне, що налагодило це для мене, - це переконатися, що він github.comзнаходиться в ~jenkins/.ssh/known_hosts.



У моєму випадку найпростіший спосіб зробити це - зробити "sudo su jenkins", оскільки не вдається ввійти як користувач jenkins належним чином. Після того, як у вас з'явиться ідентифікація jenkins, ви можете зробити вхід в систему ssh в github / bitbucket і прийняти віддалений хост-ключ від імені користувача jenkins.
— ЗВУК

Але що робити, якщо зробити ініціалізацію Jenkins частиною свого середовища розробки «завантажувальною». "Ручний" аспект цього не працює
— TheJediCowboy

13

Якщо вам потрібен Дженкінс для доступу до більш ніж 1 проекту, вам потрібно:
1. додати відкритий ключ до одного облікового запису користувача github
2. додати цього користувача як власника (для доступу до всіх проектів) або як співпрацівника в кожному проекті.

Багато відкритих ключів для одного користувача системи не працюватимуть, оскільки GitHub знайде перший відповідний ключ розгортання та надішле помилку назад, наприклад "ПОМИЛКА: Дозволу користувачеві / repo2 відмовлено користувачу / repo1"

http://help.github.com/ssh-isissue/


2
Відповідь про використання ключа розгортання чудово працює, якщо у вас є лише одне сховище. Але коли ви хочете, щоб сервер CI створював проекти на декількох репостах, ви одразу можете управляти декількома наборами клавіш (одна пара на репо), і стає набагато простіше скористатися підходом, переліченим у цій відповіді.
— cclark

Посібник цього хлопця пояснює, як встановити його за допомогою різних клавіш розгортання за допомогою ~ / .ssh / config: gist.github.com/victorborda/2871029
— Jorge Orpinel

@JorgeOrpinel, я вважаю, що підхід у посиланні може запобігти запуску збірок github з використанням модулів Github. Я знайшов фіктивного користувача з одним ключем і доступом до всіх репостів працював краще, коли я також хотів, щоб збірки запускалися веб-гачком, тому що мені потрібна URL-адреса сховища в конфігурації збірки, щоб відповідати URL-адресу клонування github, дивіться інші
— chrisbunney

6

Дженкінс створює користувача Дженкінса в системі. Ключ ssh повинен бути згенерований для користувача Jenkins. Ось такі кроки:

sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

Тепер ви можете створити обліковий запис Jenkins за допомогою ключа SSH На приладовій панелі Jenkins Додати облікові дані

виберіть цю опцію

Приватний ключ: від майстра Дженкінса ~ / .ssh


1

У мене була аналогічна проблема з gitlab. Виявляється, я обмежив користувачів, яким дозволено входити через ssh. Це не вплине на користувачів github, але у випадку, якщо люди опиняються тут із питань gitlab (тощо), переконайтеся, що ви додали gitдо AllowUsersналаштування в /etc/ssh/sshd_config:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git

0

Ще один варіант - використовувати жетони особистого доступу GitHub :

  • Перейдіть на сторінку https://github.com/settings/tokens/new
  • Додайте область репо
  • У Дженкінсі додайте джерело GitHub
  • Використовуйте URL-адресу HTTPS репозиторію
  • Додайте HTTPS URL-адресу git repo (не SSH , наприклад. https://github.com/my-username/my-project.git)
  • Додати облікові дані
    • Вид: Ім'я користувача з паролем
    • Ім'я користувача: ім'я користувача GitHub
    • Пароль: персональний маркер доступу, який ви створили на GitHub
    • ІД: щось подібне github-token-for-my-username

Я перевірив це на версії Jenkins. 2.222.1 та плагін Jenkins GitHub 1,29,5 із приватним репо-сервером GitHub.


-1

Альтернативою відповіді від sergey_mo є створення декількох клавіш ssh на сервері jenkins.

(Хоча як сказав перший коментатор у відповіді sergey_mo, це може закінчитися більш болісним, ніж управління однією парою ключів.)


9
Тепер я бачу, чому просто розміщення URL-адреси - це жахлива стратегія відповідей. Посилання вище мертве.
— Dejay Clayton
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.