使用ansible克隆带有子模块的git项目

4

尽管看起来很简单,但当尝试克隆一个带有子模块的git存储库时,我的ansible设置会挂起。 “父”存储库被克隆没有问题,但是ansible任务无法克隆子模块,实际上在此之后挂起,就好像它正在等待某种响应一样...

这是克隆存储库的ansible任务:

- name: Clone/Pull the {{ certificate_authority.repo.name }} repository
  become: yes
  git: repo="{{ ca.repo.url }}" force=yes accept_hostkey=yes clone=yes version="{{ git_branch | default(git_tag) }}"
       dest="{{ ca.repo.dest }}" key_file={{ ca.repo.key.location }}/{{ ca.repo.key.name }} recursive=yes track_submodules=yes

有没有想法,为什么ansible在克隆这个仓库时会卡住?

运行你的playbook时,使用-vvv参数是否会产生有用的细节?如果它挂起时运行ps命令,它正在运行哪个git命令行?你能否在同一系统上从命令行成功克隆它? - larsks
使用 -vvvv 运行会包含以下有趣的片段 ...正在查找 /var/folders/z9/v1czs6dd7vb5jtq_0fr8f5y80000gp/T/tmp_lrYWR\r\ndebug3: 发送消息 fd 8 T:17 I:2\r\ndebug3: 收到状态回复 T:101 I:2\r\ndebug1: 无法查看远程文件: 没有这样的文件或目录\r\ndebug3: 发送消息 SSH2_FXP_OPEN I:3 ... SSH2_FXP_STATUS 0\r\ndebug3: mux_client_read_packet: 读取标头失败: 管道破裂\r\ndebug2: 从主进程接收退出状态 0\r\n')。运行 ps aux|grep git 显示以下内容正在运行 - reayn3
运行 ps aux | grep git 命令可以显示正在运行的命令,包括 /usr/bin/python /tmp/ansible_6X_csE/ansible_module_git.py/usr/bin/git submodule update --init --recursive --force/bin/sh /usr/lib/git-core/git-submodule update --init --recursive --force(对于每个子模块)、git submodule--helper update-clone/usr/lib/git-core/git submodule--helper clone --path lib/first-subproject --name lib/first-subproject --url https://reayn@bitbucket.org/reayn/first-subproject.git。因此,似乎 ansible 正在尝试克隆存储库。 - reayn3
1个回答

5

如果其他人也遇到了这个问题,解决方法是确保你在.gitmodules文件中的子模块使用git协议,例如 ssh://git@....


+100 我不明白为什么使用ansible git模块时会提示我输入密码,而手动执行git pull却可以正常工作。显然,当我手动拉取时没有拉取子模块,所以当手动操作成功时,这是一个错误的结果。 - Precastic

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