1. 程式人生 > >Jenkins構建springboot+gradle+github+webhook

Jenkins構建springboot+gradle+github+webhook

Jenkins 使用說明

一、基本資訊

Jenkins 是一個可擴充套件的持續整合引擎。
主要用於:
-  持續、自動地構建/測試軟體專案。
-  監控一些定時執行的任務。

Jenkins下載地址

Jenkins觸發方式

  • 類cron表示式 H * * * * (Min H d Mon W)
  • token觸發(觸發遠端構建)
  • webhook觸發(輪詢 SCM)
  • 前後專案構建完成觸發
  • 點選構建觸發

使用步驟

  1. 下載Jenkins
  2. 初始化Jenkins
  3. 下載Jenkins外掛
  4. 配置Jenkins系統設定
  5. 配置Jenkins全域性工具配置
  6. 建立專案
    • git地址(原始碼管理)
    • 觸發時間
    • 構建命令(gradle build)
    • 編譯完成目標應用伺服器執行shell(copy war包,停止、啟動容器等操作)
  7. 等待觸發

二、配置Jenkins

本次使用配置如下

專案 版本
Jenkins 2.141
應用伺服器JDK 1.8.0_131
Jenkins伺服器JDK 1.8.0_171
springboot 2.0.1.RELEASE
Jenkins伺服器系統 mac 10.13.6
應用伺服器系統 CentOS Linux release 7.3.1611

1. 啟動Jenkins服務

  • 命令方式

    nohup java -jar jenkins.war –ajp13Port=-1 –httpPort=8084 1>send.out 2>&1 &

    nohup java -jar jenkins.war –httpPort=8084 1>send.out 2>&1 &

    說明:

    1. jenkins.war為可執行war包自帶Jetty伺服器,直接啟動即可。

    2. 修改埠通過引數httpPort=8084,設定http偵聽埠。 -1表示禁用,預設為8080

    3. ajp13Port:設定ajp13監聽埠。 -1表示禁用,預設值為8009
  • Tomcat方式

    將下載的war包放入tomcat/webapp目錄,啟動tomcat即可

2. 初始化Jenkins

訪問 瀏覽器訪問:http://localhost:8084/埠改為你所指定的埠,下圖為第一次開啟頁面顯示

第一次啟動Jenkins時,出於安全考慮,Jenkins會自動生成一個隨機的按照口令。注意控制檯輸出的口令,複製下來,然後在瀏覽器輸入密碼:

INFO: 

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

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

0cca37389e6540c08ce6e4c96f46da0f

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

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

輸入金鑰點選Continue即可進入使用者自定義外掛介面,建議選擇安裝官方推薦外掛。

接下來是進入外掛安裝進度介面:

外掛一次可能不會完全安裝成功,可以點選Retry再次安裝。直到全部安裝成功

等待一段時間之後,外掛安裝完成,配置使用者名稱密碼:

輸入:root/passw0rd 及其他資訊之後點選Save and Finish跳轉到主頁面。

3. 安裝Jenkins外掛

有很多外掛都是選擇的預設的安裝的,所以現在需要我們安裝的外掛不多,Git plugin、Maven Integration plugin、publish over SSH、GitHub plugin。

外掛安裝:首頁>系統管理 > 外掛管理 > 可選外掛,勾選需要安裝的外掛,點選直接安裝。

4. 配置系統設定

進入系統設定:首頁>系統管理 > 系統設定

4.1郵件配置

專案失敗,傳送郵件時使用。

  • 設定Jenkins伺服器地址和管理員郵件(傳送郵件方)

image-20180911153319488

  • 設定發件人資訊,安裝不同郵箱有不同設定。可自行百度。配置完成點選Test configuration測試

image-20180911153458937

  • 測試連線成功,配置完畢,點選應用

4.2. 設定SSH認證

設定Jenkins伺服器和應用伺服器ssh傳輸免密認證。Jenkins用於傳輸檔案、指令碼等。

4.2.1 配置Jenkins伺服器金鑰

若已配置(cat ~/.ssh/id_rsa.pub有公鑰)則可省略這一步

jenkins伺服器上生成金鑰對,使用ssh-keygen -t rsa命令,輸入下面命令 一直回車,一個矩形圖形出現就說明成功,在~/.ssh/下會有私鑰id_rsa和公鑰id_rsa.pub。期間可以輸入金鑰的密碼。

# Jenkins伺服器執行
ssh-keygen -t rsa
# 檢視公鑰
cat ~/.ssh/id_rsa.pub
4.2.2 配置應用伺服器認證Jenkins伺服器金鑰
# Jenkins伺服器執行,ssh-copy-id -i pubKeyFileName [email protected]
cd ~/.ssh/
ssh-copy-id -i id_rsa.pub aimServiceUserName@192.168.0.xx
ssh aimServiceUserName@192.168.0.xx
# 應用伺服器執行
cd ~/.ssh/
chmod 644 authorized_keys
service sshd restart

