為了配合上一篇的ant+jenkins做持續集成,需要在linux環境下搭建一個jenkins平台。網上有很多安裝的例子,我主要記錄一下自己遇到的問題,真真的是特別惆悵的,每次我遇到的問題都格外多。
主要分為三塊內容,具體如下:
*安裝
*問題及解決,
一 安裝jenkins
1 首先確認該機器已經安裝jdk,確認方式:在linux機器上輸入 java -version,若系統可識別java命令,則表示已安裝jdk,如下
得到的1.7.0_79為java版本,需注意:有些版本的jenkins不能使用1.6的jdk
2 安裝jenkins
A 離線安裝:
① 下載jenkins.war 包。Jenkins官方地址:http://Jenkins-ci.org/ (最新war包的下載地址:http://mirrors.jenkins-ci.org/war/latest/jenkins.war)
② 下載一個tomcat容器在webapps中放入jenkins.war,不要解壓。
③ 在cd /opt/soft/tomcat/webapps/ 中執行 java -jar jenkins.war
④ 查看日志是否有異常,訪問http://ip:8080即可看到jenkins界面,jenkins安裝成功。
B 在線安裝
使用yum命令進行在線安裝,使用service命令進行啟動,具體操作如下:
wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo --no-check-certificate rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key yum install jenkins
[root@bjdhj-120-215 run]# service jenkins start
Starting Jenkins [確定]
[root@bjdhj-120-215 run]# service jenkins status
jenkins (pid 23873) 正在運行...
瀏覽器訪問http://ip:8080 即可看到jenkins界面,jenkins安裝成功
二 配置JOB
1 安裝插件 Manage Jenkins->Manage Plugins ->Available中選取即可
一般需要安裝的插件有 Email Extension Plugin(發送郵件)、Cobertura Plugin(集成xml報告?)、Pipeline: Build Step(配置job的前后序)、GitLab Plugin(從git同步)
2 郵箱配置
這個地址很詳細:https://blog.csdn.net/fullbug/article/details/53024562
A jenkins location中配置
B Extended E-mail Notificationn配置
C Email Extension Plugin配置,test即可收到郵件
注意:SMTP server注意不要寫錯
3 節點配置 Jenkins Manage - > Manage Nodes ->New Node
A 配置節點
B 關聯工程
4 一個項目的配置
路徑:New 任務 -> (構建一個自由風格的項目)
- 丟棄舊的構建:保留構建結果配置
- 參數化構建過程:在構建頁面增加可配置參數,jenkins構建時會獲取,配合 xshell 內代碼使用
- Restrict where this project can be run:掛載節點選擇(實際的執行和代碼會在這台機器上)
- Source Code Management:源碼配置,通常是 git 地址
- Build Triggers:觸發方式,如果是自動化可由部署工程觸發,也可定時觸發
- Build:shell 腳本,范例見https://www.cnblogs.com/zhaoxd07/p/9049707.html ⑨
- Post-build Actions:構建完成后要執行的內容,對於自動化來說,通常是覆蓋率報告讀取和郵件通知
- Publish HTML reports :html 覆蓋率報告
- Coverage Metric Targets:配置滿足何種條件時 構建結果圖標展示:太陽 陰天 雨天等
- Publish Clover PHP Coverage Report:php代碼的xml報告
- Publish Junit test result report:執行自動時使用 --junit --junit-directory=./reports ,則生成對應的xml結果可讀取查看執行詳情
- 給一個指定demo,日后好抄
-
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys import subprocess cmd = 'behave features/API-Test-Suites/'+sys.argv[1]+' --junit --junit-directory=./reports --tags=-skip' subprocess.call(cmd, shell=True, executable='/bin/bash')
- Editable Email Notification:郵件相關配置,可百度一堆
- Publish HTML reports :html 覆蓋率報告
5 視圖添加執行一鍵構建功能
轉自:https://www.cnblogs.com/wwyxyt/p/6708050.html
三 遇到的問題
問題1 在執行yum install jenkins時提示:user jenkins does not exist
解決:該機器上沒有jenkins用戶,需要使用adduser命令創建用戶,adduser命令需要配合更改passwd等的權限位完成
[root@esearch01 ~]# adduser jennkins adduser: cannot open /etc/passwd #是因為該文件加了權限位,不可寫操作
[root@esearch01 etc]# lsattr passwd #進行確認
----i--------e- passwd
[root@esearch01 etc]# chattr -i passwd #去掉權限位
[root@esearch01 etc]# lsattr passwd #進行確認
-------------e- passwd
[root@esearch01 etc]# adduser jenkins #即可創建成功jenkins用戶
問題2:修改jenkins的端口
解決:完成jenkins的在線安裝后,查看/usr/lib/jenkins/jenkins.war;查看/etc/sysconfig/jenkins是jenkins的配置文件
修改jenkins文件的端口號:
vim /etc/sysconfig/jenkins 編輯該文件,修改如下兩個端口
JENKINS_PORT="8001"
JENKINS_AJP_PORT="8009"
保存文件並退出,重啟jenkins(service jenkins restart),在瀏覽器中訪問http://ip:8001,打開jenkins頁面。
問題3:jenkins的啟動日志報錯:
WARING:Could not intialize the host network interface on nullbecause of an error:101/udp
java.net.UnknownHostException:101/udp
原因:在linux執行hostname,得到101/udp。正常應該是通過hostname獲取對應的機器ip,但是明顯101/udp在解析時不通過,所以無法定位ip,導致錯誤。
解決:更新hostname。執行語句為hostname bjdhj-120-215.58os.org(自己定義一個合理的hostname名稱),可用其他機器ping改hostname,看是否能正確得到對應的ip。
再次啟動jenkins.war,日志正常,可訪問web頁面。
問題4:不能正確stop jenkins
[root@bjdhj-120-215 ~]# service jenkins stop
Shutting down Jenkins [失敗]
[root@bjdhj-120-215 ~]# service jenkins status
jenkins is stop,pid is exist
解決1:java版本沖突,確認下是否同時存在java1.6 java1.7或者其他,卸載,只保留一個
解決2:重新安裝jenkins,即再執行一遍yum install jenkins。
解決3:我是重新安裝了好了,但我總覺得有其他地方可以解決這個問題,所以先留着坑。
問題5:提示java版本不符
[root@localhost ~]# service jenkins start Starting Jenkins May 20, 2019 12:39:13 AM Main verifyJavaVersion SEVERE: Running with Java class version 51, which is older than the Minimum required version 52. See https://jenkins.io/redirect/java-support/ java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJavaVersion(Main.java:182) at Main.main(Main.java:142) Jenkins requires Java versions [8, 11] but you are running with Java 1.7 from /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJavaVersion(Main.java:182) at Main.main(Main.java:142)
解決:下載jdk1.8,放到了/usr/lib/jvm/jdk1.8.0
vim /etc/init.d/jenkins文件,查看配置,執行java命令 確認到 usr/bin/java與/etc/alternatives/java下為jdk1.7,在對應目錄下建立軟連接 java8 到/usr/lib/jvm/java-1.8.0/bin/java,再更改/etc/init.d/jenkins文件為 #后內容,再重啟即可成功
candidates=" /etc/alternatives/java #/etc/alternatives/java8
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java " #/usr/bin/java8
問題6:windows訪問linux的ip:port失敗,但是ping ip可以通
防火牆問題,需要在linux機器開放jenkins的端口,設置如下,再次訪問即可成功。
vim /etc/sysconfig/iptables #添加一條記錄 -A INPUT -p tcp -m tcp --dport 8090 -j ACCEPT #一定要在倒數第一/二前才生效 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited /etc/init.d/iptables restart /etc/init.d/iptables save
問題7:勾選了Exit code to set build unstable,結果是fixed,而不是success
怎么樣可以根據構建結果來輸出success和failure,而不是fixed和unstable
- 如果第1次構建失敗 --- 則結果為failure
- 如果第2次構建成功 --- 則結果為unstable
- 如果第3次構建成功 --- 則結果為fixed
- 如果第4次構建成功 --- 則結果為success
擴展:摘自 https://blog.csdn.net/qq351469076/java/article/details/80138342
聲明式流水線通過其post部分支持健壯的失敗處理,允許聲明多個不同的“post條件”。 例如: always
, unstable
, success
, failure
和changed
。管道語法部分提供了更多關於如何使用各種post條件的詳細信息。
changed 如果當前管道或階段的運行與之前的運行有不同的完成狀態,則只運行post中的步驟。 fixed 如果當前管道或階段的運行成功,且前一次運行失敗或不穩定,則只運行post中的步驟。 failure 只有在當前管道或階段的運行有“失敗”狀態時才運行post中的步驟,通常在web UI中表示為紅色。 success 只有當當前管道或階段的運行具有“成功”狀態時,才運行post中的步驟,通常在web UI中以藍色或綠色表示。 unstable 如果當前管道或階段的運行狀態為“不穩定”狀態,通常是由測試失敗、代碼違規等引起的,那么只在post中運行這些步驟。