.Net Core 使用jenkins 部署到遠程伺服器docker

     最近一直在研究docker和kubernetes,小型的項目其實也用不到k8s,本文就是描述如何用jenkins 進行構建asp.net core 3.1項目並且發布到遠程伺服器docker容器中。本文也是對自己學習過程中的記錄。

     本文包含以下技術點:

     1、CentOS 7 安裝Jenkins與必要的配置

     2、CentOS 7 安裝 Git 與 dotnet core sdk 

     3、Jenkins全局配置與構建任務的配置

    一、CentOS 7 安裝Jenkins與必要的配置

       首先需要安裝java環境,因為Jenkins基於java。java的安裝可參考 https://www.cnblogs.com/stulzq/p/9286878.html 

      可以去Jenkins官網去下載rpm包,但是網速太慢了,這裡推薦用 清華大學開源軟體鏡像站 去下載 Jenkins的rpm包。如下圖:

  這裡下載2.223的最新版本,在centos 中使用: sudo  wget https://mirrors4.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.223-1.1.noarch.rpm 命令進行下載:

 

 然後使用命令:rpm -ivh jenkins-2.223-1.1.noarch.rpm 安裝

配置jenkins 用戶為root,這裡可以避免很多許可權問題,如下圖:

 

 

  使用命令 systemctl restart jenkins 重啟jenkins。然後使用命令:systemctl status jenkins 查看下jenkins是否正常啟動,如下圖:

 

 

 這時,我們就可以通過 http://ip:8080 進行訪問了。具體的初始化配置,這裡就略過,可以自行百度。

 初始化jenkins的過程中,jenkins會讓我們安裝一些 推薦的插件,我們選擇後,有些插件會安裝失敗,是因為軟體源的問題。我們可以選擇跳過,然後進入jenkins。

這裡可以在 系統管理–》插件管理–》高級 選項卡中 的配置中,配置清華軟體鏡像站的地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,替換官方默認的地址,

然後我們再修復插件的安裝。如下圖:

 

 

 

  我們利用jenkins構建完asp.net core 程式後,需要將發布好的文件推送到遠程linux伺服器中,還需要遠程執行腳本,操作遠程伺服器的Docker,這時我們需要安裝插件 Publish Over SSH

  在 系統管理–》插件管理–》可選插件 選項卡中搜索該插件並進行安裝。到這來我們就完成了 CenrOS 安裝jenkins 並進行了一些初始化的配置。

   二、CentOS 7 安裝 Git 與 dotnet core sdk 

   我們需要利用jenkins 調用 git 去下載程式碼,這時我們肯定需要事先安裝git。執行 yum install  -y git 命令進行安裝。

  我們還需要利用jenkins執行 asp.net core 3.1 的Build 與 發布操作,我們也需要事先安裝好 dotnet core 3.1 sdk 具體安裝過程可參考微軟官方文檔:

  https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7

  三、Jenkins全局配置與構建任務的配置

  我們在上面的配置過程中安裝了jenkins 需要用到的 git 以及publish over ssh 插件,在用這兩個之前,我們需要在jenkins中進行一些全局的配置。

  首先我們來看git的配置,在Jenkins 系統管理–》全局工具配置 我們需要輸入git 的安裝位置,如下圖:

 

 我們再來看 publish over ssh 插件的配置,在 系統管理–》系統配置 中,如下圖:

 

 上面的 Remote Directory 需要輸入遠程伺服器的文件夾,該文件夾表示上傳文件的存放目錄

 到這裡,我們就可以開始新建 jenkins的構建任務了,我們可以點擊新建任務,輸入一個名字,選擇自由風格的軟體項目,如下圖:

 

 

 

在源碼管理中,輸入你項目的git 地址以及添加一個對應的git的用戶名和密碼憑據 資訊, 如下圖:

 

在構建環境中,我們勾選以下配置:

 

 

在勾選的 Send files or execute commands over SSH after the build runs 中,SSH Server 就是我們在上一步在全局配置中配置的  publish over ssh  的ssh 名字。

Source files 是我們需要上傳的文件,這裡我們利用 dotnet 命令發布 asp.net core 項目,然後壓縮成 tar.gz 的壓縮文件,所以這裡配置 **/.tar.gz ,**/ 是你當前構建項目jenkins的

工作目錄。

在構建 中,我們選擇 執行 shell ,如下圖:

 

 

cd /var/lib/jenkins/workspace/test/aspnetweb   
dotnet publish -c Release -o published
tar -czvf published.tar.gz published

 命令總共三行,首先進入jenkins的工作目錄,然後在該目錄下,執行dotnet 發布命令,發布到published 文件夾

最後將 published 文件夾 進行壓縮成 published.tar.gz

我們再選擇 構建後操作,選擇 Send build artifacts over ssh,如下圖:

 

 

 

 上圖中的 SSH server 也是我們再全局配置中配置的,Source files 是我們要上傳的文件,Exec command 是要在遠程伺服器執行的 腳本命令:

cd /root/remote/aspnetweb
tar -xvzf published.tar.gz
cd /root/remote/aspnetweb/published
docker stop aspnetweb
docker rm aspnetweb
docker rmi aspnetweb
docker build -t aspnetweb .
docker run -d -p:5001:80 –name aspnetweb aspnetweb

這裡 我們也是進入到 遠程伺服器的 目錄,解壓上傳的文件,然後 進行基本的 docker 容器操作。

在這裡 我們發布的 asp.net core 目錄中有一個 Dockerfile 文件,docker 才能進行 新的鏡像的 build,Dockerfile 的文件內容如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime

WORKDIR /app
COPY . ./
ENTRYPOINT [“dotnet”, “aspnetweb.dll”]

 

 

 這裡需要我們的遠程伺服器,安裝docker,以及事先 docker  pull mcr.microsoft.com/dotnet/core/aspnet:3.1 的鏡像。

 

 

 

 

——–

參考文章:https://www.cnblogs.com/stulzq/p/9291237.html