Ansible template复制JSON文件失败,请求排查文件找不到问题
问题:Ansible template模块找不到JSON文件导致Jenkins执行失败
Jenkins错误日志
TASK [datadog-dashboard : Import Datadog Dashboard in main] ******************** 16:54:24 included: /home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/tasks/Import.yaml for localhost 16:54:24 16:54:24 TASK [datadog-dashboard : Copying Dashboard json file] ************************* 16:54:24 fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access 'src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json'\nSearched in:\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/templates/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/tasks/templates/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/tasks/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/templates/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json\n\t/home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"}
对应的Ansible代码片段
- name: Copying Dashboard json file template: src: src/roles/datadog-dashboard/templates/datadog-dashboard/{{ application_env }}/NonProd.json dest: /tmp/5052-dash.json mode: '0644'
问题原因与解决方法
问题根源:Ansible的
template模块会自动在当前角色的templates目录、playbook所在目录的templates目录下搜索文件。你写的src是完整的相对路径,导致Ansible将该路径拼接到默认搜索路径后,出现了重复的路径(比如/templates/src/roles/...),最终找不到文件。修正代码:由于任务位于
datadog-dashboard角色的tasks中,src只需填写相对于角色templates目录的路径即可。修正后的代码如下:
- name: Copying Dashboard json file template: src: datadog-dashboard/{{ application_env }}/NonProd.json dest: /tmp/5052-dash.json mode: '0644'
- 路径验证:可在Jenkins工作目录下执行以下命令,确认文件实际存在(替换
{{ application_env }}为实际值,比如non_production):
ls /home/jenkins/agent/workspace/5052/non_production/monitoring-as-code/src/roles/datadog-dashboard/templates/datadog-dashboard/non_production/NonProd.json
内容的提问来源于stack exchange,提问作者Ashish Karpe
相关产品推荐
相关产品推荐

