Linux搭建.net core CI/CD環境


一、簡介

微服務開發中自動化、持續化工程十分重要,在成熟的CI/CD環境中項目團隊可以靈活分配,大大提供團隊效率。如果還不了解什么是CI/CD,可以先查看相關文章,這里主要介紹環境的搭建,相關原理就不過多搬書了。

二、開始搭建

准備

目前主流的ci/cd環境都是基於容器化管理的,所以想要搭建這一環境必須熟練docker操作。版本控制選擇git,構建工具選擇Jenkins,所以開始前需要先掌握這些技術。

Step1:安裝docker

Ubuntu 18.04 docker安裝

docker安裝方式有多種,存儲庫安裝方式如下:

更新存儲庫:

sudo apt-get update

卸載舊版本docker:

sudo apt-get remove docker docker-engine docker.io

安裝docker:

sudo apt install docker.io

啟動docker、開機自啟:

sudo systemctl start docker
sudo systemctl enable docker

檢查版本:

docker --version

Step2:選擇版本控制器

代碼托管最好選擇git,git倉庫公司應該都有搭建,如果沒有也可以選擇GitHub、gitLab、gogs等git工具。

step3:Jenkins安裝

存儲庫方式安裝Jenkins

更新存儲庫、安裝Java:

sudo apt updatesudo 
apt install openjdk-8-jdk

導入Jenkins存儲庫的GPG密鑰:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

將Jenkins存儲庫添加到系統中:

sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

更新存儲庫、安裝Jenkins:

sudo apt updatesudo 
apt install jenkins

檢查Jenkins狀態:

systemctl status jenkins

安裝成功則輸出如下:

● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Wed 2018-08-22 13:03:08 PDT; 2min 16s ago
    Docs: man:systemd-sysv-generator(8)
    Tasks: 0 (limit: 2319)
CGroup: /system.slice/jenkins.service

記得開放8080端口

進入Jenkins:http://服務器IP:8080

 獲取初始密碼:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

登錄成功:

 

 選擇左邊推薦插件安裝:

 設置管理員密碼:

 配置完成:

 以上步驟都成功的話就可以開始創建自動化工程了。

Step4:創建Jenkins任務

進入Jenkins主頁,選擇新建任務:

 輸入任務名,選擇自由風格:

 確定后進入任務配置,源碼管理選擇git,tfs也可以但是不建議

 觸發器根據需要選擇,我是通過手動發布所以並未選擇觸發器

 

 構建環境選擇刪除工作空間

 最后是關鍵一步,也是最容易出錯的一步,執行命令:

 

#!/bin/sh
cd /var/lib/jenkins/workspace/auth-server/applications/AuthServer.Host/publish
docker container prune << EOF
y
EOF
docker container ls -a | grep "auth-server"
if [ $? -eq 0 ];then
    docker container stop auth-server
    docker container rm auth-server
fi
docker image prune << EOF
y
EOF
docker build -t auth-server .
docker run -d -p 64999:80 --name=auth-server auth-server

 完成后應用並保存。

shell命令分析:

熟悉Linux命令的話應該可以大致看懂上面的shell命令,命令執行步驟如下:

1. 進入工程的工作空間

2. 判斷是否存在“auth-server”容器,存在則刪除容器及鏡像

3. 構建docker鏡像

4. 啟動docker容器

這里的構建步驟與標准CI/CD有差異,標准CI/CD是拉取代碼后在服務器上構建(build)代碼並打包docker鏡像。上述過程是在本地構建並發布至publish目錄中,然后提交publish文件,Jenkins拉取編譯文件進行docker發布。

為什么要本地構建:

在本地構建代碼並提交要比提交代碼后服務器構建多出一步,這一步並不是多此一舉,下面分析下本地構建的原因:

1. 環境:由於國內網絡原因,服務器構建代碼時會出現很多拉取nuget、npm包超時現象,而Jenkins發布會有時間限制,發布超時會默認失敗。如果調整Jenkins發布超時時間則沒有意義,發布時間超過一小時還不如手動打包docker呢。

2. 節省資源: 構建代碼十分消耗系統資源,在服務較多時一次代碼提交需要同時發布數個有關聯的服務,這時服務器很可能會死機導致開發環境大量服務超時,十分影響前后端開發人員工作進度。

3. 快速:在高頻率的產品迭代中,微服務的發布也會十分頻繁,采用本地構建Jenkins發布的方式會大大縮短發布時間,甚至一個服務的發布只需1分鍾。

4. 排錯:標准的CI/CD發布模式中,開發人員提交的代碼很有可能有異常,這時服務就會發布失敗,如果其他服務依賴於此服務則會導致其他服務出現接口異常現象,耦合較大的話會直接崩潰。發現異常后,開發人員需要重新拉取代碼查看異常,而異常往往是由其他開發人員提交代碼不完整導致。等到代碼異常解決,重新發布可能一個小時就過去了。。。通過本地構建再發布就會完美避開這些周折。

Jenkins發布演示:

選擇一個微服務:

選擇立即構建:

 

 左下會輸入發布日志,上面輸出代表發布成功。

三、總結

如果以上安裝配置都成功的話,那么恭喜你,微服務開發必備的CI/CD環境已經搭建完成,沒有成功的話也沒關系,多次嘗試一定會成功的,我也是幾天的折騰才搭好的(服務器都重裝了好幾次)。后續會介紹更多在abp vNext微服務中進行實際業務開發,同時也會介紹vue的相關開發技巧,感興趣的話可以持續關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM