如何使用 Ansible 查看最近的 git 标签?
How to check out most recent git tag using Ansible?
有没有一种简单的方法可以让 Ansible 检查特定 git 分支上的最新标签,而无需指定或传入标签?也就是说,Ansible 能否检测或导出分支上的最新标记,或者是否需要使用 shell 模块或其他东西单独完成?
Ansible 没有将签出最新标签作为内置功能。它的 git
模块确实有 update
参数,这将确保特定的回购与其远程 HEAD 完全同步。
---
- git:
repo=git@github.com:username/reponame.git
dest={{ path }}
update=yes
force=no
如果设置为 false 并且存在未提交的更改,强制将签出最新版本的存储库以覆盖未提交的更改或失败。
有关此模块的更多选项,请参阅 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
有没有一种简单的方法可以让 Ansible 检查特定 git 分支上的最新标签,而无需指定或传入标签?也就是说,Ansible 能否检测或导出分支上的最新标记,或者是否需要使用 shell 模块或其他东西单独完成?
Ansible 没有将签出最新标签作为内置功能。它的 git
模块确实有 update
参数,这将确保特定的回购与其远程 HEAD 完全同步。
---
- git:
repo=git@github.com:username/reponame.git
dest={{ path }}
update=yes
force=no
如果设置为 false 并且存在未提交的更改,强制将签出最新版本的存储库以覆盖未提交的更改或失败。
有关此模块的更多选项,请参阅 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