1. 程式人生 > >DevOps實踐之持續集成Jenkins

DevOps實踐之持續集成Jenkins

href true 點擊 ips write 資源 paths earch runt

一、安裝Jenkins

(1)下載並安裝配置Java Development Kit 8

[root@localhost ~]# rpm -ivh jdk-8u161-linux-x64.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8                 ########################################### [100%]
Unpacking JAR files...
    tools.jar...
    plugin.jar...
    javaws.jar...
    deploy.jar...
    rt.jar...
    jsse.jar...
    charsets.jar...
    localedata.jar...
[root@localhost ~]# vim /etc/profile
在最後添加以下信息
export JAVA_HOME=/usr/java/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin

[root@localhost ~]# . /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

(2)運行Jenkins

下載jenkins.war
[root@localhost ~]# java -jar jenkins.war 
Running from: /root/jenkins.war
webroot: $user.home/.jenkins
Feb 28, 2018 4:07:11 PM Main deleteWinstoneTempContents
WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war
Feb 28, 2018 4:07:12 PM org.eclipse.jetty.util.log.Log initialized
INFO: Logging initialized @586ms to org.eclipse.jetty.util.log.JavaUtilLog
Feb 28, 2018 4:07:12 PM winstone.Logger logInternal
INFO: Beginning extraction from war file
......
......
......
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

86edba508edf4d04859113d89a763f47

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

Feb 28, 2018 4:07:45 PM hudson.model.UpdateSite updateData
INFO: Obtained the latest update center data file for UpdateSource default
Feb 28, 2018 4:07:47 PM hudson.model.DownloadService$Downloadable load
INFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
Feb 28, 2018 4:07:57 PM hudson.model.UpdateSite updateData
INFO: Obtained the latest update center data file for UpdateSource default
Feb 28, 2018 4:07:57 PM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running
Feb 28, 2018 4:08:01 PM hudson.model.DownloadService$Downloadable load
INFO: Obtained the updated data file for hudson.tools.JDKInstaller
Feb 28, 2018 4:08:01 PM hudson.model.AsyncPeriodicWork$1 run
INFO: Finished Download metadata. 41,401 ms

(3)解鎖Jenkins
用上面的那行密碼解鎖Jenkins後才能繼續配置
技術分享圖片

點擊Continue

(4)安裝插件(安裝默認插件)
技術分享圖片
技術分享圖片

(5)配置管理員賬戶
技術分享圖片

(6)準備就緒
技術分享圖片
技術分享圖片

二、配置Jenkins

(1)配置JDK
點擊系統管理—>全局工具管理
技術分享圖片

如果有多個應用程序,需要不同的JDK版本,可以在這裏添加多個JDK

(2)配置Maven
http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.2/binaries/

[root@localhost ~]# tar -zxvf apache-maven-3.5.2-bin.tar.gz
[root@localhost ~]# mv apache-maven-3.5.2 /usr/local/maven3
設置環境變量,在/etc/profile中添加
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
[root@localhost ~]# source /etc/profile    
[root@localhost ~]# mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: /usr/local/maven3
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_161/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-573.el6.x86_64", arch: "amd64", family: "unix"

技術分享圖片

三、創建和配置基於Maven的JEE Web應用程序

創建一個基於Maven的Jenkins構建作業,執行pom.xml文件進行編譯、單元測試並創建一個包文件。

安裝Maven項目插件:Maven Integration plugin
在Jenkins儀表盤單擊開始新任務,選擇Maven項目,點擊“確定”
技術分享圖片
技術分享圖片
技術分享圖片

package目標將編譯源代碼,執行單元測試用例,並在Java上下文創建一個包或war文件。
單擊Apply和Save
技術分享圖片
點擊立即構建

等待Maven的package目標在Jenkins中執行,將編譯所有資源文件,執行用Junit編寫的單元測試用例,並創建一個需要在Tomcat或JBoss上部署的WAR文件。
如果構建成功,我們的目標就實現了,這就是持續集成。
技術分享圖片

報錯處理:
技術分享圖片

解決:
查看pom.xml的配置路徑是否有誤,盡量寫絕對路徑/root/.jenkins/workspace/PetClinic/pom.xml

四、單元測試用例結果

要檢查單元測試的執行情況,在項目儀表盤上點擊Test Result(確保構建時是成功的)
技術分享圖片
技術分享圖片

五、主代理架構

場景:
一個Jenkins服務器作為主節點,另一個Jenkins服務器(包含一些特定工具)作為代理,主節點可以訪問在其他服務器上的可用資源,執行特定操作。

配置步驟如下:
系統管理—>管理節點
技術分享圖片
新建節點
技術分享圖片

這裏需要註意的事,從節點中默認沒有Launch agent via Java Web Start選項
解決:
系統管理—>全局安全配置—>"TCP port for JNLP agents"配置為隨機—>Agent protocols
技術分享圖片

填寫相關信息
技術分享圖片
技術分享圖片

先在上面的頁面上下載agent.jar包,然後在代理服務器上執行上面的命令
技術分享圖片
技術分享圖片

確保執行所需的工具在主節點上已經配置,主節點可以使用這些安裝組件執行作業
在項目配置中選擇如下選項
技術分享圖片
在從節點配置中選擇並添加以下內容
技術分享圖片

六、集成Jenkins和SonarQube

系統管理—>管理插件—>可選插件—>SonarQube插件
系統管理—>系統設置—>Add SonarQube

安裝SonarQube
[root@localhost ~]# mv sonarqube-7.0 /usr/local/sonarqube7
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
創建數據庫
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER ‘sonar‘ IDENTIFIED BY ‘MY@)!*sql2018‘;
GRANT ALL ON sonar.* TO ‘sonar‘@‘%‘ IDENTIFIED BY ‘MY@)!*sql2018‘;
GRANT ALL ON sonar.* TO ‘sonar‘@‘localhost‘ IDENTIFIED BY ‘MY@)!*sql2018‘;
FLUSH PRIVILEGES;
修改配置文件
[root@localhost conf]# vim sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=MY@)!*sql2018
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.context=
sonar.web.port=8010
新版本加入了elasticsearch,需要普通用戶運行,否則報錯
[root@localhost logs]# groupadd elsearch
[root@localhost logs]# useradd elsearch -g elsearch -p elasticsearch
[root@localhost logs]# chown -R elsearch /usr/local/sonarqube7
[root@localhost logs]# chgrp -R elsearch /usr/local/sonarqube7     
[root@localhost logs]# chown -R elsearch /usr/java/jdk1.8.0_161
[root@localhost logs]# chgrp -R elsearch /usr/java/jdk1.8.0_161
以新用戶啟動服務
[elsearch@localhost logs]$ /usr/local/sonarqube7/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
啟動成功後在瀏覽器地址欄輸入http://192.168.1.68:8010即可訪問snoarQube.
缺省用戶名和密碼是 admin/admin

在SonarQube上得到身份驗證令牌
技術分享圖片

技術分享圖片

系統管理—>全局工具配置—>配置SonarQube Scanner自動安裝
技術分享圖片

安裝Quality gate插件,通過配置該插件,可以在SonarQube分析失敗時放棄Jenkins構建作業。
新建一個新的自由式作業PetClinic-Code並配置SonarQube
技術分享圖片
技術分享圖片

[root@localhost PetClinic]# ls /root/.jenkins/workspace/PetClinic/sonar-project.properties
# Required metadata
sonar.projectKey=java-sonar-runner-simple
sonar.projectName=Simple Java project analyzed with the SonarQube Runner
sonar.projectVersion=1.0

# Comma-separated paths to directories with sources (required)
sonar.sources=src

# Language
sonar.language=java

# Encoding of the source files
sonar.sourceEncoding=UTF-8

技術分享圖片
技術分享圖片

點擊立即構建,在SonarQube服務器儀表盤上查看代碼分析。
技術分享圖片

這就是在Jenkins中集成SonarQube的方法。

七、電子郵件通知

系統管理—>系統設置
技術分享圖片
技術分享圖片

至此,Jenkins持續集成及代碼分析已經部署完成。

補充:代碼分析最後報錯,有待解決
技術分享圖片

DevOps實踐之持續集成Jenkins