如何使用 Ansible 同步 GitHub 和 GitLab( 二 )

如果你再次运行该剧本 , Ansible 会正确检测到自上次运行以来没有任何更改 , 并且会报告未执行任何操作:
localhost: ok=2 changed=0 failed=0 [...]接下来 , 必须指示 Ansible 将存储库推送到另一个 Git 服务器 。
Git 推送Ansible 中的 Git 模块不提供 push 功能 , 因此该过程的一部分是手动的 。但是 , 在将存储库推送到备用镜像之前 , 你必须具有一个镜像 , 并且必须将镜像配置为备用 远程服务器(remote) 。
首先 , 必须将备用的远程服务器添加到 Git 配置 。因为 Git 配置文件是 INI 样式的配置 , 所以你可以使用 ini_file Ansible 模块轻松地添加所需的信息 。将此添加到你的剧本:
- name: "Add alternate remote"ini_file: dest={{ git_dir }}/.git/config section='remote "mirrored"' option=url value=https://www.isolves.com/it/rj/czxt/linux/2020-03-06/'git@gitlab.com:example/soso-mirror.git'tags: configuration为此 , 你必须在目标服务器上有一个空的存储库(在本例中为 GitLab.com ) 。如果需要在剧本中创建目标存储库 , 可以按照 Steve Ovens 的出色文章《 如何使用 Ansible 通过 SSH 设置 Git 服务器 》来完成 。
最后 , 直接使用 Git 将 HEAD 推送到备用远程服务器:
- name: "Push the repo to alternate remote"shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'像往常一样运行该剧本 , 然后使该过程自动化 , 这样你就不必再次直接运行它了 。你可以使用变量和特定的 Git 命令来调整脚本以适应你的需求 , 但是通过常规的拉取和推送操作 , 可以确保驻留在一台服务器上的重要项目可以安全地镜像到另一台服务器上 。
这是完整的剧本 , 供参考:
【如何使用 Ansible 同步 GitHub 和 GitLab】---- name: "Mirror a Git repository with Ansible"hosts: localhostvars:git_dir: /tmp/soso.gittasks:- name: "Clone the Git repo"git: repo: 'https://github.com/ozkl/soso.git' dest: '{{ git_dir }}' clone: yes update: yes- name: "Add alternate remote"ini_file: dest={{ git_dir }}/.git/config section='remote "mirrored"' option=url value=https://www.isolves.com/it/rj/czxt/linux/2020-03-06/'git@gitlab.com:example/soso-mirror.git'tags: configuration - name: "Push the repo to alternate remote"shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'


推荐阅读