jenkins 構建dotnet core 部署到docker
1.azure centos 8 docker環境,整個操作在root賬號下進行
2.安裝jenkins
進入jenkis官網的安裝指導安裝jenkins jenkins安裝成功後檢視程序
3.使jenkins賬戶可以訪問docker.sock
因為要在jenkins中指定docker命令要用到docker.sock進行通訊。
檢視docker.sock所屬組
可以看到檔案屬於farvison組
執行gpasswd -a jenkins farvison //把jenkins使用者加入到farvison組
這行 newgrp farvison //更新farvison組
4.建立aspnnetweb專案,並勾選docker支援
這是後會生成dockerfile檔案,但是這個目錄結構和構建時候有出入。所以要把dockerfile拷貝到程式碼的根目錄(sln檔案所在目錄)
本地硬碟的結構如圖:
5.把整個程式碼上傳到gitea
gitea的安裝請參考gitea文件,push以後的程式碼結構如圖
6.在jenkins中建立任務
docker命令的寫法很重要。
#!/bin/bash
docker stop aspnetweb
docker rm aspnetweb
docker rmi aspnetweb
docker build -t aspnetweb . --network=host
docker run -d -p:5000:80 --name aspnetweb aspnetweb
首先docker命令預設的工作目錄為當前jenkins的project(job)的目錄
dockerfile正是在這個目錄下,這樣docker build -t aspnetweb . --network=host才會生成映象。
dockerfile之所以要放在根目錄是因為dockerfile的檔案內容有關係
這樣.csproj檔案才會和硬碟目錄對應起來。我試過更改dockerfile檔案內容把
COPY ["WebApplication5/WebApplication5.csproj", "WebApplication5/"]
改成
COPY ["WebApplication5.csproj", "WebApplication5/"]
同時把dockerfile檔案放到根目錄下的WebApplication5下面如圖
但沒有構建成功,對生成的dockerfile還不是很熟悉。
7.執行任務構建
檢視容器和映象
9.瀏覽器訪問網站
1.要開啟firewall防火牆
$ sudo firewall-cmd --zone=public --add-port=5000/tcp
2.azure的“”網路“”選單中增加5000埠的入站規則
因為swagger需要專案的xml檔案,但是在dockerfile中沒有複製到映象中,所以會報錯而不能訪問網站
解決方法是在dockerfile中增加一行指令:
把application.xml從WebApplication5/目錄拷貝到/app目錄下,再重新執行構建任務,就可以正常訪問。
到此.net core的整個構建告一段落。