如何在Ansible远程主机中使用Jenkins的Secret File类型凭证
问题根因
你传入
key变量的是Jenkins Agent本地的临时文件路径,该路径仅存在于执行当前任务的Jenkins节点上,当Ansible在远程主机执行任务时,远程主机不存在对应路径的文件,因此抛出“No such file or directory”错误。
解决方案
根据你使用密钥的场景,选择对应处理方式:
场景1:密钥仅需在Ansible控制端(Jenkins Agent节点)使用
不需要对现有传参逻辑做大修改,只需在用到该密钥的Ansible任务中添加delegate_to: localhost配置,指定任务在Jenkins Agent节点执行即可,无需将密钥传递到远程主机。
场景2:密钥需要在远程主机的任务中使用
方式一:传递密钥内容而非文件路径
修改Jenkinsfile凭证读取规则,直接读取Secret File的内容作为变量传递:
stage('Build Image') { steps { withCredentials([string(credentialsId: 'private.key', variable: 'PRIVATE_KEY_CONTENT')]) { runAnsible('playbook.yml', [ env: dev, key_content: PRIVATE_KEY_CONTENT ]) } } }
在Ansible playbook中如果需要生成密钥文件,直接通过内容写入即可:
- name: 写入私钥到远程主机 copy: content: "{{ key_content }}" dest: /remote/target/path/private.key mode: '0600'
方式二:同步Jenkins本地密钥文件到远程主机
无需修改Jenkins传参逻辑,在playbook中新增文件同步任务,指定从Jenkins Agent节点复制文件到远程:
- name: 同步Jenkins端私钥到远程主机 copy: src: "{{ key }}" dest: /remote/target/path/private.key mode: '0600' delegate_to: localhost
注意事项
- 密钥属于敏感信息,传递和使用过程中不要开启Ansible debug输出,避免密钥泄露。
- 写入到主机的密钥文件建议设置权限为
0600,仅所有者可读写,降低泄露风险。
内容的提问来源于stack exchange,提问作者Nitin Vishwakarma
相关产品推荐
相关产品推荐

