Дженкинс с 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 2

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"
    }
}