我想执行一个Jenkins管道:
stage('Deploy watchers') {
ansiblePlaybook(
playbook: "watcher-manage.yml",
extraVars: [
target: 'dev-dp-manager-1'
]
)
}
这会产生ansible-playbook watcher-manage.yml -e target=dev-dp-manager-1
。
执行导致:
fatal: [dev-dp-manager-1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\r\n", "unreachable": true}
根据文档,我需要添加sudo: true
以使ansible命令以root权限执行。如果我这样做:
stage('Deploy watchers') {
ansiblePlaybook(
sudo: true,
playbook: "watcher-manage.yml",
extraVars: [
target: 'dev-dp-manager-1'
]
)
}
这会产生ansible-playbook watcher-manage.yml -s -U root -e target=dev-dp-manager-1
。不过我得到了同样的错误。
如果我试着说sudo ansible-playbook ...
我的命令成功了。我的问题是我是否可以通过使用插件实现所需的执行,或者我必须手动编写ansible命令?
谢谢!
对我有用的是:
stage('Deploy watchers') {
sh 'sudo ansible-playbook watcher-manage.yml --extra-vars="target=dev-dp-manager-1"'
}
由于Jenkins的linux用户不需要访问ssh密钥,因此只需提升其对这一命令的权限即可完成。