測試:Jenkins伺服器ssh登入應用伺服器,登入成功即可。如下命令

# Jenkins伺服器執行,ssh連線應用伺服器
ssh [email protected]

如果還是提示需要輸入密碼,則有以下原因

  • a. 非root賬戶可能不支援ssh公鑰認證(看伺服器是否有限制)
  • b. 傳過來的公鑰檔案許可權不夠,可以給這個檔案授權下 chmod 644 authorized_keys
  • c. 使用root賬戶執行ssh-copy-id -i ~/.ssh/id_rsa.pub 這個指令的時候如果需要輸入密碼則要配置sshd_config
# Jenkins伺服器執行,
vi /etc/ssh/sshd_config
# sshd_config內容開始
PermitRootLogin no
# sshd_config內容結束
# Jenkins伺服器重啟ssh服務
service sshd restart

測試:Jenkins伺服器ssh登入應用伺服器,登入成功即可。

4.2.3 Jenkins服務配置ssh

如下圖:Passphrase、Path to key兩個欄位填寫本機(Jenkins伺服器)的金鑰密碼(無則不填)和金鑰地址

SSH Services是設定目標(應用伺服器ansible)伺服器免密認證。可填寫多個目標伺服器,填寫完畢點選測試。成功即可。

image-20180911153735092

  • Name:設定目標伺服器名稱,以便以後配置選擇使用;
  • Hostname:目標伺服器地址;
  • Username:目標伺服器使用者名稱;
  • Remote Directory:Jenkins在目標伺服器的根目錄,該目錄必須已存在且該使用者有所有許可權。

  • 配置完畢點選應用

4.3 Github WebHok配置

用於建立專案的webhook配置,需Jenkins服務為線上環境,否則Github不能訪問到Jenkins介面。

4.3.1 Github配置
  1. github 建立token

進入github –> setting –>Developer settings–> Personal Access Token –> Generate new token–>Generate new token

輸入Token description:可新增對此token的簡短描述。

勾選repo和admin:repo_hook即可點選Generate token按鈕生成token,立馬備份此token。一旦丟失不可找回。

img

  1. Github配置webhook

進入GitHub上指定的專案 –> setting –> WebHooks –> add webhook –> 輸入剛剛部署jenkins的伺服器的地址,如:http://12.232.121.121:8084/github-webhook–>點選Add webhook

img

4.3.2 Jenkins配置

Jenkins主頁–>系統管理 –> 系統設定 –> GitHub –> GitHub Sever–>Add GitHub Sever

img

Credentials:點選add,如下圖。配置完畢點選Add。

img

設定完成後,點選TestConnection,提示Credentials verified for user UUserName, rate limit: xxx,則表明有效。

  • 配置完畢,點選應用

5. 設定全域性工具

Jenkines首頁–>系統管理–>全域性工具配置 jdk路徑,

image-20180906103530502

配置JDK、GIT、GRADLE三項即可,注意以下幾點

  • JAVA_HOME:是java安裝的根目錄,$JAVA_HOME/bin/java
  • Path to Git executable:是git的可執行檔案的全路徑,Linux、Mac為git,Windows為git.exe
  • GRADLE_HOME:是gradle安裝的根目錄,$GRADLE_HOME/bin/gradle

image-20180906103625676

三、使用Jenkins構建專案

在此構建一個Github、Webhook、SpringBoot、Gradle的可持續化部署的專案gradle4springboot

使用Gradle管理專案依賴、測試

使用Github進行原始碼版本管理

使用Github Webhook觸發任務的構建

使用SpringBoot作為專案框架

使用Email傳送執行任務失敗

使用ssh傳送jar包

使用shell指令碼進行專案部署,停止、部署、啟動

?使用構建失敗回滾上一版本

1. 配置任務名及形式,建立一個新的任務

Jenkins主頁–>新建任務–>輸入任務名稱gradle4springboot–>選擇構建自由風格的軟體專案—>點選確定

image-20180912101340870

2. 配置任務描述及專案地址

進入配置頁面第一項即是,完描述點選應用。

image-20180912102108286

3. 配置原始碼管理(SCM)

配置原始碼管理,Jenkins會從此處獲取原始碼,並且提交每次任務的執行結果。

