1. 程式人生 > >本地Docker Jenkins構建dotnet core web應用到Linux伺服器 Docker上

本地Docker Jenkins構建dotnet core web應用到Linux伺服器 Docker上

1、準備工作

環境

  • 本地: WindowsDocker
  • 程式碼倉庫:Git
  • 伺服器:LinuxDocker

前提準備

  1. 建立個有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"]
  2. 準備git倉庫,將專案的程式碼上傳上去
  3. 構建有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檔案,內容如上。

  1. build映象並執行容器

    docker build . -t jenkins_dotnet

    這裡等待時間會比較長~

    # 執行剛剛構建好的容器
    docker run -d  --name jenkins -p 8080:8080 jenkins_dotnet
  2. 開啟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

進入 系統管理>外掛管理->可選外掛->輸入外掛名稱->勾選需要外掛->點選安裝

安裝完後,設定下這些外掛,進入系統管理->系統配置,

  1. SCP publisher設定
    Ctrl + F 搜下 SCP找到SCP repository hosts-SCP sites設定位置,點新增
    HostName: 伺服器IP地址
    Port:埠,預設22、
    Root Repository Path:檔案存放目錄
    User Name:登入使用者名稱
    Password/Passphrase:密碼

  2. 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)

配置完後別忘記點儲存。

建立構建任務

點選新建任務, 選擇構建一個自由風格的軟體專案

  1. 原始碼管理設定
    選擇Git,在Repository URL填入Git倉庫地址

  2. 觸發構建器
    可以配置一些定時構建等,我這裡只是測試所以沒有選擇觸發器。

  3. 構建環境
    1. 勾選Delete workspace before build starts
    2. 勾選Inject environment variables to the build process,存放構建是需要用到的環境變數
  4. 構建- 新增執行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 
  5. 構建後步驟
    1. 上傳檔案到伺服器
      增加構建後操作步驟-選擇Publish artifacts to SCP Repository ,填入需要上傳的壓縮檔案

      這裡檔案目錄的基礎目錄是workspace,如果不知道具體的地址,可以先不建立構建後步驟儲存下,然後點選立即構建,等待成功後,點選工作空間看下檔案路徑是怎樣的,比如我的是這樣的:

      得到壓縮檔案目錄是WebApplication/bin/web-publish.tar

    2. 新增 伺服器上要執行的shll命令 步驟

    增加構建後操作步驟- 選擇 Send build artifacts over SSH

    這裡要新增兩個Transfers Set,在第一個TransfersExec 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} ./;

    在第二個TransfersExec command,輸入執行容器命令:

    # 執行容器
    docker run -d -p 8001:80 --name  ${DOCKER_CONTAINER_NAME}  ${DOCKER_IMAGE_NAME}

    到這裡所有的設定都已經搞好啦,別忘記點選儲存,點選立即構建 測試一下吧~

成果展示