【Jenkins】Linux搭建Jenkins平台


為了配合上一篇的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:郵件相關配置,可百度一堆

 

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條件”。 例如: alwaysunstablesuccessfailurechanged管道語法部分提供了更多關於如何使用各種post條件的詳細信息。

  

changed
如果當前管道或階段的運行與之前的運行有不同的完成狀態,則只運行post中的步驟。
fixed
如果當前管道或階段的運行成功,且前一次運行失敗或不穩定,則只運行post中的步驟。
failure
只有在當前管道或階段的運行有“失敗”狀態時才運行post中的步驟,通常在web UI中表示為紅色。
success
只有當當前管道或階段的運行具有“成功”狀態時,才運行post中的步驟,通常在web UI中以藍色或綠色表示。
unstable
如果當前管道或階段的運行狀態為“不穩定”狀態,通常是由測試失敗、代碼違規等引起的,那么只在post中運行這些步驟。

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM