最簡單的 git server

一般來說,Ansible Playbook 要讓 Ansible Tower (或新的名字 Ansible Automation Controller) 或 AWX 使用,有幾種方式:

  1. 放在 Ansible Tower / Ansible Automation Controller / AWX 的主機裡,這樣的作法是最簡單,但若需要放新的 playbook 進去,勢必要使用 SSH 登入,然後才能處理。
  2. 放在 git server,這是 Best practice,一來 playbook 的變更有紀錄可循,二來也能很方便的取用。但缺點是需要架設 git server,這時候就會自建 gitlab、gitea 或是放在外部的 github、gitlab 。

這裡要介紹一種方式,是我突然想到的,也是我之前忽略的。

git server 本身只要有 SSH server ,其實就可以了,無需額外架設。架設的方法可以參考 Setting up the server

以下紀錄如何進行

第一步,先準備好 Linux 主機,已經安裝好 git 與 SSH 伺服器。

第二步,建立一個使用者帳號,名稱為 git

sudo adduser git

第三步,在 git 使用者家目錄下,建立 .ssh/authorized_keys 檔案,並變更權限為 0600

su git -c "cd /home/git && mkdir -p .ssh && touch .ssh/authorized_keys && chmod 0600 .ssh/authorized_keys"

第四步,把可以登入使用者的 SSH Public key 放到 git 使用者的 .ssh/authorized_keys 檔案裡。

這邊可以先把要登入的主機的 SSH public key 先上傳到 git server 的 /tmp 目錄,然後再用 cat 指令,把 SSH public key 內容附加到 .ssh/authorized_keys 裡。

cat /tmp/id_rsa.pub >> /home/git/.ssh/authorized_keys

或者是就用編輯器去編輯 .ssh/authorized_keys,然後把 SSH public key 內容複製到裏面去。

第五步,從要登入的主機 SSH private key 登入

ssh git@<git-server>

第五步,這邊我們把專案統一放到 /srv/git 目錄下,這邊以 project1 為例

mkdir -p /srv/git/project1
cd /srv/git/project1
git init --bare
chown -R git:git /srv/git

第六步,在其他主機以 git 指令驗證

git clone git@<git-server>

大功告成,這樣就做出一個最簡單的 Git server 了。使用 git 指令就可以操作,也可以透過 SSH 指令去新增專案了。

ssh git@<git-server> "mkdir -p /srv/git/project2 && cd /srv/git/project2 && git init --bare"

這時候到 Ansible Tower 上,先新增 Credential :

  • Credential type 選擇 Source control
  • SCM private key,填入前面使用的 SSH private key

按下 Save。接下來新增專案:

  • 類型選為 Git
  • SCM URL 填入 git@<git-server>
  • SCM Credential 選到剛剛新增的 Credential

按下 Save,Ansible Tower 就會開始更新。

好了,經過這樣的設定,Ansible Tower 就已經跟剛剛建置好的 git server 整合到一起了。