一個 GitLab CI/CD 的學習筆記

OverNaive發表於2020-09-03

步驟一:設定 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 變數

  1. 進入 GitLab 的 group 裡。也可以在專案裡配置。
  2. 切換 TAB 至 Settings => CI/CD => Variables
  3. 建立變數 SSH_PRIVATE_KEY,並將 id_rsa 裡的內容複製進去。

步驟二:拉取程式碼授權設定

設定 Deploy Token

  1. 進入 GitLab 的 group 裡。也可以在專案裡配置。
  2. 切換 TAB 至 Settings => Repository => Deploy Tokens
  3. 新增一個 token 用於後端部署。
  4. 最後得到 usernamepassword (以頁面展示為主)

注意:

  1. 這裡需要設定過期時間,一旦過期了,需要重新生成。
  2. 許可權請設定為只讀(read_repository)。

如何使用

  1. 地址拼接與替換,如:https://username:password@gitlab.com/group/project.git
  2. 首次克隆,可以直接 git clone https://username:password@gitlab.com/group/project.git
  3. 已經克隆了,需要修改 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 協議》,轉載必須註明作者和本文連結

相關文章