在构建配置中,CI服务器构建服务包,为其分配特定的版本,然后将其存档到文件中:服务Version.tgz
在部署配置中,相同的CI服务器会下载此类可变命名的包。此配置希望复制存档,解压缩并在某些主机上部署服务。
在Ansible代码中表达:
- name: Unpack Service on remote host
unarchive: src="{{ src_dir }}/Service-*.tgz" dest="{{ host_dest_dir }}"
理想情况下:Ansible会尝试在模式中匹配任何带有文件名的内容。
实际上,这不起作用:
fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '(...)/deploy/Service-*.tgz' in expected paths."}
如何让Ansible接受' src'?
的可变名称(我想我可以通过点击目录创建一个注册真实姓名的任务,但也许这可以在 Ansible本身中完成?)
答案 0 :(得分:3)
正如之前对您的问题的评论所指出的另一种方法(假设Ansible 2+)是find
模块。这看起来像是:
- name: Find Service package
find: paths="{{ src_dir }}" patterns="Service-*.tgz"
register: find_result
- name: Unpack service on remote host
unarchive: src="{{ item.path }}" dest="{{ host_dest_dir }}"
with_items: "{{ find_result.files }}"
答案 1 :(得分:1)
如果您的CI服务器知道文件名并且正在运行ansible,那么您可以在命令行上设置文件名的版本,然后在您的任务中引用它:
ansible-playbook play.yml --extra-vars "version=${VERSION_FROM_CI_SERVER}"