在Jenkins文件中使用withCredentials时出错

时间:2019-11-25 23:42:27

标签: jenkins ssh jenkins-pipeline

在我的詹金斯流水线的其中一个阶段,我要做

    stage('SSH into the Server') {
        steps {
            withCredentials([sshUserPrivateKey(
                credentialsId: '<ID>',
                keyFileVariable: 'KEY_FILE')]) {
                sh '''
                cat ${KEY_FILE} > ./key_key.key
                eval $(ssh-agent -s)
                chmod 600 ./key_key.key
                ssh-add ./key_key.key
                ssh-add -L
                ssh <username>@<server> docker ps
                '''
            }
        }
    }

只需简单地SSH到服务器并检查docker ps

credentialId来自我的Jenkins服务器中的Global Credentials

但是,在运行此程序时,

我明白了

+ cat ****
++ ssh-agent -s
+ eval 'SSH_AUTH_SOCK=/tmp/ssh-.../agent.57271;' export 'SSH_AUTH_SOCK;' 'SSH_AGENT_PID=57272;' export 'SSH_AGENT_PID;' echo Agent pid '57272;'
++ SSH_AUTH_SOCK=/tmp/ssh-.../agent.57271
++ export SSH_AUTH_SOCK
++ SSH_AGENT_PID=57272
++ export SSH_AGENT_PID
++ echo Agent pid 57272
Agent pid 57272
+ chmod 600 ./key_key.key
+ ssh-add ./key_key.key

并且失败,没有更多消息。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

根据您的意图,我认为这是一种非常复杂的方法。 我强烈建议您使用SSH代理插件。

https://jenkins.io/doc/pipeline/steps/ssh-agent/

您可以一步实现。

  sshagent (credentials: ['<ID>']) {
    sh 'ssh <username>@<server> docker ps'
  }

使用您上面提到的全局凭据中相同的UserPrivateKey的凭据ID。