1. 程式人生 > >使用Jenkins與Docker持續整合與釋出NetCore專案(實操篇)

使用Jenkins與Docker持續整合與釋出NetCore專案(實操篇)

# 使用Jenkins與Docker持續整合與釋出NetCore專案(教程一) 原文地址:[https://www.cnblogs.com/Jackyye/p/12588182.html](https://www.cnblogs.com/Jackyye/p/12588182.html) ## 基本環境 該教程的環境基於 伺服器系統:CentOs 軟體需部署:Docker,Docker Registry(Docker私有庫),JDK,Jenkins(非docker安裝),Gogs(Git私有庫) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200328164307907-656294409.png) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200328164403139-1745606365.png) Jenkins所需外掛: >Gogs plugin >SSH plugin ## 確定思路 首先我們要明確實現持續整合/持續釋出的具體思路。 * 在git倉庫收到推送的時候,觸發webhook,webhook將請求傳送到jenkins伺服器。 * 觸發jenkins流水線/計劃。在jenkins計劃中,git pull 最新的程式碼到特定專案資料夾,用docker build 編譯後,上傳到docker registry。 * 然後使用ssh命令遠端主機,使用docker拉取專案,移除之前的專案,部署最新的專案 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330082816618-1327254141.png) ## 具體實現 ### 一、生成Dockerfile檔案 這個思路是通過docker實現的,所以連結整個流程的關鍵是Dockerfile檔案,在使用visual studio新建專案時,勾選為專案配置docker,即可自動生成Dockerfile。具體dockerfile檔案的編寫可以參考[docker官網](https://docs.docker.com/get-started/part2/):https://docs.docker.com/get-started/part2/ *PS:這裡需要注意一下,自動生成的dockerfile檔案的預設路徑可能會有偏差(這裡需要保證JenkinsTest.csproj 與 它的WORKDIR 能對應上)* ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330083703945-456604589.png) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330084322352-329327386.png) ### 二、jenkins新增一個測試計劃 在jenkins中點選新建任務,給專案命名,這裡命名test,後儲存即可,先不用進行其他配置操作。(確認已經安裝Gogs-Webhook Plugin) 新建完後退出總介面,可以看到我們已經有一個任務計劃了。 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090351336-23742486.png) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090618151-1949397438.png) ### 三、把帶有Dockerfile的專案上傳到Gogs伺服器上 這個git的操作就不展開描述了,相信大家都懂,不懂的可以學習[廖雪峰老師的git教程](https://www.liaoxuefeng.com/wiki/896043488029600) ``` cd projectdir git commit -am XXX git push ``` 上傳完後進入Gogs的倉庫設定,選擇管理web鉤子,新增web鉤子,選擇gogs-webhook **gogs-webhook設定的注意事項:**(圖三) 1. 根據[Gogs-Webhook Plugin官網](https://plugins.jenkins.io/gogs-webhook/)裡描述,預設的Gogs推送地址形式如下,伺服器地址+埠號+/gogs-webhook/?job=+任務名(這裡是test) ``` http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >> ``` 2. 設定自己的金鑰文字,也就是這個推送的密碼,如:123456什麼的,這個稍後在jenkins要用到 完成以上步奏後,就可以實現任務推送後觸發jenkins任務了,接下來就開始配置jenkins ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330085739307-1799206354.png) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330085642241-633051491.png) ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090949153-1809510595.png) ### 四、配置jenkins ### 配置SSH遠端憑證 因為我們的思路里有要遠端其他伺服器的步奏,所以我們先要給jenkins新增一個連結憑證 1. 進入jenkins首頁,點選憑據,展開後點擊系統,在全域性憑據右側有個小倒三角,點選新增憑據,如下圖 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100206839-932512944.png) 2. 我們遠端登入只需要使用者名稱和密碼就行,所以型別選擇username with password,在使用者名稱和密碼裡輸入你要登入的伺服器名和密碼,id不用填,描述可以描述你的伺服器名 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100646664-2067543802.png) 3. 進入到jenkins設定裡的系統設定,找到SSH remote hosts選項,點選新增,依次輸入你的伺服器名,埠號22,選擇剛剛新增的憑證 **點選test connect 如出現success 就連線成功,這個很重要!!!** ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102633807-873401791.png) ### jenkins任務配置 1.進入專案,點選配置 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100921314-2103445108.png) 2.在我們第三步設定的gogs密碼,現在該用上了,在gogs webhook的設定中,把Use Gogs secret勾上,然後把密碼輸進去,為了防止惡意觸發專案構建 ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102123682-1037988748.png) 3.在構建觸發器中選擇,when a change is pushed to gogs ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102306173-1337526552.png) 4.新增一個本地構建命令,實現的流程是:git pull(git拉取) -> docker build(docker根據dockerfile構建) -> docker tag(修改為指定的docker私有庫) -> docker push(上傳到私有庫) ``` //由於我的私有庫不是https的,所以在執行docker命令前先信任私有庫 vi /etc/docker/daemon.json { "insecure-registries":["[Registry IP]:5000"] } ``` ``` //進入專案目錄 cd ./jenkins //拉取專案 git pull //用dockerfile構建專案 docker build --tag jenkinstest:${BUILD_NUMBER} . --network=host //這裡是利用了jenkins引數${BUILD_NUMBER}來標識版本,也可以用BUILD_ID //指定image上傳伺服器 docker tag jenkinstest:${BUILD_NUMBER} localhost:5000/jenkinstest:${BUILD_NUMBER} //localhost:5000,我把docker registry部署在同一個伺服器所以這裡是localhost //推送image到registry docker push localhost:5000/jenkinstest:${BUILD_NUMBER} ``` ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330110757762-1516750756.png) 5.新增一個遠端命令,選擇你剛剛新增的ssh連結,實現的流程是:docker pull -> docker rm -> doceker run,請確保你遠端的伺服器信任了私有庫"insecure-registries":["[Registry IP]:5000"] (參考上個步奏) ``` //更新image docker pull [Registry IP]:5000/jenkinstest:${BUILD_NUMBER} //通過名字移除容器 docker container rm jk --force //-p --name 以特定名後臺執行容器 docker run --publish 8000:80 --detach --name jk [Registry IP]:5000/jenkinstest:${BUILD_NUMBER} ``` ![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330111729799-829820067.png) ## 至此,只要把你的程式碼推送到git上,就能自動構建和部署你的項