.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官網:https://www.jenkins.io/

2.1、安裝jenkins
安裝docker-compose
因為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 http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://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 https://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"的項目,點擊“立即構建”


構建控制臺輸出

構建成功,現在打開 http://你的服務器ip:5000,可以看到我們的網站:

如果網站有任何更改,提交代碼,jenkins會自動拉取代碼,并發布一個新的容器,等等刷新瀏覽器就行了;

構建狀態
Successful藍色:構建完成,并且被認為是穩定的。
Unstable黃色:構建完成,但被認為是不穩定的。
Failed紅色:構建失敗。
Disable灰色:構建已禁用
構建穩定性
構建穩定性用天氣表示:晴、晴轉多云、多云、小雨、雷陣雨。天氣越好表示構建越穩定,反之亦然。
最后借用一張Jenkins的思維導圖供大家參考:

一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址了解詳情。
RDIFramework.NET官方網站:http://www.rdiframework.net/
RDIFramework.NET官方博客:http://blog.rdiframework.net/
特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏!
RDIFramework.NET框架由海南國思軟件科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!
歡迎關注RDIFramework.NET框架官方微信公眾號(微信號:guosisoft),及時了解最新動態。
使用微信掃描二維碼立即關注

作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

浙公網安備 33010602011771號