Дженкинс с ssh-agent запускается и потом сразу останавливается в трубопровод построить
У меня есть простая сборка трубопровода Дженкинса, это мой файл Дженкинса:
pipeline {
agent any
stages {
stage('deploy-staging') {
when {
branch 'staging'
}
steps {
sshagent(['my-credentials-id']) {
sh('git push joe@repo:project')
}
}
}
}
}
Я использую sshagent для отправки в репозиторий git на удаленном сервере. Я создал учетные данные, которые указывают на файл закрытого ключа в Jenkins master ~/.тсс.
Когда я запускаю сборку, я получаю этот вывод (Я заменил некоторую конфиденциальную информацию на * ' s):
[ssh-agent] Using credentials *** (***@*** ssh key)
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine)
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-cjbm7oVQaJYk/agent.11558
SSH_AGENT_PID=11560
$ ssh-add ***
Identity added: ***
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 11560 killed;
[ssh-agent] Stopped.
[TDBNSSBFW6JYM3BW6AAVMUV4GVSRLNALY7TWHH6LCUAVI7J3NHJQ] Running shell script
+ git push joe@repo:project
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Как вы можете видеть, ssh-агент запускается, останавливается сразу после этого, а затем выполняет команду git push. Самое странное, что однажды это сработало правильно. но это казалось совершенно случайным.
Я все еще довольно новичок в Дженкинсе - я упускаю что-то очевидное? Любая помощь ценится, спасибо.Edit: я запускаю многоотраслевой конвейер, если это поможет.
1 ответ:
Недавно у меня была похожая проблема, хотя она была внутри контейнера docker. Журналы создавали впечатление, что ssh-агент выходит слишком рано, но на самом деле проблема заключалась в том, что я забыл добавить сервер git к известным хостам.
Я предлагаю подключить ssh к вашему Jenkins master и попытаться сделать те же шаги, что и конвейер с ssh-агентом (cli). Тогда вы поймете, в чем проблема.
Например:
eval $(ssh-agent -s) ssh-add ~/yourKey git clone
Как объяснено на help.github.com
Обновление: Здесь a util для добавления knownHosts, если он еще не добавлен:
/** * Add hostUrl to knownhosts on the system (or container) if necessary so that ssh commands will go through even if the certificate was not previously seen. * @param hostUrl */ void tryAddKnownHost(String hostUrl){ // ssh-keygen -F ${hostUrl} will fail (in bash that means status code != 0) if ${hostUrl} is not yet a known host def statusCode = sh script:"ssh-keygen -F ${hostUrl}", returnStatus:true if(statusCode != 0){ sh "mkdir -p ~/.ssh" sh "ssh-keyscan ${hostUrl} >> ~/.ssh/known_hosts" } }