Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

bingguang1993發表於2018-03-15

一、導語

Jenkins 是一個可擴充套件的持續整合引擎。接下來,我將通過兩篇文章來全面介紹jenkins的基本概念,安裝、配置、自動構建、監控、部署,以及在生產環境的高階應用。

方便讀者更好的理解,本文演示案例所使用的原始碼和指令碼,均提供git下載地址。

https://github.com/wzjgn/xinwei-example.git

原始碼基於spring boot框架,maven管理,wrapper啟動。

二、Jenkins 介紹

主要用途:

1、持續、自動地構建/測試軟體專案。

2、監控一些定時執行的任務。

Jenkins特性:

1、易於安裝-本文提供四種配置方式。

2、易於配置-所有配置都是通過其提供的web介面實現。

3、整合RSS/E-mail通過RSS釋出構建結果或當構建完成時通過e-mail通知。

4、生成JUnit/TestNG測試報告。

5、分散式構建支援Jenkins能夠讓多臺計算機一起構建/測試。

6、檔案識別:Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。

7、外掛支援:支援擴充套件外掛,你可以開發適合自己團隊使用的工具。

8、Jenkins一切配置都可以在web介面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的專案就都能用。當然也可以通過修改XML進行配置。

9、支援Maven的模組(Module),Jenkins對Maven做了優化,因此它能自動識別Module,每個Module可以配置成一個job。相當靈活。

10、測試報告聚合,所有模組的測試報告都被聚合在一起,結果一目瞭然,使用其他CI,這幾乎是件不可能完成的任務。

11、構件指紋(artifact fingerprint),每次build的結果構件都被很好的自動管理,無需任何配置就可以方便的瀏覽下載。

三、基礎環境準備

本文對Jenkins的講解,基於 jdk1.8,maven,git,ssh 做自動構建、部署等功能演示。

3.1、JDK安裝:

下載linux jdk-8u11-linux-x64.tar.gz

到甲骨文官網或國內映象下載JDK(www.oracle.com)

解壓:

tar vxf jdk-8u11-linux-x64.tar.gz

配置環境變數:

#set Maven environment vi /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_11

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

環境變數立即生效

source /etc/profile

3.2、maven安裝:

下載maven

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

解壓

tar xzvf apache-maven-3.5.2-bin.tar.gz

mv apache-maven-3.5.2 /usr/local/maven3 

配置環境變數

#set Maven environment vi /etc/profile

export MAVEN_HOME=/usr/local/maven3

export PATH=${MAVEN_HOME}/bin:${PATH}

環境變數立即生效

source /etc/profile

驗證maven是否配置成功

mvn -v

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

3.3、git 安裝:

yum -y install git

用git --version命令檢查是否已經安裝Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

3.4、 從git伺服器下載原始碼 ssh免密配置:

jenkins 構建程式碼時,動態從git原始碼伺服器pull原始碼,免密配置 ssh。

第一步 :生成key

$ ssh-keygen -t rsa -C "you email@email.com" 或者去掉 -t rsa

接下來會提示你輸入一個檔名來儲存你的SSH key ,如果不輸入直接回車,則會儲存在預設的檔案裡id_rsa.pub

然後會提示你輸入passphrases 連續輸入兩次,這在你在網頁中新增SSH key的時候會讓你輸入一次。

以上提示輸入的地方可以為空,敲回車就好。

ssh key預設存放地址:/root/.ssh/

id_rsa.pub:公鑰(用於遠端伺服器)

id_rsa:私鑰

第二步:將公鑰(id_rsa.pub 中的內容)新增的git原始碼伺服器

將公鑰檔案 id_rsa.pub 中的內容拷貝到git原始碼伺服器。以阿里云為例。

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

驗證:

在存放私鑰的伺服器終端執行如下命令:

ssh -T git@code.aliyun.com

返回 Welcome to GIT, 使用者名稱! 成功

第三步:將私鑰新增到jenkins

建立專案時新增

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

由於我們在生產key時,預設回車,沒有輸入密碼,所以此處Passphrase為空。

四、Jenkins安裝

以下四種方法任選一種,我本人使用第一種方式。

