是否有一种简单的方法让Ansible检出特定git分支上的最新标记,而无需指定或传入标记?也就是说,Ansible可以在分支上检测或派生最新的标签,还是需要使用shell模块或其他东西单独完成的事情?
答案 0 :(得分:6)
Ansible没有将最新标记作为内置功能检出。它的update
模块确实有git
参数,这将确保特定的repo与其远程的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
然后将该结果用作git模块的refspec
- git:
repo=git@github.com:username/reponame.git
dest={{ path }}
version: latest_tag.stdout
答案 1 :(得分:2)
这是一个古老的问题,但是如果碰巧从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 }}"
答案 2 :(得分:0)
用 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