1. 程式人生 > >.NetCore 配合 Gitlab CI&CD 實踐 - 開篇

.NetCore 配合 Gitlab CI&CD 實踐 - 開篇

### 引言 這是一個系列的文章,講述的是一箇中小型開發團隊如何從零開始使用搭建基建 `GitLab` 程式碼託管平臺,以及使用 `GitLab Runner` 實現 `CI/CD` 的故事。本系列通過部署一個完整的 `.net core` 專案來做配合實戰,可能這個案例並不能適合每個人,但希望可以給剛接觸 `GitLab` 以及 `CI/CD` 的小夥伴帶來一些啟發。對 `GitLab` 以及 `CI/CD` 有一定了解的,可以略過本文,直接開啟下一章。 ### Gitlab CI&CD 是什麼? ![](https://img2020.cnblogs.com/blog/1058512/202007/1058512-20200726170533855-1770238985.jpg) 如上官方圖示,可以理解為 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: '' environment: GITLAB_OMNIBUS_CONFIG: | external_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'] = "" 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'] = '' 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 ; 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 ![](https://img2020.cnblogs.com/blog/1058512/202007/1058512-20200726214000212-778086077.jpg) 使用命令註冊 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 映象倉庫 這個上阿里雲開通一下還是簡單的,就不細講了 ### 結束 好了,到這裡準備工作差不多了,下一篇開始實戰。