本地Docker Jenkins構建dotnet core web應用到Linux伺服器 Docker上
1、準備工作
環境
- 本地:
Windows
、Docker
- 程式碼倉庫:
Git
- 伺服器:
Linux
、Docker
前提準備
建立個有
dockerfile
檔案的dotnet core 3 web
專案
新建一個dotnet 3.0的web專案,在專案資料夾新增Dockerfile檔案,內容如下:FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 80 COPY . . ENTRYPOINT ["dotnet", "WebApplication.dll"]
- 準備git倉庫,將專案的程式碼上傳上去
構建有
dotnet core 3.0 環境
的jenkins
FROM jenkins/jenkins:lts # 切換root使用者安裝東西 USER root # Show distro information! RUN uname -a && cat /etc/*release RUN apt-get update RUN apt-get install -y curl libunwind8 gettext apt-transport-https RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list' RUN apt-get update RUN apt-get install -y dotnet-sdk-3.1 # 切換回來jenkins使用者 USER jenkins
因為jenkins裡面是沒有dotnetcore環境的,所以需要本地建立個支援dotnetcore環境的。
找個地方新建資料夾,建立dockerfile檔案,內容如上。
build映象並執行容器
docker build . -t jenkins_dotnet
這裡等待時間會比較長~
# 執行剛剛構建好的容器 docker run -d --name jenkins -p 8080:8080 jenkins_dotnet
開啟jenkins,安裝推薦外掛
開啟 localhost:8080 ,可以看到
docker exec -it jenkins bash dotnet --version cat /var/jenkins_home/secrets/initialAdminPassword
把密碼複製出來登入,點選
左邊按鈕
安裝推薦外掛
這裡時間也會比較長,如果有部分安裝失敗了,等剩餘的安裝完後點擊重試即可,如果伺服器上還沒有docker,現在可以去裝下,裝了的也可以連上伺服器,去執行
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
拉取下dotnet core 3.1的映象,等會建立映象的時候就會快一點啦外掛安裝完後,會有一些建立管理員和地址配置,搞一下吧。
如果有外掛安裝失敗,點過重試安裝外掛的,現在需要
docker restart jenkins
重啟下應用,然後重新開啟localhost:8080使用建立的管理員登入。
2、搞好了,開始幹活
哦,還有些需要安裝的外掛 =.=||
需要安裝的外掛:
- SCP publisher
- Publish Over SSH
- Environment Injector
進入 系統管理>外掛管理->可選外掛->輸入外掛名稱->勾選需要外掛->點選安裝
安裝完後,設定下這些外掛,進入系統管理->系統配置,
SCP publisher
設定
Ctrl + F 搜下SCP
找到SCP repository hosts
-SCP sites
設定位置,點新增
HostName: 伺服器IP地址
Port:埠,預設22、
Root Repository Path:檔案存放目錄
User Name:登入使用者名稱
Password/Passphrase:密碼
Publish Over SSH
設定
Ctrl + F 搜下SCP
找到SCP repository hosts
-SSH Server
設定位置,點新增
再點高階
,勾選上Use password authentication, or use a different key
Name:名稱
Hostname:伺服器IP地址
Username:登入使用者名稱
Remote Directory:遠端目錄
Passphrase / Password:密碼
Port:連線埠(預設22)
配置完後別忘記點儲存。
建立構建任務
點選新建任務
, 選擇構建一個自由風格的軟體專案
原始碼管理設定
選擇Git,在Repository URL
填入Git倉庫地址
觸發構建器
可以配置一些定時構建等,我這裡只是測試所以沒有選擇觸發器。
- 構建環境
- 勾選
Delete workspace before build starts
- 勾選Inject environment variables to the build process,存放構建是需要用到的環境變數
- 勾選
構建- 新增執行shell步驟
增加構建步驟-執行shell,指令碼如下:#切換目錄 cd ./WebApplication #還原nuget包 dotnet restore #編譯 dotnet build #刪除之前釋出檔案 cd ./bin rm -rf web-publish rm -f web-publish.tar cd .. #釋出 dotnet publish -o ./bin/web-publish #刪除配置檔案 cd ./bin/web-publish cp ../../Dockerfile . rm -rf config cd .. #壓縮 tar -cvf web-publish.tar web-publish
- 構建後步驟
上傳檔案到伺服器
增加構建後操作步驟
-選擇Publish artifacts to SCP Repository
,填入需要上傳的壓縮檔案
這裡檔案目錄的基礎目錄是workspace,如果不知道具體的地址,可以先不建立構建後步驟儲存下,然後點選立即構建,等待成功後,點選工作空間看下檔案路徑是怎樣的,比如我的是這樣的:
得到壓縮檔案目錄是WebApplication/bin/web-publish.tar
新增 伺服器上要執行的shll命令 步驟
增加構建後操作步驟
- 選擇Send build artifacts over SSH
這裡要新增兩個Transfers Set,在第一個
Transfers
的Exec command
輸入建立映象指令碼:# 工作目錄 WORK_DIR="/root/publish/WebApplication"; cd ${WORK_DIR} # 刪除原有釋出資料夾 rm -rf web-publish; # 解壓 tar -xvf web-publish.tar; #刪除檔案壓縮包 rm -f web-publish.tar; #切換生成目錄 cd web-publish/ #備份映象 #停止容器 docker stop ${DOCKER_CONTAINER_NAME}; #刪除容器 docker rm ${DOCKER_CONTAINER_NAME}; #刪除映象 docker rmi $(docker images | grep ${DOCKER_IMAGE_NAME}); #建立映象 docker build -t ${DOCKER_IMAGE_NAME} ./;
在第二個
Transfers
的Exec command
,輸入執行容器命令:# 執行容器 docker run -d -p 8001:80 --name ${DOCKER_CONTAINER_NAME} ${DOCKER_IMAGE_NAME}
到這裡所有的設定都已經搞好啦,
別忘記點選儲存
,點選立即構建
測試一下吧~