天天看點

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

使用Jenkins與Docker持續內建與釋出NetCore項目(教程一)

原文位址:https://www.cnblogs.com/Jackyye/p/12588182.html

基本環境

該教程的環境基于

伺服器系統:CentOs

軟體需部署:Docker,Docker Registry(Docker私有庫),JDK,Jenkins(非docker安裝),Gogs(Git私有庫)

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

Jenkins所需插件:

Gogs plugin

SSH plugin

确定思路

首先我們要明确實作持續內建/持續釋出的具體思路。

  • 在git倉庫收到推送的時候,觸發webhook,webhook将請求發送到jenkins伺服器。
  • 觸發jenkins流水線/計劃。在jenkins計劃中,git pull 最新的代碼到特定項目檔案夾,用docker build 編譯後,上傳到docker registry。
  • 然後使用ssh指令遠端主機,使用docker拉取項目,移除之前的項目,部署最新的項目
    使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

具體實作

一、生成Dockerfile檔案

這個思路是通過docker實作的,是以連結整個流程的關鍵是Dockerfile檔案,在使用visual studio建立項目時,勾選為項目配置docker,即可自動生成Dockerfile。具體dockerfile檔案的編寫可以參考docker官網:https://docs.docker.com/get-started/part2/

PS:這裡需要注意一下,自動生成的dockerfile檔案的預設路徑可能會有偏差(這裡需要保證JenkinsTest.csproj 與 它的WORKDIR 能對應上)

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

二、jenkins添加一個測試計劃

在jenkins中點選建立任務,給項目命名,這裡命名test,後儲存即可,先不用進行其他配置操作。(确認已經安裝Gogs-Webhook Plugin)

建立完後退出總界面,可以看到我們已經有一個任務計劃了。

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

三、把帶有Dockerfile的項目上傳到Gogs伺服器上

這個git的操作就不展開描述了,相信大家都懂,不懂的可以學習廖雪峰老師的git教程

cd projectdir
git commit -am XXX
git push
           

上傳完後進入Gogs的倉庫設定,選擇管理web鈎子,添加web鈎子,選擇gogs-webhook

gogs-webhook設定的注意事項:(圖三)

  1. 根據Gogs-Webhook Plugin官網裡描述,預設的Gogs推送位址形式如下,伺服器位址+端口号+/gogs-webhook/?job=+任務名(這裡是test)
http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>
           
  1. 設定自己的密鑰文本,也就是這個推送的密碼,如:123456什麼的,這個稍後在jenkins要用到

完成以上步奏後,就可以實作任務推送後觸發jenkins任務了,接下來就開始配置jenkins

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

四、配置jenkins

配置SSH遠端憑證

因為我們的思路裡有要遠端其他伺服器的步奏,是以我們先要給jenkins添加一個連結憑證

  1. 進入jenkins首頁,點選憑據,展開後點選系統,在全局憑據右側有個小倒三角,點選添加憑據,如下圖
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

2. 我們遠端登入隻需要使用者名和密碼就行,是以類型選擇username with password,在使用者名和密碼裡輸入你要登入的伺服器名和密碼,id不用填,描述可以描述你的伺服器名

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)
  1. 進入到jenkins設定裡的系統設定,找到SSH remote hosts選項,點選新增,依次輸入你的伺服器名,端口号22,選擇剛剛新增的憑證

    點選test connect 如出現success 就連接配接成功,這個很重要!!!

    使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

jenkins任務配置

1.進入項目,點選配置

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

2.在我們第三步設定的gogs密碼,現在該用上了,在gogs webhook的設定中,把Use Gogs secret勾上,然後把密碼輸進去,為了防止惡意觸發項目建構

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

3.在建構觸發器中選擇,when a change is pushed to gogs

使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

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}
           
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

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} 
           
使用Jenkins與Docker持續內建與釋出NetCore項目(實操篇)

至此,隻要把你的代碼推送到git上,就能自動建構和部署你的項目啦!