- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Jenkins Ansible 插件来部署项目。我认为这应该很容易,因为我对 Jenkins 和 Ansible 都非常熟悉。但是,我在成功执行 Ansible 命令时遇到了问题。我认为问题在于凭证的使用。我们有一个拥有 Jenkins 执行进程的 jenkins 用户,我们在要部署到的机器上有一个 jenkins 用户设置。我们正在使用 SSH key ,我已将 jenkins 用户私钥添加到 Jenkins 凭证存储并在 Ansible 配置中选择了这些 key 。但是,当我运行该作业时,这是我的输出片段(替换了一些信息)。
[my-job] $ ansible-playbook my-job.yml -i inventories/dev -l 1_2_3_4 -f 1 --private-key /tmp/ssh7229752594712048879.key -u jenkins --diff --vault-password-file ~/.vault-pass
PLAY [tag_ansible_groups_my_job] ***********************
TASK [setup] *******************************************************************
fatal: [1_2_3_4]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", "unreachable": true}
to retry, use: --limit @/data/jenkinsdata/workspace/my-job/my-job.retry
PLAY RECAP *********************************************************************
1_2_3_4 : ok=0 changed=0 unreachable=1 failed=0
FATAL: command execution failed
hudson.AbortException: Ansible playbook execution failed
at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:227)
at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:200)
at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779)
at hudson.model.Build$BuildExecution.build(Build.java:205)
at hudson.model.Build$BuildExecution.doRun(Build.java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
at hudson.model.Run.execute(Run.java:1729)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:404)
ERROR: Ansible playbook execution failed
Finished: FAILURE
我已经从 Jenkins 机器上成功运行了相同的命令,并且运行良好。唯一的区别是我引用了原始的 SSH 私钥而不是复制的临时 key 。为查看这是否是问题所在,我决定检查复制的临时 SSH 私钥的内容,发现该文件为空。我在作业完成执行之前检查了文件,因为我假设它在作业的整个生命周期内都保留在那里,并且仅在作业完成执行后才被删除。为了验证这一点,我从配置中删除了凭据的使用,并添加了私钥和用户参数,直接指向适当的 key ,作业成功运行。
[my-job] $ ansible-playbook my-job.yml -i inventories/dev -l 1_2_3_4 -f 1 --private-key ~/.ssh/id_rsa -u jenkins --diff --vault-password-file ~/.vault-pass
PLAY [tag_ansible_groups_my_job] ***********************
TASK [setup] *******************************************************************
ok: [1_2_3_4]
所以,对我来说,Jenkins 似乎无法将 SSH 私钥复制到临时文件。我尝试过使用其他 SSH key ,但每次仍然出现同样的问题。我已经尝试在 Jenkins 凭证存储本身中指定私钥而不是指定位置,但也没有用。我检查了 Jenkins 日志,没有任何迹象表明 SSH 私钥无法复制到/tmp 目录的原因。
我不希望在附加参数中直接引用 key ,因为这限制了我只能使用位于该服务器上的 key 。有什么建议吗?
最佳答案
我在 Edureka 找到了这个解决方案。它对我有用。
在/etc/ansible/ansible.cfg 中设置“host_key_checking = False”
https://www.edureka.co/community/42595/not-able-connect-remote-host-via-jenkins-run-ansible-playbook
关于Jenkins Ansible 插件权限被拒绝(公钥、密码)- 无法复制私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449224/
我是一名优秀的程序员,十分优秀!