.NET Core部署到linux(CentOS)最全解決方案,入魔篇(使用Docker+Jenkins實現持續集成、自動化部署)
通過前面三篇:
.NET Core部署到linux(CentOS)最全解決方案,常規篇
.NET Core部署到linux(CentOS)最全解決方案,進階篇(Supervisor+Nginx)
.NET Core部署到linux(CentOS)最全解決方案,高階篇(Docker+Nginx 或 Jexus)
通過前面三篇文章的介紹,我們已經對.net core多方案部署到linux下有了非常全面的認識,小型團隊已經足夠使用。雖然目前的方案可以實現一鍵部署更新,但是還是需要登陸到linux伺服器去執行相應的命令。
顯示,這不是最優的方案,那麼還有沒有更好的方案呢?比如:當我們提交給git倉庫後,自動出發部署命令是不是就更方便了呢?
答案是肯定的,我們可以藉助jenkins來實現。
互聯網軟體的開發和發布,已經形成了一套標準流程,最重要的組成部分就是持續集成(Continuous integration,簡稱 CI) 。
1、CI/CD
1.1、持續集成
continuous integration 持續集成是一種軟體實踐,流程為:開發 => 打包 => 集成 => 測試
1.2、持續交付
continuous delivery 持續交付是一種軟體工程手法,流程為:測試 => 發布
1.3、持續部署
continous deployment 持續部署是在持續交付的管道中發布版本給最終用戶的一種軟體工程流程,流程為:發布 => 部署上線
2、Jenkins
Jenkins 是一個基於Java語言開發的CI持續構建工具,主要用於持續、自動的構建/測試軟體項目。它可以執行你預先設定好的設置和腳本,也可以和 Git工具做集成,實現自動觸發和定時觸發器構建。
jenkins官網://www.jenkins.io/
2.1、安裝jenkins
安裝docker-conpose
因為jenkins需要用到本地的docker-compose環境,執行以下命令安裝
docker exec -it jenkins /bin/bash
進入容器內部安裝docker-compose,安裝步驟去
1、構建自定義的Dockerfile
# touch Dockerfile
# vim Dockerfile
編寫Dockerfile:
FROM jenkins/jenkins
USER root
# 清除了基礎鏡像設置的源,切換成阿里雲源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb //mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb //mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb //mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源並安裝缺少的包
RUN apt-get update && apt-get install -y libltdl7 && apt-get update
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
# 安裝 docker-compose 因為等下構建環境的需要
RUN curl -L //github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
如果不安裝 libltdl7 會導致如下這個問題,原因是jenkins容器內部沒有這個包
docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
Build step 'Execute shell' marked build as failure
在Jenkins操作宿主的Docker的時候會出現拒絕訪問的問題,其實就是容器的jenkins用戶沒有許可權訪問容器外的docker命令,所以 RUN命令 需要把Jenkins用戶加入到Docker用戶組
2、構建jenkins鏡像
docker build . -t auto-jenkins
看到以下字樣就構建成功了。
Successfully built 80a4f61b5b6f
Successfully tagged auto-jenkins:latest
3、創建jenkins項目文件的掛載目錄
mkdir -p /var/jenkins_home
4、修改目錄許可權
這一步必不可少!會導致許可權不足報錯
chown -R 1000 /var/jenkins_home
5、run我們自定義jenkins鏡像 auto-jenkins
這裡我用7080作為對外的jenkins ip(因為我的8080被佔用了)
docker run --name jenkins -p 7080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /var/jenkins_home:/var/jenkins_home \
-d auto-jenkins
使用docker ps
查看運行中的容器,如看到如下圖,表示jenkins已正常啟動:
6、完成jenkins安裝
這裡需要安裝密碼,證明這是你的伺服器,進入容器:
docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
如下圖所示,生成好了密碼;
複製密碼後,單擊繼續按鈕。
如圖,點擊”安裝推薦的插件”,安裝jenkins常用插件
安裝完畢後,需要創建一個管理員用戶帳號,如下圖所示。
提示:安裝過程如果某個組件失敗,可以重試一下。
到這裡,jenkins安裝結果,填寫完管理員資訊後,接下來開始jenkins自動化部署之旅。
安裝成功後,Jenkins主介面:
2.2、jenkins配置
1、創建一個jenkins項目
新建項目
構建一個自由風格的軟體項目
2、源程式碼管理
這裡可以指定git分支
如果項目配置了公鑰,那麼在上圖中,我們還需要配置憑證,否則是不能鏈接到git倉庫的,如下圖所示。
3、構建觸發器
這裡的是設置輪詢去git拉取程式碼,如果程式碼有更新就觸發構建操作,
H/2 * * * *
是指每2分鐘輪詢拉取一次;
4、構建環境
Abort the build if it’s stuck 是指如果構建過程中卡住了,就終止構建;這裡是5是5分鐘,5分鐘超時構建失敗;
5、添加構建腳本Execute Shell
填寫構建腳本
image_version=`date +%Y%m%d%H%M`;
echo $image_version;
# 停止之前的docker container
CID=$(docker ps | grep "core50test" | awk '{print $1}')
echo $CID
if [ "$CID" != "" ];then
docker stop $CID
docker rm $CID
fi
#docker stop core50test;
# 刪除這個container
#docker rm core50test;
# build鏡像並且打上tag
docker build -t core50test:$image_version .;
docker images;
# 把剛剛build出來的鏡像跑起來
docker run -p 8066:5000 --name core50test -d core50test:$image_version;
docker logs core50test;
點擊保存回到core50test項目介面
單擊上圖名稱為”core50test”的項目,點擊「立即構建」
構建控制台輸出
構建成功,現在打開 //你的伺服器ip:5000,可以看到我們的網站:
如果網站有任何更改,提交程式碼,jenkins會自動拉取程式碼,並發布一個新的容器,等等刷新瀏覽器就行了;
構建狀態
Successful藍色:構建完成,並且被認為是穩定的。
Unstable黃色:構建完成,但被認為是不穩定的。
Failed紅色:構建失敗。
Disable灰色:構建已禁用
構建穩定性
構建穩定性用天氣表示:晴、晴轉多雲、多雲、小雨、雷陣雨。天氣越好表示構建越穩定,反之亦然。
最後借用一張Jenkins的思維導圖供大家參考:
一路走來數個年頭,感謝RDIFramework.NET框架的支援者與使用者,大家可以通過下面的地址了解詳情。
RDIFramework.NET官方網站://www.rdiframework.net/
RDIFramework.NET官方部落格://blog.rdiframework.net/
特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏!
RDIFramework.NET框架由海南國思軟體科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!
歡迎關注RDIFramework.NET框架官方微信公眾號(微訊號:guosisoft),及時了解最新動態。
使用微信掃描二維碼立即關注