自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Ansible同步GitHub和GitLab

運維 系統(tǒng)運維 開源
通過使用 Ansible 鏡像 Git 存儲庫,保護(hù)對重要項目的訪問。如果在過去的幾十年中互聯(lián)網(wǎng)教給了我們一些東西,那就是依靠互聯(lián)網(wǎng)神奇地創(chuàng)建備份并不是冗余的最可靠途徑。

如何使用Ansible同步GitHub和GitLab

通過使用 Ansible 鏡像 Git 存儲庫,保護(hù)對重要項目的訪問。

開源無處不在。它在家里的計算機(jī)上、在工作場所的計算機(jī)上、在互聯(lián)網(wǎng)上,并且很多都由 Git 管理。由于 Git 是分布式的,因此許多人也將其視為一種眾包的備份解決方案。從理論上講,每當(dāng)有人將 Git 存儲庫克隆到其本地計算機(jī)時,他們就創(chuàng)建了該項目源代碼的備份。如果有 100 個人這樣做,則存儲庫就有 100 個備份副本。

從理論上講,這可以緩解“災(zāi)難”的影響,例如當(dāng)項目維護(hù)者突然決定刪除存儲庫莫名其妙地阻止所有流量,導(dǎo)致開發(fā)人員們無頭蒼蠅般地尋找誰擁有主分支的最新版本。類似的,整個代碼托管站點也會消失。沒有人會想到 Google Code、Microsoft CodePlex 或 Gitorious 會在鼎盛時期將被關(guān)閉。

簡而言之,如果在過去的幾十年中互聯(lián)網(wǎng)教給了我們一些東西,那就是依靠互聯(lián)網(wǎng)神奇地創(chuàng)建備份并不是冗余的最可靠途徑。

此外,對于許多人來說,很多開源項目都托管在 GitHub 上是個問題 —— GitHub 并不是開放平臺。許多開發(fā)人員和用戶都希望支持諸如 GitLab 之類的堆棧并與之交互,它具有開源社區(qū)版本。

使用 Ansible 管理 Git

Git 的去中心方式對于解決這個問題很有用。使用純 Git,你可以使用一個 push 命令輕松地將其推到兩個或多個存儲庫。但是,為了使其在發(fā)生意外故障時有用,你必須經(jīng)常與 Git 存儲庫進(jìn)行交互(特別是推送)。此外,即使你可能永遠(yuǎn)不會自己推送或拉出代碼,也可能有一些要備份的存儲庫。

但是,使用 Ansible,你可以自動執(zhí)行項目主分支(或其他任何分支)的 Git 拉取,然后自動進(jìn)行存儲庫到“異地”鏡像的 Git 推送。換句話說,你可以讓你的計算機(jī)定期從 GitHub 拉取并推送到 GitLab 或 Gitolite 或 Gitea(或你喜歡的任何 Git 托管主機(jī))。

Ansible 模塊

如果不是因其出色的模塊集合,那么 Ansible 就沒那么出色。像 Python 的第三方庫或 Linux 的應(yīng)用程序一樣,這個技術(shù)引擎的一個有用而令人驚訝的簡單技巧是,Ansible 以其他人貢獻(xiàn)的組件而聞名。因為本文正在研究如何有效和可靠地備份 Git 存儲庫,所以這里使用的模塊是 Git 模塊ini_file 模塊。

首先,創(chuàng)建一個名為 mirror.yaml 的文件作為劇本playbook。你可以像通常使用 Ansible 一樣,從 nametask 條目開始。本示例將 localhost 添加到 hosts 列表中,以便在控制器計算機(jī)(你現(xiàn)在坐在前面的計算機(jī))上運行動作play,但是在現(xiàn)實生活中,你可能會在特定的主機(jī)或一組網(wǎng)絡(luò)上的主機(jī)上運行它。

  1. ---
  2. - name: "Mirror a Git repo with Ansible"
  3. hosts: localhost
  4. tasks:

Git 拉取和克隆

如果要進(jìn)行備份,則需要最新代碼的副本。明顯,在 Git 倉庫中實現(xiàn)這一目標(biāo)的方法是執(zhí)行 git pull。 但是,pull 會假定克隆已經(jīng)存在,而寫得很好的 Ansible 動作(Ansible 腳本)則盡可能少的假定。最好告訴 Ansible 先克隆存儲庫。

將你的第一個任務(wù)添加到劇本:

  1. ---
  2. - name: "Mirror a Git repo with Ansible"
  3. hosts: localhost
  4. vars:
  5. git_dir: /tmp/soso.git
  6. tasks:
  7.  
  8. - name: "Clone the git repo"
  9. git:
  10. repo: 'https://github.com/ozkl/soso.git'
  11. dest: '{{ git_dir }}'
  12. clone: yes
  13. update: yes