image-20180912102435895

  1. 選中Git

  2. 新增:Repository URL,用於git clone命令

  3. 新增:Credentials,github使用者名稱和本機私鑰,點選Add按鈕

    • 選則型別SSH Username with private key
    • 輸入Username該專案github具有編輯許可權的使用者名稱
    • 輸入PriateKey是Jenkins伺服器的私鑰,檢視命令cat ~/.ssh/id_rsa
    • 輸入描述,必要,用於區分其他憑據
    • 點選新增
  4. 填寫Branch Specifier (blank for 'any'),需要clone的分支,如:refs/heads/master、refs/heads/dev1

  5. 點選應用

4. 配置構建觸發器

配置任務執行的條件

image-20180912104034092

5. 配置構建環境

image-20180912105047151

image-20180912105121378

  1. 勾選Use secret text(s) or file(s)
    • 選擇Specific credentials
    • Add按鈕旁邊選擇,之前配置的github webhook的內容,4.3.2
  2. 勾選Abort the build if it's stuck,設定超時時間
  3. 勾選Add timestamps to the Console Output,在日誌中新增時間戳
  4. 點選應用

6. 配置Jenkins任務構建

點選增加構建步驟

  1. 執行gradle命令,Invoke Gradle Script

    image-20180912112659435

    • 選中Invoke Gradle

    • 選擇Gradle Version,選項為之前設定全域性工具中的Gradle

    • 點選Tasks最右邊的倒三角,輸入需要執行gradle指令碼的命令。若要執行gradle bulid,則只需輸入buuild即可,其他同理。
  2. 配置傳送jar包及在目標伺服器執行shell指令碼

image-20180912154234151

  • 輸入source files,需要上傳到目標伺服器的檔案。根目錄為工作空間

  • 輸入Remote directory,本專案上傳到,目標伺服器路徑,根目錄為之前配置ssh的目錄

  • 輸入Exec command,輸入shell命令,可在目標伺服器執行,進入目錄為當前使用者目錄~

  • start8085.sh指令碼如下

    
    # 顯示當前目錄
    
    pwd
    
    # javahome目錄
    
    JAVA_HOME=/home/crluser/java/jdk1.8.0_131
    
    # bin設定
    
    PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:
    
    # 使環境有效
    
    export JAVA_HOME PATH CLASSPATH
    
    # 獲取上次啟動8085埠的pid
    
    name=$(/usr/sbin/lsof -i:8085|tail -1|awk '"$1"!=""{print $2}')
    if [ -z $name ]
    then
    echo "No process can be used to killed!"
    else
    
    # 殺死被佔用的8085埠
    
    kill -9 $name
    echo "Process name=$name kill!"
    fi
    
    # 啟動war包,nohup &:掛起,--server.port=8085:修改啟動埠為8085,1>xqx-user.out 2>&1:當次啟動專案控制檯日誌寫入xqx-user.out檔案
    
    nohup java -jar gradle4springboot/xqx-user/build/libs/xqx-user-0.0.1-SNAPSHOT.war --server.port=8085 1>xqx-user.out 2>&1 &
    
  • 配置完畢點選應用

7. 配置失敗傳送email

image-20180912154952583

  • 進入構建後操作,點選新增構建後操作步驟選擇E-mail Notifycation

    image-20180912155117724

  • 填寫Recipients,輸入收件人,以空格分隔的收件人地址列表

  • 點選儲存

8. 等待任務被觸發執行

四、其他

eclipse的Jenkins 外掛:Jenkins Editor

五、Jenkins異常問題彙總:

1. 部署到遠端容器Tomcat返回403錯誤

問題描述:

Jenkins部署到遠端容器Tomcat中時報錯,403無許可權。

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://9.186.54.217:8080/manager/text/list

解決方法:

step 1 修改tomcat/conf/tomcat-users.xml,在節點下配置tomcat使用者,啟用“manager-script”角色;

<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-script"/>

step 2 修改tomcat/webapps/manager/META-INF/context.xml,註釋掉節點下節點

  <!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  -->

step 3 修改jenkins配置,指定tomcat管理使用者、密碼,重新構建即可成功。

image-20180905160555112

page 2

image-20180905160525650

2. jenkins配置郵件報錯

問題描述:

Jenkins系統管理–>系統設定,傳送測試郵件時報錯

501 mail from address must be same as authorization user

解決方法:

Jenkins Location配置的jenkins url下面的系統管理員郵件地址沒寫,填寫與使用者名稱一致就可以瞭如:(root <[email protected]>)。

3. git returned status code 128

問題描述:

Jenkins建立專案時,新增Git原始碼管理出現

501 mail from address must be same as authorization user

解決方法:

  • 確定jenkins的執行使用者,若你執行jenkins的使用者登出則需重啟jenkins服務

  • 試試ssh到github - 如果失敗了,那麼你需要將正確的金鑰新增到/.ssh