Jenkins構建springboot+gradle+github+webhook

Jenkins 使用說明

一、基本信息

Jenkins 是一個可擴展的持續集成引擎。
主要用於:
-  持續、自動地構建/測試軟件項目。
-  監控一些定時執行的任務。

官網地址https://jenkins.io/

Jenkins教程地址:官網中文參考w3cschool

參考Jenkins配置maven構建地址Jenkins Github Hook搭建

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 userName@Host
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 userName@Host

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

  • 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

API URL:默認:https://api.github.com即可

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

  1. 勾選觸發遠程構建,用於Http Get形式觸發,如:http://localhost:8084/job/gradle4springboot/build?token=passw0rd
  2. 勾選輪詢SCM,並且日程表不填寫任何東西。用於Github Webhook。
  3. 點擊應用

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

  • 選擇name,配置目標服務器,爲之前4.3.4 Jenkins服務配置ssh配置的服務器

  • 輸入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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章