日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jenkins使用教程

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins使用教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Jenkins 是一款流行的開源持續集成(Continuous Integration)工具,廣泛用于項目開發,具有自動化構建、測試和部署等功能。本文以 CentOS7 環境為例,總結了 Jenkins 的安裝與配置、郵件功能使用,并接入阿里巴巴的著名開源項目 fastjson,以此演示 Java 項目(SVN+Maven)中?FindBugs/CheckStyle/PMD 等常用插件的使用、單元測試及其覆蓋率報告等,力求實戰性強。

作者:王克鋒?
出處:https://kefeng.wang/2017/01/06/jenkins/?
版權:自由轉載-非商用-非衍生-保持署名,轉載請標明作者和出處。

1 安裝 Jenkins

官網:?https://jenkins.io/

1.1 安裝 JDK/Maven

Jenkins 自身采用 Java 開發,所以要必須安裝 JDK;?
本文集成的項目基于 Maven 構架,所以 Maven 也必須安裝;?
兩者的安裝方法請參考我的另一篇文章:Tomcat 安裝及其單機多實例部署

  • export JAVA_HOME=/usr/java/jdk1.8.0_111

  • export MAVEN_HOME=/opt/apache-maven-3.3.9

    • 1
    • 2

    1.2 安裝 Jenkins

    以下四種方法任選一種,推薦第一種。

    1.2.1 離線安裝

  • ## 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

    • 1
    • 2
    • 3
    • 4

    1.2.2 在線安裝

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

  • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

  • sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

  • sudo yum -y install jenkins

    • 1
    • 2
    • 3
    • 4

    1.2.3 基于 Tomcat 安裝

    • 安裝并啟動 Tomcat;
    • 從官網下載?jenkins.war?至 $CATALINA_BASE/webapps,Tomcat 會自動部署;
    • 瀏覽器訪問:http://centos:8080/jenkins/

    1.2.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 已就緒

    • 1
    • 2
    • 3

    1.3 調整配置文件

  • ## sudo vim /etc/sysconfig/jenkins

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

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

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

    • 1
    • 2
    • 3
    • 4

    安裝目錄: /usr/lib/jenkins?
    工作目錄: /var/lib/jenkins(對應于環境變量 JENKINS_HOME)

    1.4 啟動

  • sudo systemctl enable jenkins

  • sudo systemctl restart jenkins

    • 1
    • 2

    查看日志文件:?sudo tail -f /var/log/jenkins/jenkins.log

    啟動后會生成文件 hudson.model.UpdateCenter.xml,需要修改它,?
    否則瀏覽器首次進入時會卡在“Jenkins 正在啟動,請稍后…”

  • ## 原值: http://updates.jenkins-ci.org/update-center.json

  • ## 新值: http://mirror.xmission.com/jenkins/updates/update-center.json

  • ## 或者: http://mirror.xmission.com/jenkins/updates/current/update-center.json

  • sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml

  • sudo sed -i 's/updates.jenkins-ci.org/mirror.xmission.com\/jenkins\/updates/g' /var/lib/jenkins/hudson.model.UpdateCenter.xml

  • sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml

  • sudo systemctl restart jenkins

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.5 防火墻放行

  • ### sudo vim /etc/sysconfig/iptables

  • -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

  • ### 重啟生效: sudo systemctl restart iptables

    • 1
    • 2
    • 3

    1.6 卸載

    如果要重裝,或者本機不需要 Jenkins,可卸載:

  • sudo systemctl stop jenkins

  • sudo systemctl disable jenkins

  • sudo yum -y remove jenkins

  • sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins

  • sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`

    • 1
    • 2
    • 3
    • 4
    • 5

    2 基本配置

    2.1 登錄

    瀏覽器進入?http://centos:8080/?
    首次進入需要輸入初始密碼來解鎖,初始密碼查看方法:?sudo cat /var/lib/jenkins/secrets/initialAdminPassword?

    進入 Jenkins 定制界面,讓選擇?Install suggested plugins?或?Select plugins to install?時,兩者都不要選,直接關閉,下一個界面點擊“Start using Jenkins”;?

    修改登錄密碼:主界面右上角“注銷”鏈接的左邊的用戶名下拉菜單中點“設置”。

    2.2 安全設置

    默認情況下,任何用戶都可以使用 Jenkins 進行發布。?
    可以進入相關設置:系統管理 / Configure Global Security,?
    選擇?Jenkins專有用戶數據庫,不要選中?允許用戶注冊;?
    選擇?登錄用戶可以做任何事,選中?Allow anonymous read access

    2.3 插件安裝方法

    如果安裝插件失敗率很高,可設置翻墻,請參考我之前的文章:翻墻代理 Shadowsocks 使用詳解

    2.3.1 離線安裝

    手工下載(*.hpi):?http://updates.jenkins-ci.org/download/plugins/?
    進入:系統管理 / 管理插件 / 高級,然后上傳插件進行安裝。?
    無需重啟 Jenkins 插件即生效。

    2.3.2 在線安裝

    進入:系統管理 / 管理插件 / 可選插件?
    查找并勾選所需插件,點擊“直接安裝”;?
    無需重啟 Jenkins 插件即生效。如遇失敗可重試或離線安裝。?

    2.4 工具設置

    進入:系統管理 / Global Tool Configuration?
    JDK 下不勾選“自動安裝”,指定別名=JDK-1.8.0.111, JAVA_HOME=/usr/java/jdk1.8.0_111?
    Maven 下不勾選“自動安裝”,指定別名=Maven-3.3.9, MAVEN_HOME=/opt/apache-maven-3.3.9?
    點擊?Save?按鈕。?
    重啟 Jenkins 后生效:sudo systemctl restart jenkins?

    3 Maven(SVN) 項目接入

    3.1 準備 SVN 源碼

    使用 alibaba 的 fastjson 來演示:?
    下載:?https://github.com/alibaba/fastjson/archive/master.zip?
    SVN地址: svn://centos/repo1/fastjson

    3.2 安裝相關插件

    • Subversion Plug-in?## 版本管理 SVN 的插件
    • Git plugin?## 版本管理 GIT 的插件
    • Maven Integration plugin?## 項目構建 Maven 的插件
    • Gradle Plugin?## 項目構建 Gradle 的插件?
      無需重啟 Jenkins 插件即生效。如遇失敗可重試或離線安裝。

    3.3 新建構建項目

    3.3.1 開始創建

    主頁:點擊“新建”;?
    項目類型:輸入項目名稱?fastjson,類型選擇“構建一個Maven項目”(如果沒有此項可選,請檢查插件“Maven Integration plugin”是否已安裝);?

    3.3.2 源碼管理

    選擇“Subversion”(如果沒有此項可選,請檢查插件“Subversion Plug-in”是否已安裝),?
    倉庫URL可以指定 svn/http/https 之一,這里指定?svn://centos/repo1/fastjson?
    Credentials: 添加 SVN 用戶名密碼,并從下拉列表中選擇它。?

    3.3.3 定時觸發構建

    構建觸發器: 只選中?Build periodically, “日程表”格式與 crontab 相似但有細微差別,示例如下:

  • ## 每行由 5 個值組成(空格或TAB分隔),分別表示分(0-59)、時(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日)

  • ## "M,N" 表示M和N;"M-N" 表示范圍[M,N];"M-N/X" 表示范圍[M,N]內每隔X;"*/X" 表示整個范圍內每隔X

  • ## 前面提到的M/N/X的值都可以用H(意為Hash)代替,散列值起到隨機值的效果,且同一項目取值穩定,這對于項目多時分散壓力很有用。

  • H/10 H(0-8) * * 1-5 ## 觸發時間: 工作日、Hour為0~8按哈希隨機、Minute以10為間隔

  • H/10 H * * 0,6,7 ## 觸發時間: 周末、Hour為全天按哈希隨機、Minute以10為間隔

  • ## “日程表”修改后,下方會給出下次執行時間點的預告。

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.3.4 版本提交觸發構建

    構建觸發器: 只選中?Poll SCM,可指定檢查 SVN 代碼是否有提交的時間:

  • ## 格式與 "Build periodically" 相同

  • H/10 * * * * ## 任何時候,每隔 30 分鐘就檢測一次 SVN,如果有提交就啟動構建

    • 1
    • 2

    3.3.5 Build 設置

    Root POM: 指定 pom.xml 相對路徑?
    Goals and options: 指定 mvn 執行目標或選項,設置為?package -Dmaven.test.skip=true

    3.3.6 Post Steps 設置

    定制構建后的操作,通常選擇“Run only if build succeeds”,支持 shell 等腳本;

  • ## 腳本工作目錄為: /var/lib/jenkins/workspace/fastjson

  • # sudo systemctl stop tomcat

  • # sudo cp -f target/*.war /opt/apache-tomcat-8.5.9/webapps/

  • # sudo systemctl start tomcat

  • ls -l target/*.?ar

    • 1
    • 2
    • 3
    • 4
    • 5

    3.4 手工觸發構建

    進入?My Views, 右側看到各個項目;?
    點擊進入關注的項目,點擊左側的“立即構建”;?

    開始構建或構建完畢后,左下方列出每次構建的鏈接,點擊進入某次構建;?
    點擊左側的“Console Output”,可查看構建日志,如有報錯可以看到;?

    糾正錯誤后,返回到工程,再次點擊“立即構建”,直至構建成功;?
    如有網絡相關報錯,重試幾次也會成功。

    4 開啟 Java 代碼靜態檢查

    4.1 安裝相關插件

    如果是離線安裝,需要先依次安裝被依賴的插件:?
    -?Script Security Plugin?
    -?Matrix Project Plugin?
    -?Static Analysis Utilities

    再安裝直接被使用的插件:?
    -?FindBugs Plug-in?
    -?Checkstyle Plug-in?
    -?PMD Plug-in

    插件官方資料:?
    FindBugs:?https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin?
    Checkstyle:?http://maven.apache.org/plugins/maven-checkstyle-plugin/usage.html?
    PMD:?http://maven.apache.org/plugins/maven-pmd-plugin/usage.html

    4.2 Maven 中設置插件(pom.xml)

  • <project ...>

  • <properties>

  • <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  • <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  • </properties>

  • ?
  • <!-- ...... -->

  • ?
  • <reporting>

  • <plugins>

  • <plugin>

  • <groupId>org.codehaus.mojo</groupId>

  • <artifactId>findbugs-maven-plugin</artifactId>

  • <version>3.0.4</version>

  • <configuration>

  • <xmlOutput>true</xmlOutput>

  • <findbugsXmlOutput>true</findbugsXmlOutput>

  • <findbugsXmlWithMessages>true</findbugsXmlWithMessages>

  • </configuration>

  • </plugin>

  • <plugin>

  • <groupId>org.apache.maven.plugins</groupId>

  • <artifactId>maven-checkstyle-plugin</artifactId>

  • <version>2.17</version>

  • <configuration>

  • <linkXRef>false</linkXRef>

  • <failsOnError>true</failsOnError>

  • <consoleOutput>true</consoleOutput>

  • <configLocation>checkstyle.xml</configLocation>

  • </configuration>

  • </plugin>

  • <plugin>

  • <groupId>org.apache.maven.plugins</groupId>

  • <artifactId>maven-pmd-plugin</artifactId>

  • <version>3.7</version>

  • <configuration>

  • <linkXref>false</linkXref>

  • </configuration>

  • </plugin>

  • </plugins>

  • </reporting>

  • </project>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    4.3 修改 Jenkins 構建配置

    4.3.1 設置 Maven

    “Build”標簽頁,Goals and options?設置為:?
    package -Dmaven.test.skip=true findbugs:findbugs checkstyle:checkstyle pmd:pmd

    4.3.2 開啟相關報告

    “構建設置”標簽頁,打開以下三個選項:?
    - Publish FindBugs analysis results?
    - Publish Checkstyle analysis results?
    - Publish PMD analysis results

    4.4 構建后查看報告

    構建后進入構建頁面,從左邊點擊查看報告:?
    - FindBugs Warnings?
    - Checkstyle Warnings?
    - PMD Warnings?

    5 開啟郵件報告

    Jenkins 的郵件發送,原理與郵件客戶端一樣:把發件人的郵箱帳號、密碼、SMTP服務器告訴 Jenkins,Jenkins 需要時使用該帳號向指定的收件人發送郵件報告。

    5.1 安裝相關插件

    Jenkins 自帶郵件插件(Mailer Plugin)的功能很弱且無法自定制,?
    需要安裝擴展郵件插件: Email Extension Plugin

    5.2 全局統一設置

    以 admin@company.com 為例,如下圖設置:?

    5.2.1 設置管理員郵箱

    進入:系統管理 / 系統設置 / Jenkins Location?
    系統管理員郵件地址?設為 admin@company.com

    5.2.2 設置發件人帳號

    進入:系統管理 / 系統設置 / Extended E-mail Notification?
    “SMTP server” 設為 smtp.company.com?
    “Default user E-mail suffix” 設為 @company.com?
    “Use SMTP Authentication” 選中?
    “User Name” = admin@company.com(必須與管理員郵箱相同)?
    “Password” =?**?
    “Use SSL” = on?
    “SMTP port” = 465?
    “Charset” = UTF-8?
    “Default Content Type” = HTML (text/html)

    5.2.3 設置郵箱模板

    Default Subject: 構建通知:BUILD_NUMBER - $BUILD_STATUS?
    Default Content:

  • 本郵件由系統自動發出,請勿回復!<br/>

  • <h2><font color="#CC0000">構建結果 - ${BUILD_STATUS}</font></h2>

  • ?
  • <h4><font color="#0B610B">構建信息</font></h4>

  • <hr size="2" width="100%" />

  • <ul>

  • <li>項目名稱:${PROJECT_NAME} - #${BUILD_NUMBER}</li>

  • <li>觸發原因:${CAUSE}</li>

  • <li>項目 URL:<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>

  • <li>構建 URL:<a href="${BUILD_URL}">${BUILD_URL}</a></li>

  • <li>構建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>

  • <li>工作目錄:<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>

  • </ul>

  • ?
  • <h4><font color="#0B610B">失敗用例</font></h4>

  • <hr size="2" width="100%" />

  • $FAILED_TESTS<br/>

  • ?
  • <h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>

  • <hr size="2" width="100%" />

  • <ul>

  • ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}

  • </ul>

  • 詳細提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>

  • ?
  • <h4><font color="#0B610B">代碼檢查</font></h4>

  • <hr size="2" width="100%" />

  • FindBugs:<a href="${BUILD_URL}findbugsResult">${BUILD_URL}findbugsResult</a><br/>

  • CheckStyle:<a href="${BUILD_URL}checkstyleResult">${BUILD_URL}checkstyleResult</a><br/>

  • PMD:<a href="${BUILD_URL}pmdResult">${BUILD_URL}pmdResult</a><br/>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    也可以自定義 Jelly 模板,并在?Default Content?中引用?${JELLY_SCRIPT, template="html_gmail"}:

  • sudo mkdir -p /var/lib/jenkins/email-templates

  • sudo cd /var/lib/jenkins/email-templates

  • sudo wget https://github.com/jenkinsci/email-ext-plugin/raw/master/src/main/resources/hudson/plugins/emailext/templates/html_gmail.jelly

  • # 更多模板列表: https://github.com/jenkinsci/email-ext-plugin/tree/master/src/main/resources/hudson/plugins/emailext/templates

    • 1
    • 2
    • 3
    • 4

    5.2.4 設置郵件觸發時機

    點擊?Default Triggers,比較好的方案是選中兩項:?
    - Failure - Any ## 可定義“編譯失敗時”才向哪些人員發郵件(比如最近代碼提交者)?
    - Success ## 可定義“構建成功時”才向哪些人員發郵件(比如所有產品關注者)

    5.2.5 郵件可用變量

    點擊?Content Token Reference?右側的問號圖標,可以看到各郵件模板中可引用變量的含義。

    5.2.6 郵件未發送問題排查

    構建設置里指定的收件人只是 kevin,沒有后續,希望采用插件?Email Extension Plugin?中的郵箱后綴,?
    卻發現構建日志中報錯:?Failed to send e-mail to kevin because no e-mail address is known, and no default e-mail domain is configured?
    原來,擴展郵件插件有BUG,使用的是自帶郵件插件的后綴設置,而后者之前沒有設置。?
    點擊?保存,保存郵件全局設置。

    5.3 項目設置中啟用郵件

    構建后操作步驟: 增加?Editable Email Notification(來自插件?Email Extension Plugin)。下圖設置的效果是:?
    - 構建失敗時,向上次成功構建之后導致構建失敗的 SVN 提交的人員發送郵件;?
    - 構建成功時,向上次成功構建之后有 SVN 提交的人員、還有“Project Recipient List”中的人員發送郵件;

    5.4 驗證構建報告郵件

    分別按以下三種情形觸發構建,都能看到構建報告郵件:?
    - 手工觸發:進入工程后,點擊“立即構建”;?
    - 定時觸發構建:“構建觸發器”只選中?Build periodically;?
    - 版本提交觸發構建:“構建觸發器”只選中?Poll SCM。?

    6 Java/JUnit 單元測試

    6.1 Maven 中設置插件(pom.xml)

  • <project ...>

  • <reporting>

  • <plugins>

  • <plugin>

  • <groupId>org.apache.maven.plugins</groupId>

  • <artifactId>maven-surefire-plugin</artifactId>

  • <version>2.19.1</version>

  • </plugin>

  • </plugins>

  • </reporting>

  • </project>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.2 修改 Jenkins 構建配置

    “Build”標簽頁,Goals and options:確保去掉-Dmaven.test.skip=true即可。

    6.3 構建后查看單元測試報告

    7 單元測試覆蓋率報告

    7.1 安裝插件

    JaCoCo plugin:與插件 Cobertura 一樣,用于生成覆蓋率報告,但比 Cobertura 更易用。

    7.2 調整工程 pom.xml

  • <build>

  • <plugins>

  • <plugin>

  • <groupId>org.jacoco</groupId>

  • <artifactId>jacoco-maven-plugin</artifactId>

  • <version>0.7.8</version>

  • <executions>

  • <execution>

  • <id>prepare</id>

  • <goals>

  • <goal>prepare-agent</goal>

  • </goals>

  • </execution>

  • <execution>

  • <id>report</id>

  • <phase>package</phase>

  • <goals>

  • <goal>report</goal>

  • </goals>

  • </execution>

  • </executions>

  • </plugin>

  • </plugins>

  • </build>

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    7.3 調整項目的構建設置

    項目的構建設置 Post Build Action 中,增加 “Record JaCoCo coverage report”,并設置期望的覆蓋率閾值。?

    7.4 構建并查看報告

    構建完成后,點擊本次構建頁的“Coverage Report”查看報告:?

    8 更多有用插件

    • Folders Plugin:可嵌套地定義文件夾來級別 views / jobs;
    • build timeout plugin:允許用戶中止耗時太久的構建;
    • Dingding[釘釘] Plugin:允許向阿里釘釘發送構建通知;
    • TestNG Results Plugin: 用 TestNG 代替 JUnit;
    • Publish Over SSH: 通過SSH發布文件或執行命令(使用SFTP的SCP)。

    總結

    以上是生活随笔為你收集整理的Jenkins使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。