【发布时间】:2018-09-12 14:17:10
【问题描述】:
用例: 我有一个 Jenkins 管道来更新我的开发环境。 我的开发环境是一个带有 docker compose 的 EC2 aws 实例。
自动化是这样写的:
withAWS(profile: 'default') {
sh "ssh -o StrictHostKeyChecking=no -i ~/my-key.pem user@$123.456.789 /bin/bash -c 'run some command like docker pull'"
}
现在,我有其他测试环境,它们都有某种 docker-compose 文件、配置和属性文件,需要我在需要更改时检查所有这些文件。
为了解决这个问题,我创建了一个新的存储库来保留所有不同的环境配置,我的计划是在我的所有开发和测试环境中复制这个存储库,所以当我需要更改某些内容时,我可以只需在本地执行,推送它,然后让我的 jenkins 管道在它正在更新的任何环境中更新存储库。
我的 jenkins 有我的 repo 的 ssh 凭据(它用于克隆 repo 并在源代码上运行测试的另一个作业),所以我想使用相同的凭据。
问题:我能否以某种方式通过 ssh 连接到另一台机器,使用 Jenkins ssh-agent 凭据来克隆/更新 bitbucket 存储库?
编辑: 我将管道更改为:
script {
def hgCommand = "hg clone ssh://hg@bitbucket.org/my-repo"
sshagent(['12345']) {
sh "ssh -o StrictHostKeyChecking=no -i ~/mykey.pem admin@${IP_ADDRESS} /bin/bash -c '\"${hgCommand}\"'"
}
}
我得到:
[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-FOburguZZlU0/agent.662
SSH_AGENT_PID=664
Running ssh-add (command line suppressed)
Identity added: /home/jenkins/workspace/abc@tmp/private_key_12345.key (rsa w/o comment)
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
[test-env-config] Running shell script
+ ssh -o StrictHostKeyChecking=no -i /home/jenkins/mykey.pem admin@123.456.789 /bin/bash -c "hg clone ssh://hg@bitbucket.org/my-repo"
remote: Warning: Permanently added the RSA host key for IP address '765.432.123' to the list of known hosts.
remote: Permission denied (publickey).
abort: no suitable response from remote hg!
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 664 killed;
[ssh-agent] Stopped.
【问题讨论】: