Linux下搭建Jenkins持續整合

localhost02發表於2018-12-22

環境:centos7

安裝準備

  1. Maven(也可留在Jenkins安裝完成後,配置maven時選擇自動安裝)
  2. SVN(或Git)
  3. OpenJDK(不是JDK。也同樣可以留在安裝完成後,配置JDK時選擇自動安裝)
  4. Tomcat(Jenkins也自帶有Jetty伺服器,可使用“service jenkins start”來開啟安裝後的Jenkins服務,如需使用Tomcat則需要將安裝目錄 /usr/lib/jenkins/下的war包放於Tomcat的webapps目錄下)

安裝Jenkins

  1. 建立Jenkins的yum原始檔
vi /etc/yum.repos.d/jenkins.repo
複製程式碼
  1. 在 Jenkins.repo中加入以下內容:
[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins-ci.org/redhat
gpgcheck=1
複製程式碼
  1. rpm增加Jenkins源的key
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
複製程式碼
  1. 安裝 jenkins
sudo yum install jenkins
複製程式碼

Jenkins相關目錄和配置

安裝完成後,有如下相關目錄:

/usr/lib/jenkins/:jenkins安裝目錄,WAR包會放在這裡。 /etc/sysconfig/jenkins:jenkins 配置檔案,埠、JENKINS_HOME等都在這裡配置。

配置如下:

JENKINS_HOME="/usr/lib/jenkins"
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" 
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"
JENKINS_AJP_PORT="8009"
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
複製程式碼

啟動Jenkins

A:如果是使用自帶的Jetty伺服器,啟動可以使用命令:sudo service jenkins start。

B:如果是部署在Tomcat伺服器上,直接啟動Tomcat即可。

初始化Jenkins

  1. 開啟頁面http://[ip]:[port]/jenkins。
  2. 初始啟動需要密碼,密碼檔案位於/var/lib/jenkins/secrets/initialAdminPassword, 複製填入,點選Continue。
  3. Customize Jenkins選擇Install suggested plugins即可。
  4. 建立使用者。

配置Jenkins

步驟1

配置前先安裝Publish Over SSH外掛,用於支援遠端shell。

安裝方法: 首頁->系統管理->管理外掛->可選外掛->過濾(搜尋外掛名)->勾選->點選直接安裝即可(需要等待一段時間,詳情可以檢視控制檯輸出日誌(圓球形狀)變化)。

步驟2

配置系統設定,Jenkins的所有全域性配置都在系統管理->系統設定中,這裡面配置的全域性屬性如郵件系統、Maven專案設定、Post Steps等都可以在新建的專案屬性中得到援引。具體配置如下:

  1. 主目錄->高階,可以配置工作空間目錄和構建日誌目錄。每個專案(ITEM)預設存在於${JENKINS_HOME}/workspace/${ITEM_FULLNAME}下。

這裡說到了工作空間,大致就說說Jenkins運作流程,首先它會繫結版本控制伺服器,如svn。每當有svn版本倉庫有變更時(觸發器),Jenkins會檢查到並馬上將版本倉庫指定目錄下的檔案(Source files,一般是svn倉庫中的一個專案)載入到工作空間,之後會根據指定專案路徑的pom.xml(Build)構建專案,然後會使用Publish Over SSH外掛(需配置)將構建的專案(如war)傳送到指定目標伺服器的指定路徑(Remote directory)下,並且執行目標伺服器的shell指令碼(該指令碼主要完成war包移動至webapps下,並重啟tomcat)。

  1. Maven專案配置,在全域性MAVEN_OPTS中新增“-Dmaven.repo.local=“你的maven本地倉庫路徑”來使maven強制使用該路徑作為自身的本地倉庫。

  2. Jenkins Location配置,Jenkins Location為Jenkins訪問地址,系統管理員郵件地址應和郵件伺服器配置的發件人郵件地址保持一致。

  3. Subversion配置,選擇安裝的svn版本和版本庫地址。

  4. Extended E-mail Notification,使用者自定義郵件通知,下面以QQ郵箱為例:

複製程式碼

SMTP server:smtp.qq.com(SMTP伺服器IP) Default user E-mail suffix:@qq.com(預設郵件字尾) 高階->勾選 Use SMTP Authentication(身份認證) User Name :xxxxxxxxxxxx@qq.com(和上面配置的系統管理員郵件地址一致) Password:••••••••••••••••(QQ郵件設定中需開啟smtp服務,並且會生成一串授權碼,此處填入授權碼) 勾選 Use SSL SMTP port:465 Charset:UTF-8 Default Content Type:HTML(text/html)

///////////////////////////////【內容模板參考】////////////////////////////////

(本郵件是程式自動下發的,請勿回覆,請相關人員fix it,重新提交到svn構建)


    專案名稱:$PROJECT_NAME<br/><hr/>

    構建編號:$BUILD_NUMBER<br/><hr/>

    SVN版本號:${SVN_REVISION}<br/><hr/>

    構建狀態:$BUILD_STATUS<br/><hr/>

    觸發原因:${CAUSE}<br/><hr/>

    構建日誌地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

    構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

    變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
複製程式碼

6. 郵件通知配置如下:
```ruby
SMTP伺服器:smtp.qq.com
使用者預設郵件字尾:@qq.com
高階->勾選 使用SMTP認證
使用者名稱:xxxxxxxxxx@qq.com
密碼:••••••••••••••••(同上)
勾選 使用SSL協議
SMTP埠:465
Reply-To Address:xxxxxxxxxxxx@qq.com(收件郵箱)
字符集:UTF-8
複製程式碼
  1. Publish over SSH配置如下:
Jenkins SSH Key
Passphrase:••••••••••••••••
Path to key 
Key 
Disable exec
Uame:SSH_Test
Username:root
Remote Directory:/data/Jenkins_War/(目標伺服器war包接收路徑)
勾選 Use password authentication, or use a different key
Passphrase / Password:••••••••••••••••
Path to key
Key
Passphrase:••••••••••••••••
Path to key 
Key 
Disable exec
Name:SSH_Test
Username:root
Remote Directory:/data/Jenkins_War/(目標伺服器war包接收路徑)
勾選 Use password authentication, or use a different key
Passphrase / Password:••••••••••••••••
Path to key
Key
以上配置的Passphrase為目標伺服器root使用者的登入密碼,這裡直接使用的是登入密碼。如需使用SSH祕鑰,可在在Path to key配置私鑰路徑,Key中配置私鑰內容,並在目標伺服器/home/相應登入使用者資料夾
/.ssh/authorized_keys中新增公鑰(如果沒有該檔案,則手動建立之)。
複製程式碼

步驟3

Global Tool Configuration,全域性工具配置,裡面配置Jenkins需要使用到的工具的配置,如svn、maven、jdk等。

  1. JDK配置:可選擇自動安裝,然後勾選合適的JDK版本進行安裝,或者指定已安裝的JDK目錄。
  2. Maven Configuration配置:maven的setting.xml路徑配置。
  3. Maven 配置:可選擇自動安裝,然後勾選合適的Maven 版本進行安裝,或者指定已安裝的Maven目錄。

步驟4

在目標伺服器上傳自動化部署指令碼,檔案詳見上傳檔案“deploy.sh”。大概邏輯為:

指令碼支援三個引數,預設只傳入第一個引數,第一個引數:應用名稱;第二個引數:Tomcat埠;第三個引數:Tomcat所在路徑。
設定相關變數(Tomcat所在路徑Tomcat_Home、Tomcat埠Tomcat_port、應用名稱Project)
Kill掉Tomcat程式
刪除應用
拷貝新的war包
備份war包
刪除war包
啟動Tomcat
複製程式碼

對專案進行持續整合

一、 對於maven專案,需要先安裝Maven Integration plugin外掛,安裝方法同安裝Publish Over SSH外掛。 二、首頁->新建->構建一個maven專案(輸入item名稱)->進入該專案->配置,具體配置如下:

  1. General,專案名稱不用說,勾選 丟棄舊的構建->儲存構建天數、保持構建的最大個數(自己視情況而定),勾選 引數化構建過程->choice parameter: Name=VERSION Choices=1.0.1 Description=產品系統/模組的版本號

  2. 原始碼管理Subversion: Repository URL=svn://[ip]/svn版本倉庫/其中一個專案(資料夾) Credentials=svn訪問使用者名稱和密碼(Add中新增Username和Password即可)

  3. 構建觸發器,勾選 Poll SCM,日程表=H/60 * * * *(表示每60分鐘檢查svn版本庫一次)

  4. Build: Root POM=pom.xml(在工作空間目錄下pom.xml的相對位置,其實也就是svn配置中Repository URL 屬性後面的地址) Goals and options=clean -DskipTests=true install -Pprod -U(maven執行命令,跳過了Test)

  5. Post Steps,Add post-build step->Send files or execute commands over SSH,配置如下:

Name=下拉選擇開始系統設定中設定的SSH-Test
Source files=target/*.war(相對於工作空間目錄下的war包相對位置,其實也就是svn配置中Repository URL屬性後面的地址)
Remove prefix=target/(移除字首)
Remote directory=war(在系統設定中配置的Remote Directory路徑下的相對位置,即該專案將傳於目標伺服器/data/Jenkins_War/war/目錄下)
Exec command=/data/Jenkins_War/deploy.sh MySpringBoot(自動部署指令碼在目標伺服器的位置,並傳入第一個引數:專案名)
複製程式碼
  1. 構建後操作,增加構建後操作步驟->Editable Email Notification->Advanced Settings: Send-TO 刪除Developers,在高階裡面直接配置:Recipient List=接受者郵箱

自動構建和手動構建

A:根據上面配置,將每60分鐘檢視一次svn版本庫是否有變更並執行構建,這既是自動構建。

B:手動構建,選擇Build with Parameter->可選擇此處構建產生的版本->立即構建。左邊導航欄可看到構建歷史,點選小球可以檢視控制檯輸出。

注意:

  • 專案配置中,一般像路徑這些東西,配置有問題都會出現紅色警告的,除了Publish Over SSH配置外。
  • 上面沒說到的配置,都直接預設即可。

Jenkins搭建到這裡就結束了,在搭建Jenkins的路上走了不少坑,特此記一筆。

相關文章