在我的詹金斯流水线的其中一个阶段,我要做
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
并且失败,没有更多消息。
我做错了吗?
答案 0 :(得分:1)
根据您的意图,我认为这是一种非常复杂的方法。 我强烈建议您使用SSH代理插件。
https://jenkins.io/doc/pipeline/steps/ssh-agent/
您可以一步实现。
sshagent (credentials: ['<ID>']) {
sh 'ssh <username>@<server> docker ps'
}
使用您上面提到的全局凭据中相同的UserPrivateKey的凭据ID。