Аутентификация Jenkins CI для частного хранилища Github

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

Любые подсказки, может быть, вы знаете некоторые документы/блоги/все, что описывают такие вещи?

Ответ 1

Возможно, поддержка GitHub для развертывания ключей - это то, что вы ищете? Чтобы процитировать эту страницу:

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

Простой, когда у вас есть сервер, которому требуется доступ к одному частному репо. Этот ключ прикрепляется непосредственно к репозиторию, а не к личной учетной записи пользователя.

Если это то, что вы уже пытаетесь, и оно не работает, вам может понадобиться обновить свой вопрос с более подробной информацией об используемых URL-адресах, именах и расположении файлов ключей и т.д.


Теперь для технической части: как использовать ваш SSH-ключ с Jenkins?

Если у вас есть, скажем, пользователь jenkins unix, вы можете сохранить ключ развертывания в ~/.ssh/id_rsa. Когда Дженкинс пытается клонировать репо через ssh, он попытается использовать этот ключ.

В некоторых настройках вы не можете запускать Jenkins как собственную учетную запись пользователя и, возможно, также не можете использовать местоположение 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 с помощью [email protected], и вы не хотите, чтобы указанный ключ использовался для всех ваших подключений к Github, мы создали алиас хоста github-deploy-myproject. Теперь ваш клон-код становится

git clone github-deploy-myproject:myuser/myproject

и это также то, что вы разместили в качестве URL-адреса репозитория в Jenkins.

(Обратите внимание, что вы не должны ставить ssh://спереди, чтобы это работало.)

Ответ 2

Одна вещь, которая получила это для меня, - убедиться, что github.com находится в ~jenkins/.ssh/known_hosts.

Ответ 3

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

Многие открытые ключи для одного пользователя системы не будут работать, потому что GitHub найдет первый сопоставленный ключ развертывания и отправит обратно ошибку, например "ОШИБКА: разрешение пользователю /repo 2 на пользователя /repo 1"

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

Ответ 4

Дженкинс создает пользователя Jenkins в системе. Ключ ssh должен быть сгенерирован для пользователя Jenkins. Вот шаги:

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

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

выберите эту опцию

Закрытый ключ: от мастера Jenkins ~/.ssh

Ответ 5

У меня была аналогичная проблема с gitlab. Оказывается, я ограничил пользователей, которым разрешено входить через ssh. Это не повлияет на пользователей github, но в случае, если люди попадут сюда для проблем gitlab (и т.п.), Добавьте git в параметр AllowUsers в /etc/ssh/sshd_config:

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

Ответ 6

Альтернативой ответу от sergey_mo является создание нескольких ключей ssh ​​на сервере jenkins.

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