Azure DevOps流水线执行Ansible playbook无法读取ansible.cfg问题咨询
问题根本原因
- 你在playbook的
environment字段下配置的环境变量,只会传递给playbook在远程目标主机上执行的任务,不会作用于Ansible控制节点自身的运行环境,所以配置的ANSIBLE_CONFIG不会生效。 - Azure DevOps Ansible任务执行时的默认工作目录,和你存放
ansible.cfg的目录不一致,导致Ansible扫描当前目录时找不到配置文件。
可落地的解决方案
方法1:在ADO流水线层面显式指定ANSIBLE_CONFIG环境变量
你可以先在流水线中输出当前工作目录以及仓库拉取后的路径,确认ansible.cfg的绝对路径后直接在Ansible任务的环境变量里配置。
首先加一个Bash任务打印路径排查:
- bash: | echo "当前工作目录: $(pwd)" echo "仓库根目录文件列表: ls -la $(Build.SourcesDirectory)" # 如果你配置了多仓库checkout,替换为playbook_lib对应的实际路径打印排查 echo "playbook_lib仓库路径文件列表: ls -la $(Build.SourcesDirectory)/playbook_lib" displayName: 排查目录结构
确认路径后,直接在Ansible任务中配置环境变量:
- task: Ansible@0 inputs: ansibleInterface: 'agentMachine' playbookPathOnAgentMachine: '$(Build.SourcesDirectory)/app_repo/my_app/app_playbook.yml' inventoriesAgentMachine: 'file' inventoryFileOnAgentMachine: '替换为你的inventory路径' env: # 替换为你实际的ansible.cfg绝对路径,放在通用playbook同目录就对应调整路径即可 ANSIBLE_CONFIG: $(Build.SourcesDirectory)/playbook_lib/playbooks/spring-app-playbooks/ansible.cfg displayName: 执行Ansible部署
方法2:把ansible.cfg复制到Ansible任务的执行工作目录
如果你不想硬编码路径,可以在执行Ansible任务之前加一步复制操作,把存放在任意仓库的ansible.cfg复制到Ansible任务的当前执行工作目录:
- bash: | # 把存放在通用playbook仓库的ansible.cfg复制到当前工作目录 cp $(Build.SourcesDirectory)/playbook_lib/playbooks/spring-app-playbooks/ansible.cfg ./ansible.cfg displayName: 复制ansible.cfg到当前工作目录
之后再运行Ansible任务,Ansible扫描当前目录就能识别到配置文件。
方法3:通过Ansible命令参数指定配置文件
Azure DevOps的Ansible任务支持传入额外的命令行参数,你可以直接用Ansible 2.9原生支持的--config参数指定配置文件路径:
- task: Ansible@0 inputs: ansibleInterface: 'agentMachine' playbookPathOnAgentMachine: '$(Build.SourcesDirectory)/app_repo/my_app/app_playbook.yml' inventoriesAgentMachine: 'file' inventoryFileOnAgentMachine: '替换为你的inventory路径' args: '--config $(Build.SourcesDirectory)/playbook_lib/playbooks/spring-app-playbooks/ansible.cfg' displayName: 执行Ansible部署
内容的提问来源于stack exchange,提问作者Sanjesh M
相关产品推荐
相关产品推荐

