引言
這是一個系列的文章,講述的是一箇中小型開發團隊如何從零開始使用搭建基建 GitLab
程式碼託管平臺,以及使用 GitLab Runner
實現 CI/CD
的故事。本系列通過部署一個完整的 .net core
專案來做配合實戰,可能這個案例並不能適合每個人,但希望可以給剛接觸 GitLab
以及 CI/CD
的小夥伴帶來一些啟發。對 GitLab
以及 CI/CD
有一定了解的,可以略過本文,直接開啟下一章。
Gitlab CI&CD 是什麼?
如上官方圖示,可以理解為 Gitlab 給開發者提供了一項功能,在程式碼提交後自動觸發一段開發者自定義的指令碼,以此來完成諸如但不限於構建部署的工作。完成一次專案釋出我們通常需要以下 4 個步驟:
- 編譯
- 測試
- 構建
- 部署
編譯
在編譯階段我們是執行 dotnet build
進行包還原以及專案編譯,這裡還可以包含團隊的程式碼風格檢查
測試
測試階段主要跑我們自己寫的單元測試,題外話:測試也挺難寫的
構建
將我們測試通過的專案打包成 docker 映象,上傳到映象倉庫
部署
從映象倉庫上拉取我們映象,部署到叢集上,這裡後面我們使用 docker-compose
部署
準備工作
我們這裡需要做的事情串起來就是,程式碼提交到 gitlab
,觸發平臺的 CI/CD
任務,開始編譯程式碼,執行測試,打包映象並上傳映象,最後部署應用。
安裝 GitLab
version: "3"
services:
gitlab:
image: gitlab/gitlab-ce:13.1.2-ce.0
container_name: 'devops-gitlab'
restart: always
hostname: '<your hostname>'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url "<your gitlab url>"
gitlab_rails['gitlab_shell_ssh_port'] = 23
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "<your qq email>"
gitlab_rails['smtp_password'] = "xCcqh*L4jkqFCS"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '<your qq email>'
gitlab_rails['smtp_domain'] = "exmail.qq.com"
ports:
- '81:80'
- '443:443'
- '23:22'
volumes:
- '/gitlab/config:/etc/gitlab'
- '/gitlab/logs:/var/log/gitlab'
- '/gitlab/data:/var/opt/gitlab'
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "10"
我這邊使用 docker-compose 來安裝的,替換掉上面的對應的 域名地址 以及 郵箱即可使用。我這裡用的是 QQ 企業郵箱你也可以換成其他的。隨後在配置一下 nginx, 可以通過 80 埠訪問 gitlab。
upstream gitlab{
# 域名對應 gitlab配置中的 external_url
# 埠對應 gitlab 配置中的 nginx['listen_port'],通過環境變數可設定
server 192.168.1.42:81;
}
server{
listen 80;
# 此域名是提供給終端使用者的訪問地址
server_name <your gitlab host name>;
location / {
# 這個大小的設定非常重要,如果 git 版本庫裡面有大檔案,設定的太小,檔案push 會失敗,根據情況調整
client_max_body_size 50m;
proxy_redirect off;
#以下確保 gitlab中專案的 url 是域名而不是 http://git,不可缺少
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到 gitlab 內建的 nginx
proxy_pass http://gitlab;
index index.html index.htm;
}
}
安裝 GitLab Runner
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
- 註冊 runner
首先要先獲取gitlab-ci的Token:
專案主頁 -> Sttings -> CI/CD -> Runners Expand
使用命令註冊 gitlab-runner:
gitlab-runner register
需要按照步驟輸入:
- 輸入 gitlab 的服務URL,就是你 gitlab 的訪問地址
- 輸入 gitlab-ci 的Toekn,獲取方式參考上圖
- 關於整合服務中對於這個 runner 的描述
- 給這個 gitlab-runner 輸入一個標記,這個 tag 非常重要,在後續的使用過程中需要使用這個 tag 來指定 gitlab-runner
- 是否執行在沒有 tag 的 build 上面。在配置 gitlab-ci 的時候,會有很多 job,每個job可以通過tags屬性來選擇runner。這裡為true表示如果job沒有配置tags,也執行
- 是否鎖定 runner 到當前專案
- 選擇執行器,gitlab-runner 實現了很多執行器,可用在不同場景中執行構建,詳情可見 GitLab Runner Executors,這裡選用 Shell 模式
重複執行兩次,分別選擇 shell
模式以及 docker
模式
重新整理頁面就可以看到新增的一個Runner:
- 開通阿里雲 docker 映象倉庫
這個上阿里雲開通一下還是簡單的,就不細講了
結束
好了,到這裡準備工作差不多了,下一篇開始實戰。