1、 線上安裝

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo

sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key## 公鑰

sudo yum install jenkins -y

2、 離線安裝

## http://pkg.jenkins-ci.org/redhat/

wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下載(也可以Windows下載再轉過來)

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key ## 公鑰

sudo yum -y install jenkins-*.noarch.rpm

3、基於 Tomcat 安裝

  • 安裝並啟動 Tomcat;

  • 從官網下載 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 會自動部署;

  • 瀏覽器訪問:http://centos:8080/jenkins/

4、免安裝方式

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

sudo java -jar jenkens.war ## 啟動服務,直至看到日誌 `Jenkins is fully up and running`

curl http://localhost:8080/ ## Jenkins 已就緒

配置

## sudo vi /etc/sysconfig/jenkins

JENKINS_USER="root" ## 原值 "jenkins" 必須修改,否則許可權不足

JENKINS_PORT="8080" ## 原值 "8080" 可以不修改

## 還有開啟 HTTPS 相關引數,此處不打算開啟,故不作說明

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝目錄: /usr/lib/jenkins

Jenkins工作目錄: /var/lib/jenkins(對應於環境變數 JENKINS_HOME)

構建專案原始碼目錄:/var/lib/jenkins/workspace

日誌預設路徑:/var/log/jenkins/jenkins.log

啟動

sudo systemctl enable jenkins

sudo systemctl restart jenkins

service jenkins start

五、Jenkins配置

基本配置

5.1、登入

登入地址:http://localhost:8080/

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

初始密碼獲取:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

5.2、密碼修改

登入主頁-使用者-選擇使用者(admin)-設定-輸入新密碼

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

5.3、Jenkins外掛安裝

Jenkins 外掛管理器允許您安裝新的外掛,和更新您Jenkins伺服器上的外掛。管理者將連線到聯機資料庫,檢索可用的和已更新的外掛。如果您的Jenkins伺服器 無法直接連線到外部資源,您可以從Jenkins網站上下載。

在已執行的Jenkins主頁中,點選左側的系統管理—>管理外掛進入如下介面:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

安裝外掛:Git plugin,ssh plugin

5.4、JDK、Maven、Git配置

jenkins 構建,依賴JDK、Maven、Git 外掛,因此專案構建前需要對外掛做配置,配置流程如下:

進入 系統管理-全域性工具配置:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Maven別名:使用者自定義,便於標識就可以。

MAVEN_HOME:這個是本機MAVEN的安裝路徑。見上文第二部分 MAVEN安裝。(錯誤的路徑會有紅字提示你的)

自動安裝:不推薦這個選項

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

上文第二部分git安裝完畢後,此處預設配置完畢

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

JDK別名:使用者自定義,便於標識就可以。

JDK_HOME:這個是本機JDK的安裝路徑。見上文第二部分 JDK安裝。(錯誤的路徑會有紅字提示你的)

自動安裝:不推薦這個選項

六、原始碼構建、打包、部署、執行

(基於springboot,maven,git,ssh)

6.1、 新建專案

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

原始碼管理:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Repository URL:

git@github.com:wzjgn/xinwei-example.git

https://github.com/wzjgn/xinwei-example.git

如果Repository URL 地址有誤,此處會報錯,如:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Add ,新增原始碼訪問憑證。

本案例通過ssh key 訪問git原始碼伺服器。因此,在此處新增ssh私鑰(ssh公鑰已經部署到github)

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

(新增ssh私鑰)

本文生成ssh key時,提示輸入密碼時預設回車,因此此處passphrase ,id.填空。

構建觸發器

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

選擇“Build whenever a SNAPSHOT dependency is built” :依賴於快照的構建,當git有修改時就構建專案。

Build periodically :此選項僅僅通知Jenkins按指定的頻率對專案進行構建,而不管SCM是否有變化。如果想在這個Job中執行一些測試用例的話,它就很有幫助。

Poll SCM :這是CI 系統中常見的選項。當您選擇此選項,您可以指定一個定時作業表示式來定義Jenkins每隔多久檢查一下您原始碼倉庫的變化。如果發現變化,就執行一次構建。例如,表示式中填寫0,15,30,45 * * * *將使Jenkins每隔15分鐘就檢查一次您原始碼倉庫的變化。

