在引入自動化部署工具的時候,對比了jenkins和gitlab CI,jenkins有非常豐富的插件,配置起來方便。gitlab CI更傾向於腳本配置,當然jenkins也可以使用pipeline實現全腳本化配置。我們這里主要講述jenkins的自動化部署。基本組合是jenkins+git+msbuild,實現從代碼倉庫拉取、編譯、打包、部署、自動化測試。(.net core和framework4.6.1可以不依賴msbuild構建)
一、Jenkins概述
1、CI/CD是什么
CI(Continuous integration)是持續集成。持續集成強調開發人員提交了新代碼之后,立刻進行構建、測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。借用網絡圖片對CI加以理解。

CD(Continuous Delivery, 中文意思持續交付)是在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境(類生產環境)中。比如,我們完成單元測試后,可以把代碼部署到連接數據庫的Staging環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。下圖反應的是CI/CD 的大概工作模式。

2、Jenkins特點:
-
開源免費;
-
跨平台,支持所有的平台;
-
master/slave支持分布式的build;
-
web形式的可視化的管理頁面;
-
安裝配置超級簡單;
-
tips及時快速的幫助;
-
已有的200多個插件
3、Jenkins的一個工作流程
互聯網軟件的開發和發布,已經形成了一套標准流程,假如把開發工作流程分為以下幾個階段:編碼 → 構建 → 集成 → 測試 → 交付 → 部署
二、Jenkins簡單安裝及配置(Windows環境)
Windows平台下,一般安裝方法有2種:安裝程序exe安裝和war包安裝,本文以war包安裝為例子
1、安裝Java環境
Jenkins是java開發,因此需先安裝對應jdk版本,注意版本兼容,因為我要下載Jenkins2.226版本,所以我們需要下載Java的版本是8到11,否則不兼容。
下載成功后,雙擊安裝包,一直下一步即可,安裝完成之后需要配置環境變量,如下圖:
系統變量->新建,變量名JAVA_HOME,值對應的是JDK的安裝路徑。
選擇名為Path的系統變量,點擊編輯,在變量值末尾加上 %JAVA_HOME%\bin
檢驗是否配置成功:在命令提示符輸入:java -version
2、Jenkins簡單安裝
Jenkins下載地址:https://jenkins.io/download/ ,下載war包,命令行安裝。我這里下載的是Jenkins2.226版本,相應的Java環境需要安裝Java8~java11
下載完成后,進入命令行模式,直接定位到jenkins.war所在的目錄,然后執行下面的命令:
因為jenkins的war包自帶jetty服務器,所以啟動成功后,直接打開瀏覽器操作即可。輸入http://localhost:8080,點擊回車,出現以下畫面:
耐心等幾分鍾,出現如下頁面
第一次使用jenkins時,為了安全考慮,會生成一串字符口令!進入對應的路徑,打開該文件,將對應的字符復制進輸入框內,點擊繼續按鈕,等待安裝成功。我們先不安裝插件,回頭自主安裝,操作如下:
跳過插件安裝后,接下來就是創建一個管理員賬號了,界面如下:
輸入用戶名root,密碼qxh123,點擊保存並完成,jenkins就安裝成功了
3、Jenkins插件安裝
Jenkins配置成服務
Jenkins安裝成功后,可已經將它設置成Windows服務,不用每次通過命令提示符輸入命令啟動了。設置成服務的方法如下:
按照提示就可以配置成功了,在Windows服務列表中就可以找到jenkins了
插件下載提速
下載插件太慢了,默認插件下載是從jenkins官網的地址下載,太慢了。將地址替換為以下地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
進入jenkins系統管理,進入插件管理,點擊高級,修改升級站點的地址
然后重啟jenkins服務。然后發現還是慢,該下載失敗的還是失敗。查看錯誤信息,發現下載地址仍然是官網地址。所以直接打開jenkins所在目錄:
首先找到default.json文件,一般在Jenkins服務update目錄下,替換內容:
替換 updates.jenkins.io/download 為 mirrors.tuna.tsinghua.edu.cn/jenkins
替換 www.google.com 為 www.baidu.com
然后找到Jenkins/hudson.model.UpdateCenter.xml文件
替換 url 為 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
通過以上方法,我這邊就可以了,很快,看下效果:
如果還不行,就離線下載jenkins插件http://updates.jenkins-ci.org/download/plugins/,然后采用上傳的方式。
Git插件安裝
代碼基本都是使用Git管理的,所以下載Git插件。進入“系統管理”->“插件管理”,安裝git插件。
Msbuild安裝
其實我們可以在jenkins中下載msbuild插件的,但是考慮到不兼容性問題(比如,我們下載的msbuild版本不支持C#8.0語法,我們源代碼就沒辦法構建了,編譯經常出錯)。所以最徹底的方法就是安裝VS,然后在“系統管理”->“全局工具配置”中配置VS工具中的msbuild路徑。
jenkins漢化
折騰到現在,突然感覺英文版的還是有點不方便的,雖然能看懂大部分,但是有些細節的地方真沒心思去看。
安裝插件Localization:Chinese,然后重啟jenkins服務即可。效果如下:(哈哈,中英文參半,可以了)
4、jenkins插件配置
進入插件管理-全局工具配置,如下git已經配置好了,就是我們下載的git插件
然后配置MSbuild,我們這里使用VS2019上的MSbuild,避免代碼和msbuild的版本不兼容。一般msbuild.exe存在於目錄C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin中,配置結果如下:
三、使用Jenkins進行代碼測試、打包(未完待續)
如下圖所示,操作如下:
下圖是構建任務設置界面,可以看到上方的幾個選項"General", "源碼管理", "構建觸發器", "構建", "構建后操作"。下面逐一介紹。
General
General是構建任務的一些基本配置。-
Discard old builds: 設置構建歷史的保存策略
- log Rotation:日志循環
- 保持構建的天數:意思就是根據你所填寫的天數來保存構建記錄
- 保持構建的最大個數:意思就是有幾條構建記錄就保存幾條
- 發布包保留天數:例如我們發布的war包等的保存天數
- 發布包最大保留#個構建 :例如我們發布了幾個war包,就保存幾靜默期:設置一個時間來間隔每次構建的間隔
- 重試次數:這個和系統設置的一樣,拉取源碼重試的次數
- 該項目的上游項目正在構建時阻止該項目構建:用於上游項目有關聯的構建策略
-
該項目的下游項目正在構建時阻止該項目構建:用於下游項目有關聯的構建策略
-
使用自定義的工作空間:使該項目獨立於系統的工作空間
源碼管理
源碼管理就是配置你代碼的存放位置。

Repository URL:倉庫地址,和平時使用git下載倉庫差不多的配置,我使用的是HTTPS的方式
Credentials:憑證。可以使用HTTPS方式的用戶名密碼,也可以是RSA文件。 但要通過后面的"ADD"按鈕添加憑證。
Branches to build:構建的分支。*/master表示master分支,也可以設置為其他分支。
源碼瀏覽器:你所使用的代碼倉庫管理工具,如github, gitlab.
構建觸發器
就是構建任務的觸發器。

觸發遠程構建(例如,使用腳本): 該選項會提供一個接口,可以用來在代碼層面觸發構建
Build after other projects are built: 該選項意思是"在其他projects構建后構建"。
Build periodically: 周期性的構建。很好理解,就是每隔一段時間進行構建。如下圖的設置,表示每隔30分鍾進行一次構建
Poll SCM:該選項是配合上面這個選項使用的。當代碼倉庫發生改動,jenkins並不知道。需要配置這個選項,周期性的去檢查代碼倉庫是否發生改動。 如下圖,十分鍾檢查一次

構建環境
構建環境就是構建之前的一些准備工作,如指定構建工具(在這里我使用MSBuild)。
