方案一:使用 http/https 協議
企業用的私有倉庫通常都在內網,個人用戶基本都偏愛 https 協議——因為這不需要配置 ssh 密鑰,而且賬號密碼保存在 Windows 的憑據管理器或者 MacOS 的 keychain 里面,也還算安全。
但是使用賬號密碼進行驗證,不適合給 CI/CD 使用。Linux 下沒有完善的密鑰保管工具,有限的幾個也感覺很難用。
網上流傳比較廣的 linux 下保存 git 憑據的方法,是使用如下方式:
# 內網倉庫使用自簽名 ssl 證書,無法通過 ssl 驗證(不安全)
git config --global http.sslVerify false
# 將 git 賬號密碼直接保存到 ~/.git-credentials 中(明文!不安全)
git config --global credential.helper store
# 直接將密碼注入到 ~/.git-credentials
echo "https://${GIT_USER}:${GIT_PASSWD}@<private-git-url>.com" >> .git-credentials
顯然這非常暴力。。安全性約等於零。。
方案二:ssh 協議
ssh 協議使用 ssh 密鑰進行驗證,相對而言更安全——並不能通過密鑰登錄 Gitlab 頁面進行其他操作。
因此 ssh 協議很適合給 CI/CD 使用。
為了讓 CI/CD 服務器在拉取 Go 依賴時,默認使用 ssh 協議,你需要運行下面這一行命令:
# for github,私有倉庫的話,改下域名就行。
git config --global url."git@github.com:".insteadOf "https://github.com/"
然后再設置好 ssh 密鑰,就能安全地拉取依賴了。密鑰可以通過 jenkins 等 CI/CD 工具進行管理,閱后即焚,進一步提升安全性。