【发布时间】:2015-03-19 19:47:30
【问题描述】:
有没有一种简单的方法可以让 Ansible 检查特定 git 分支上的最新标签,而无需指定或传入标签?也就是说,Ansible 可以检测或派生分支上的最新标签,还是需要使用 shell 模块或其他东西单独完成?
【问题讨论】:
标签: git deployment tags ansible
有没有一种简单的方法可以让 Ansible 检查特定 git 分支上的最新标签,而无需指定或传入标签?也就是说,Ansible 可以检测或派生分支上的最新标签,还是需要使用 shell 模块或其他东西单独完成?
【问题讨论】:
标签: git deployment tags ansible
Ansible 没有签出最新标签作为内置功能。它的 git 模块确实有 update 参数,这将确保特定的 repo 完全更新到其远程的 HEAD。
---
- git:
repo=git@github.com:username/reponame.git
dest={{ path }}
update=yes
force=no
如果设置为 false 并且存在未提交的更改,Force 将检查最新版本的存储库,覆盖未提交的更改或失败。
有关此模块的更多选项,请参阅 http://docs.ansible.com/git_module.html。
此时你可以做两件事:
1) 有一个带有标签的单独分支,并使用update 参数保持不变。
2) 您还可以使用 shell 模块并实现类似于:Git Checkout Latest Tag
---
- name: get new tags from remote
shell: "git fetch --tags"
args:
chdir: "{{ path }}"
- name: get latest tag name
shell: "git describe --tags `git rev-list --tags --max-count=1`"
args:
chdir: "{{ path }}"
register: latest_tag
然后将该结果作为refspec 与 git 模块一起使用
- git:
repo=git@github.com:username/reponame.git
dest={{ path }}
version: latest_tag.stdout
【讨论】:
这是一个有点老的问题,但如果碰巧从 GitHub 中提取,则有一个 github_release 模块。这显然对每个人都没有帮助,但它帮助了我:
- name: Install annoyingly unpackaged python module requirement
pip:
state: latest
umask: "0022"
name: github3.py
- name: Find current release tag
github_release:
user: "{{ github_user }}"
repo: "{{ github_repo }}"
action: latest_release
register: release_data
- name: Fetch current release
git:
repo: "https://github.com/{{ github_user }}/{{ github_repo }}.git"
dest: "{{ source_dir }}"
version: "{{ release_data.tag }}"
【讨论】:
用 curl 解决了...示例是关于 docker-compose
- name: Get version number of latest docker-compose
shell:
cmd: curl --silent 'https://api.github.com/repos/docker/compose/releases/latest' | grep '"tag_name":' | cut -d'"' -f4
register: docker_compose_latest_svn
changed_when: false
args:
warn: no
- set_fact:
docker_compose_latest: "{{ docker_compose_latest_svn.stdout }}"
when:
- docker_compose_latest_svn.stdout is defined
【讨论】: