Автентифікувати Джінкінс 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.