溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Ansible同步GitHub

發布時間:2021-12-29 15:45:58 來源:億速云 閱讀:271 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么使用Ansible同步GitHub”,在日常操作中,相信很多人在怎么使用Ansible同步GitHub問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Ansible同步GitHub”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

使用 Ansible 管理 Git

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

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

Ansible 模塊

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

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

---
- name: "Mirror a Git repo with Ansible"
  hosts: localhost
  tasks:

Git 拉取和克隆

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

將你的第一個任務添加到劇本:

---
- name: "Mirror a Git repo with Ansible"
  hosts: localhost
  vars:
    git_dir: /tmp/soso.git
  tasks:
 
  - name: "Clone the git repo"
    git:
       repo: 'https://github.com/ozkl/soso.git'
       dest: '{{ git_dir }}'
       clone: yes
       update: yes

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

運行你的劇本:

$ ansible-playbook mirror.yaml

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

PLAY [Ansible Git mirror] ********
 
TASK [Gathering Facts] ***********
ok: [localhost]
 
TASK [Clone git repo] ************
changed: [localhost]
 
PLAY RECAP ***********************
localhost: ok=2 changed=1 failed=0 [...]

如果你再次運行該劇本,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='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  命令來調整腳本以適應你的需求,但是通過常規的拉取和推送操作,可以確保駐留在一臺服務器上的重要項目可以安全地鏡像到另一臺服務器上。

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

---
- name: "Mirror a Git repository with Ansible"
  hosts: localhost
  vars:
    git_dir: /tmp/soso.git
 
  tasks:
 
  - 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='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'

到此,關于“怎么使用Ansible同步GitHub”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女