步驟一:設定 SSH 無需密碼登入伺服器
在伺服器上生成金鑰
利用 ssh-keygen
命令來生成金鑰。
此時在目錄 ~/.ssh
目錄下會有如下檔案:
- authorized_keys
- id_rsa
- id_rsa.pub
- known_hosts
其中 id_rsa
是私鑰,id_rsa.pub
是公鑰。
將公鑰加入 authorized_keys
裡
執行命令: cat ~/.ssh/id_rsa.pub >> authorized_keys
建立 GitLab 變數
- 進入 GitLab 的 group 裡。也可以在專案裡配置。
- 切換 TAB 至
Settings
=>CI/CD
=>Variables
。 - 建立變數
SSH_PRIVATE_KEY
,並將id_rsa
裡的內容複製進去。
步驟二:拉取程式碼授權設定
設定 Deploy Token
- 進入 GitLab 的 group 裡。也可以在專案裡配置。
- 切換 TAB 至
Settings
=>Repository
=>Deploy Tokens
。 - 新增一個
token
用於後端部署。 - 最後得到
username
和password
(以頁面展示為主)
注意:
- 這裡需要設定過期時間,一旦過期了,需要重新生成。
- 許可權請設定為只讀(
read_repository
)。
如何使用
- 地址拼接與替換,如:
https://username:password@gitlab.com/group/project.git
- 首次克隆,可以直接
git clone https://username:password@gitlab.com/group/project.git
- 已經克隆了,需要修改 remote url:
git remote set-url master https://username:password@gitlab.com/group/project.git
步驟三:專案裡的設定
設定專案變數
- 進入 GitLab 專案裡
- 切換 TAB 至
Settings
=>Runners
=>Shared runners
,Enable for this project。 - 切換 TAB 至
Settings
=>CI/CD
=>Variables
。 - 建立變數
DEPLOY_DIRECTORY
,用於定位專案在伺服器上的目錄。
往專案程式碼裡新增 .gitlab-ci.yml
image: ubuntu
stages:
- deploy
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
master-deploy:
stage: deploy
script:
- ssh root@$SERVER_IP "cd $DEPLOY_DIRECTORY && git checkout master && git pull origin master"
only:
- master
程式碼來源:GitLab-examples > ssh-private-key
額外:關注自動化部署是否執行成功
進入到專案裡的 CI/CD
中的 Pipelines
裡檢視執行情況。
來自我的GitHub:github.com/OverNaive/gitlab-ci
本作品採用《CC 協議》,轉載必須註明作者和本文連結