【问题标题】:How to check out most recent git tag using Ansible?如何使用 Ansible 查看最新的 git 标签?
【发布时间】:2015-03-19 19:47:30
【问题描述】:

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

【问题讨论】:

    标签: git deployment tags ansible


    【解决方案1】:

    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
    

    【讨论】:

    • 我没有测试过那个代码。如果它有帮助并且需要一些调整,请编辑这些修复。
    【解决方案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 }}"
    

    【讨论】:

    • 不适用于python 2.7,github3.py不支持:(
    • python2 在 2020 年 1 月达到 EOL,这并不令人震惊。
    【解决方案3】:

    用 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
    

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2013-06-29
      • 2021-01-28
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多