You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:48:00