Аутентификация 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, это может оказаться более болезненным, чем управление одной парой ключей.)