如何使用Ansible查看最新的git标签?

时间:2015-03-19 19:47:31

标签: git deployment tags ansible

是否有一种简单的方法让Ansible检出特定git分支上的最新标记,而无需指定或传入标记?也就是说,Ansible可以在分支上检测或派生最新的标签,还是需要使用shell模块或其他东西单独完成的事情?

3 个答案:

答案 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