如何使用Ansible Git模块获取检出代码的SHA?

13

我想要用Ansible存储当前已检出的提交SHA-1哈希版本的代码。

我想要使用set_fact该版本,在另一个角色中使用。


你是指playbook所在的repo的git提交ID吗? - udondan
抱歉,我没有解释得很清楚。是的,指的是git提交ID或SHA-1哈希值,但是是一个独立的git仓库,playbook会使用git模块进行检出。 - tread
1个回答

23

Ansible中的git模块会为您返回此信息,您只需要在一个变量中注册它(在下面的示例中,该变量是gitresult)。

- hosts: web
  tasks:
    - name: Checkout repo
      git:
        repo=https://github.com/michalgasek/www-discogs.git
        dest=/vagrant/checkout
        update=yes
        accept_hostkey=yes
      register: gitresult

    - debug: msg="SHA-1 before git update is {{ gitresult.before }}"
    - debug: msg="SHA-1 after git update is {{ gitresult.after }}"

运行中:

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [192.168.2.201]

TASK [Checkout repo] ***********************************************************
ok: [192.168.2.201]

TASK [debug] *******************************************************************
ok: [192.168.2.201] => {
    "msg": "SHA-1 before git update is 87544e2ea1c8dec30e5fc68302caa262b10affda"
}

TASK [debug] *******************************************************************
ok: [192.168.2.201] => {
    "msg": "SHA-1 after git update is 87544e2ea1c8dec30e5fc68302caa262b10affda"
}

我希望它能解决你的问题。


1
有没有办法使用git模块在本地检查SHA-1,而不依赖于对远程repo的访问?这显然是可能的(它在简单的git log命令中显示),但是git模块需要repo参数,并且我的测试似乎证实如果无法访问,则会出现错误。 - AlanSE
4
如果git模块需要repo参数,则它将无法工作。但是您可以在上述用例中使用command模块:command: git log --pretty=format:"%H" -n 1或者command: git rev-parse HEAD将给您SHA-1,只需register: gitresult,您的SHA-1将可在{{ gitresult.std_out }}中访问。 - Michal Gasek
是的,那是一个不错的有效选项。通过更详细的测试,我还发现将cloneupdate都设置为false将防止下载,这也是官方文档中建议的。 - AlanSE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接