寫程式碼這項工作,本質就是將工作自動化,減少手工操作提供效率,因為人的本質都是懶狗,程式設計師也不能例外,為了各種意義的效率提升(懶),我們需要持續整合工具,將程式碼測試、編譯、釋出這些重複性很高的工作,全部變成自動化,減輕工作量,提高效率,解放生產力,為華夏偉大復興貢獻力量
說回正題,持續整合工具主流的就 Jenkins 、Gitlab CI/CD 這些,因為我們剛好在用 Gitlab,所以就不去折騰 Jenkins 了,直接用這個好了~
關於 Gitlab 的安裝,可以參考我之前寫的文章:GitLab的安裝、設定、使用
概念科普
縮略詞 CI / CD 具有幾個不同的含義。CI/CD 中的"CI"始終指持續整合,它屬於開發人員的自動化流程。成功的 CI 意味著應用程式碼的新更改會定期構建、測試併合併到共用儲存庫中。該解決方案可以解決在一次開發中有太多應用分支,從而導致相互衝突的問題。
CI/CD 中的"CD"指的是持續交付和/或持續部署,這些相關概念有時會交叉使用。兩者都事關管道後續階段的自動化,但它們有時也會單獨使用,用於說明自動化程度。
…… (省略又臭又長的名詞解釋)
只需記得 CI/CD 其實就是一個流程(通常形象地表述為管道),用於實現應用開發中的高度持續自動化和持續監控。因案例而異,該術語的具體含義取決於 CI/CD 管道的自動化程度。許多企業最開始先新增 CI,然後逐步實現交付和部署的自動化(例如作為雲原生應用的一部分)。
根據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目錄都可以自定義,就是上面倒數第二個命令。
在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的代理
編輯檔案:/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 (一般來說是 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 的基礎用法,也就是所謂的「持續整合」,可以說灰常好用了~
當然它的功能很強、很多,本文的例子只是用到了其中一種,更多的用法我還在探索中,有收穫的話後續會更新這個系列的文章。