這個例子使用了開源的、類似于 Unix 的操作系統(tǒng) soso 作為我要鏡像的存儲庫。這是一個完全任意的選擇,絕不意味著我對該存儲庫的未來缺乏信心。它還使用變量來引用目標(biāo)文件夾 /tmp/soso.git,這很方便,并且如果以后你希望將它擴(kuò)展為一個通用的鏡像腳本也會受益。在現(xiàn)實生活中,你的工作機(jī)上可能會比 /tmp 具有更永久的位置,例如 /home/gitmirrors/soso.git/opt/gitmirrors/soso.git

運行你的劇本:

  1. $ ansible-playbook mirror.yaml

首次運行該劇本時,Ansible 會正確檢測到 Git 存儲庫在本地尚不存在,因此將其克隆。

  1. PLAY [Ansible Git mirror] ********
  2.  
  3. TASK [Gathering Facts] ***********
  4. ok: [localhost]
  5.  
  6. TASK [Clone git repo] ************
  7. changed: [localhost]
  8.  
  9. PLAY RECAP ***********************
  10. localhost: ok=2 changed=1 failed=0 [...]

如果你再次運行該劇本,Ansible 會正確檢測到自上次運行以來沒有任何更改,并且會報告未執(zhí)行任何操作:

  1. localhost: ok=2 changed=0 failed=0 [...]

接下來,必須指示 Ansible 將存儲庫推送到另一個 Git 服務(wù)器。

Git 推送

Ansible 中的 Git 模塊不提供 push 功能,因此該過程的一部分是手動的。但是,在將存儲庫推送到備用鏡像之前,你必須具有一個鏡像,并且必須將鏡像配置為備用遠(yuǎn)程服務(wù)器remote。

首先,必須將備用的遠(yuǎn)程服務(wù)器添加到 Git 配置。因為 Git 配置文件是 INI 樣式的配置,所以你可以使用 ini_file Ansible 模塊輕松地添加所需的信息。將此添加到你的劇本:

  1. - name: "Add alternate remote"
  2. ini_file: dest={{ git_dir }}/.git/config section='remote \"mirrored\"' option=url value='git@gitlab.com:example/soso-mirror.git'
  3. tags: configuration

為此,你必須在目標(biāo)服務(wù)器上有一個空的存儲庫(在本例中為 GitLab.com)。如果需要在劇本中創(chuàng)建目標(biāo)存儲庫,可以按照 Steve Ovens 的出色文章《如何使用 Ansible 通過 SSH 設(shè)置 Git 服務(wù)器》來完成。

最后,直接使用 Git 將 HEAD 推送到備用遠(yuǎn)程服務(wù)器:

  1. - name: "Push the repo to alternate remote"
  2. shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'

像往常一樣運行該劇本,然后使該過程自動化,這樣你就不必再次直接運行它了。你可以使用變量和特定的 Git 命令來調(diào)整腳本以適應(yīng)你的需求,但是通過常規(guī)的拉取和推送操作,可以確保駐留在一臺服務(wù)器上的重要項目可以安全地鏡像到另一臺服務(wù)器上。

這是完整的劇本,供參考:

  1. ---
  2. - name: "Mirror a Git repository with Ansible"
  3. hosts: localhost
  4. vars:
  5. git_dir: /tmp/soso.git
  6.  
  7. tasks:
  8.  
  9. - name: "Clone the Git repo"
  10. git:
  11. repo: 'https://github.com/ozkl/soso.git'
  12. dest: '{{ git_dir }}'
  13. clone: yes
  14. update: yes
  15.  
  16. - name: "Add alternate remote"
  17. ini_file: dest={{ git_dir }}/.git/config section='remote \"mirrored\"' option=url value='git@gitlab.com:example/soso-mirror.git'
  18. tags: configuration
  19. - name: "Push the repo to alternate remote"
  20. shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2018-03-24 20:27:58

GitHub代碼開發(fā)者

2022-07-29 15:19:27

Dockersudo權(quán)限

2020-10-10 20:30:05

Ansible自動化工具系統(tǒng)運維

2020-01-02 10:44:22

運維架構(gòu)技術(shù)

2021-10-14 09:55:28

AnsibleanacronLinux

2023-02-10 13:39:11

大裁員GitHub團(tuán)隊

2022-11-22 13:00:38

2021-05-13 21:21:50

React應(yīng)用GitHub

2016-10-17 13:33:26

原子主機(jī)AnsibleCockpit

2022-11-23 14:13:03

Ansible條件判斷

2024-02-28 07:50:06

代碼管理工具開發(fā)

2016-10-24 09:09:48

AnsibleVagrantFedora

2021-06-02 21:13:44

Github配置項目

2018-04-16 13:56:31

GitHubPythonFlask

2023-12-11 18:15:46

AnsibleMinikubeKubernetes

2020-09-01 20:53:26

DocsifyGitHub Page文檔網(wǎng)站

2016-10-18 21:10:17

GitHubBitbucketGitLab

2024-02-20 08:08:43

2020-04-16 08:00:00

Ansible Vau敏感數(shù)據(jù)加密

2018-02-27 09:00:00

UbuntuGitGithub
點贊
收藏

51CTO技術(shù)棧公眾號