構建:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

預設Jenkins在workspace目錄下面找到pom.xml檔案。

如下圖專案目錄結構,此處配置執行的是 pom.xml 3,即構建1,2兩個pom.xml對應的專案。

如果要構建 pom.xml 1 則此處 Root POM : xinwei-wrapper-example/pom.xml.

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Post Steps

配置構建成功後的動作,新增shell。該案例原始碼是基於springboot架構,wrapper啟動。

相關背景知識請檢視上一篇文章《輕量級微服務啟動wrapper推薦(springboot版,附github原始碼)》

指令碼作用:

1、關閉原應用程式程式

2、解壓新生成的tar包

3、wrapper啟動重構後的應用

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

指令碼

https://github.com/wzjgn/xinwei-example.git

xinwei-example/script/Post Steps(local)

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

(本例主要是jenkins的基本應用,故,此處指令碼的意義是在本機做專案部署,啟動。實際應用中,Jenkins通常都是應用在分散式系統,同時分發部署多臺伺服器。下篇Jenkins進階文章將對遠端部署、管理做詳細講解,儘可能接近生產環境)

郵件通知設定

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

在Recipients中輸入收件人郵件地址,如果用多個收件人用“,”英文逗號隔開。

6.2、構建

手動觸發專案構建流程:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

在上面展示的截圖中,您將注意到有兩個圖示描述當前作業的狀態。S欄目代表著“最新構建狀態”,W欄目代表著“構建穩定性”。Jenkins使用這兩個概念來介紹一個作業的總體狀況:

構建狀態:下圖中分級符號概述了一個Job新近一次構建會產生的四種可能的狀態:

Successful:完成構建,且被認為是穩定的。

Unstable:完成構建,但被認為不穩定。

Failed:構建失敗。

Disabled:構建已禁用。

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

構建狀態介面

構建穩定性: 當一個Job中構建已完成並生成了一個未釋出的目標構件,如果您準備評估此次構建的穩定性,Jenkins會基於一些後處理器任務為構建釋出一個穩健指數 (從0-100 ),這些任務一般以外掛的方式實現。它們可能包括單元測試(JUnit)、覆蓋率(Cobertura )和靜態程式碼分析(FindBugs)。分數越高,表明構建越穩定。下圖中分級符號概述了穩定性的評分範圍。任何構建作業的狀態(總分100)低於80分就是不穩定的。

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

雙擊上圖 專案名稱,進入該專案的控制檯,如下圖:

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

在控制檯點選“立即構建”,BuildHistory 列表第一條記錄展示專案當前的構建進度條。點選 “專案構建進度條”,進入監控頁面。檢視構建過程,日誌。

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

6.3、構建完畢,訪問地址

http://localhost/

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

七、常見問題彙總

Jenkins預設會在Build結束後Kill掉所有的衍生程式,導致後臺無法執行應用程式。

在Post Steps ->Execute Shell 中配置的應用程式啟動指令碼啟動後,當Build結束,程式會被Jenkins殺掉。為了在退出Build時繼續執行程式,需要進行以下配置,才能避免此類情況發生。

7.1 方式一

a、重設環境變數build_id

在execute shell輸入框中加入BUILD_ID=DONTKILLME,即可防止jenkins殺死啟動的應用程式程式

b、在啟動jenkins 的時候禁止jenkins殺死衍生程式

修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重啟jenkins生效。此方法配置一次後,所有的job都無需設定BUILD_ID,就能夠防止jenkins殺死啟動的應用程式程式。

7.2、方式二

新增 Post build task外掛,在 Post build task 處執行指令碼。

每當檢測到專案編譯資訊中包含log text中的文字即執行script中的shell指令碼。此處執行指令碼啟動的程式,jenkins不會自動kill。

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!

八、後記

本文主要講解Jenkins的基本應用,後續我會分享一篇Jenkins進階。Jenkins進階主要介紹常用外掛的使用,更接近於生產環境的應用如,多伺服器遠端部署。

感謝閱讀,希望繼續關注。

相關文章