持續整合指南:GitLab 的 CI/CD 工具設定與使用

2022-10-01 06:02:05

前言

寫程式碼這項工作,本質就是將工作自動化,減少手工操作提供效率,因為人的本質都是懶狗,程式設計師也不能例外,為了各種意義的效率提升(懶),我們需要持續整合工具,將程式碼測試、編譯、釋出這些重複性很高的工作,全部變成自動化,減輕工作量,提高效率,解放生產力,為華夏偉大復興貢獻力量

說回正題,持續整合工具主流的就 Jenkins 、Gitlab CI/CD 這些,因為我們剛好在用 Gitlab,所以就不去折騰 Jenkins 了,直接用這個好了~

關於 Gitlab 的安裝,可以參考我之前寫的文章:GitLab的安裝、設定、使用

概念科普

縮略詞 CI / CD 具有幾個不同的含義。CI/CD 中的"CI"始終指持續整合,它屬於開發人員的自動化流程。成功的 CI 意味著應用程式碼的新更改會定期構建、測試併合併到共用儲存庫中。該解決方案可以解決在一次開發中有太多應用分支,從而導致相互衝突的問題。

CI/CD 中的"CD"指的是持續交付和/或持續部署,這些相關概念有時會交叉使用。兩者都事關管道後續階段的自動化,但它們有時也會單獨使用,用於說明自動化程度。

…… (省略又臭又長的名詞解釋)

只需記得 CI/CD 其實就是一個流程(通常形象地表述為管道),用於實現應用開發中的高度持續自動化和持續監控。因案例而異,該術語的具體含義取決於 CI/CD 管道的自動化程度。許多企業最開始先新增 CI,然後逐步實現交付和部署的自動化(例如作為雲原生應用的一部分)。

安裝Gitlab-Runner

根據Gitlab官網的指引

# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# Give it permissions to execute
sudo chmod +x /usr/local/bin/gitlab-runner

# Create a GitLab CI user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# Install and run as service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

伺服器使用的是CentOS7系統,實際設定時遇到無法識別gitlab-runner命令的問題,用echo $PATH列印了一下環境變數發現是沒有/usr/local/bin,新增到PATH就可以了

安裝的時候會自動建立gitlab-runner使用者,Runner會在這個使用者下執行各種任務,當然使用者名稱和Home目錄都可以自定義,就是上面倒數第二個命令。

註冊Runner

在Gitlab中,依次進入:選單 - 管理員 - 概覽 - Runner - 註冊一個範例Runner

就會出來一個token,使用以下命令註冊即可

sudo gitlab-runner register --url http://gitlab地址:埠/ --registration-token HjymWn4gEzHaVizpvG

註冊過程中會讓你輸入一些資訊,最後需要選擇executer,可選項有virtualbox、docker、shell之類的,這裡我選的shell,直接執行命令控制專案部署。其他的executer等後面再來研究用法。

註冊完遼就可以在Gitlab的管理介面看到這個Runner了

為了讓所有專案都能用這個Runner進行部署,需要修改一下設定,把這個鉤打上

設定

為了讓gitlab-runner使用者能夠使用docker,需要將其加入到docker使用者組

usermod -aG docker gitlab-runner

設定docker代理

因為我們的生產伺服器不能直接存取外網,所以還得設定一下docker的代理

編輯檔案:/home/gitlab-runner/.docker/config.json

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy_ip:8080",
     "httpsProxy": "http://proxy_ip:8080",
     "noProxy": "localhost,127.0.0.1"
   }
 }
}

gitlab-ci.yml

只要在專案的根目錄中加入這個檔案,然後推播程式碼到 Gitlab (一般來說是 master 分支),Gitlab Runner 就會根據 script 來執行構建任務。

平時開發時,如果不想要自動構建,可以 checkout 到其他分支(例如 dev)進行開發,等到功能完成需要釋出的時候,再合併到 master 分支即可。

這裡我寫的是用 docker 部署一個 AspNetCore 應用的例子,實際還有 Python、Go、前端專案等常用例子,我後面再更新相關的文章~

variables:
  GIT_STRATEGY: none
stages:
  - deploy
deploy_job:
  stage: deploy
  only:
    - master
  script:
    - cd /home/gitlab-runner/projects/dotnet/dashboard
    - rm -rf dashboard-backend
    - git clone http://127.0.0.1:8080/deali/dashboard-backend.git
    - cd dashboard-backend
    - docker-compose up --build -d

小結

這樣就搞定了 Gitlab CI/CD 的基礎用法,也就是所謂的「持續整合」,可以說灰常好用了~

當然它的功能很強、很多,本文的例子只是用到了其中一種,更多的用法我還在探索中,有收穫的話後續會更新這個系列的文章。

參考資料