如果你再次运行该剧本 , 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'
推荐阅读
- 人脸识别系统全过程讲解,告诉你是如何找到人的
- 一篇文章告诉你新手如何快速制作小程序,干货满满,建议收藏
- 如何在 Ubuntu 和其它 Linux 发行版上更新 grub
- 倒春寒来袭 如何保护宝宝不生病
- 春季如何做好中医保健养生
- 春季如何给肌肤保湿?7大对策让你肌肤水嫩嫩!
- 如何选购棕榈床垫 棕榈床垫品牌
- 淘宝直通车怎么优化 淘宝如何进行关键词优化
- 婚姻出现问题如何解决 婚姻不如意
- 玩穿越火线 高手教你如何超级跳和鬼跳六级跳 穿越火线超级跳