Аутентификация Jenkins CI для частного репозитория Github
Я хотел бы, чтобы Дженкинс автоматически извлекал данные из моего частного репозитория, размещенного на Github. Но я понятия не имею, как выполнить эту задачу.. Пробовал документацию, генерируя ssh-ключ для пользователя jenkins и все, что я вижу, это: "невозможно клонировать РЕПО". Я проверил URL-адреса-они действительны.
любые подсказки, может быть, вы знаете некоторые документы / блоги / Все, что описывает этот вид вещей?
6 ответов
возможно, поддержка GitHub для развернуть ключи это то, что вы ищете? Чтобы процитировать эту страницу:
когда следует использовать ключ развертывания?
просто, когда у вас есть сервер, который должен получить доступ к одному частному РЕПО. Этот ключ прикрепляется непосредственно к репозиторию, а не к личной учетной записи пользователя.
если это то, что вы уже пытаетесь, и это не работает, вы можете обновить ваш вопрос с более подробной информацией об используемых URL-адресах,именах и местоположении ключевых файлов и т. д.
теперь для технической части: как использовать ваш ключ SSH с Дженкинсом?
если у вас есть, скажем, a 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, используя git@github.com
и вы не хотите, чтобы вышеупомянутый ключ использовался для всех ваших подключений к Github, мы создали псевдоним хоста github-deploy-myproject. Ваш URL-адрес клона теперь становится
git clone github-deploy-myproject:myuser/myproject
и это также то, что вы ставите как хранилище URL-адресом в Дженкинс.
(обратите внимание, что вы должны не поставить ssh:// спереди, чтобы это работало.)
одна вещь, которая заставила это работать для меня, - это убедиться, что github.com
находится в ~jenkins/.ssh/known_hosts
.
Если вам нужен Дженкинс для доступа к более чем 1 проекту, вам нужно будет:
1. добавить открытый ключ к одной учетной записи пользователя GitHub
2. добавьте этого пользователя как владельца (для доступа ко всем проектам) или как сотрудника в каждом проекте.
многие открытые ключи для одного пользователя системы не будут работать, потому что GitHub найдет первый соответствующий ключ развертывания и отправит обратно ошибку, как "ошибка: разрешение пользователю / repo2 отказано пользователю / repo1"
Jenkins создает пользователя Jenkins в системе. Ключ ssh должен быть создан для пользователя Jenkins. Вот шаги:
sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen
теперь вы можете создать учетные данные Дженкинса с помощью ключа SSH На приборной панели Jenkins Добавить Учетные Данные
выберите эту опцию
закрытый ключ: от мастера Дженкинса~/.ssh
у меня была аналогичная проблема с gitlab. Оказывается, я ограничил пользователей, которым разрешено входить через ssh. Это не повлияет на пользователей github, но в случае, если люди окажутся здесь для проблем gitlab (и тому подобное), убедитесь, что вы добавили git
до AllowUsers
настройка в /etc/ssh/sshd_config
:
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
альтернативой ответу sergey_mo является создание нескольких ssh-ключей на сервере jenkins.
(хотя, как сказал первый комментатор ответа sergey_mo, это может оказаться более болезненным, чем управление одной парой ключей.)