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

Jenkins Pipeline运行Ansible playbook时include_vars加载变量失败求助

问题根因

你观察到的sh步骤输出的工作目录正确,但Ansible执行时PWD取值错误,是因为Jenkins的Ansible插件启动ansible-playbook进程时,不会继承Pipeline中sh步骤的环境变量上下文,此时lookup('env','PWD')读取到的是Jenkins Agent进程本身的工作目录/data/jenkins_agent,而非当前任务的工作空间目录。

解决方案(按优先度排序)

  • 方案1:使用Ansible内置变量(最稳定,无环境依赖)
    Ansible自带playbook_dir内置变量,固定指向当前运行的playbook文件所在的目录,无需依赖外部环境变量。修改你的playbook中include_vars的配置即可:
- name: "Include files"
  include_vars:
    file: "{{ playbook_dir }}/../inventory/deploiements/vars"

该方案本地手动执行和Jenkins执行均可正常生效,不需要修改Jenkins Pipeline配置。

  • 方案2:使用sh步骤直接执行ansible命令
    如果你不想修改playbook,可以直接替换Jenkins Pipeline中的ansiblePlaybook插件调用为sh步骤执行,sh步骤会完整继承任务的工作目录环境变量,原playbook的PWD读取逻辑可以正常运行:
pipeline {
    agent any 
    stages {
        stage('test') {
            steps {
                sh 'pwd'
                sh 'ansible-playbook playbooks/test.yml -vvv'
            }
        }
    }
}
  • 方案3:显式传入工作空间变量
    如果要保留Ansible插件的使用,也可以在调用插件时显式把Jenkins的内置WORKSPACE环境变量作为参数传入playbook:
    修改Pipeline配置:
ansiblePlaybook playbook: 'playbooks/test.yml', extras: '-vvv', extraVars: [jenkins_workspace: env.WORKSPACE]

再修改playbook的变量引入路径:

file: "{{ jenkins_workspace }}/inventory/deploiements/vars"

内容的提问来源于stack exchange,提问作者Wrest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:12:03