Jenkins構建springboot+gradle+github+webhook
Jenkins 使用說明
一、基本資訊
Jenkins 是一個可擴充套件的持續整合引擎。
主要用於:
- 持續、自動地構建/測試軟體專案。
- 監控一些定時執行的任務。
Jenkins下載地址
Jenkins觸發方式
- 類cron表示式 H * * * * (Min H d Mon W)
- token觸發(觸發遠端構建)
- webhook觸發(輪詢 SCM)
- 前後專案構建完成觸發
- 點選構建觸發
使用步驟
- 下載Jenkins
- 初始化Jenkins
- 下載Jenkins外掛
- 配置Jenkins系統設定
- 配置Jenkins全域性工具配置
- 建立專案
- git地址(原始碼管理)
- 觸發時間
- 構建命令(gradle build)
- 編譯完成目標應用伺服器執行shell(copy war包,停止、啟動容器等操作)
- 等待觸發
二、配置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 &
說明:
jenkins.war為可執行war包自帶Jetty伺服器,直接啟動即可。
修改埠通過引數httpPort=8084,設定http偵聽埠。 -1表示禁用,預設為8080
- 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伺服器地址和管理員郵件(傳送郵件方)
- 設定發件人資訊,安裝不同郵箱有不同設定。可自行百度。配置完成點選
Test configuration
測試
- 測試連線成功,配置完畢,點選應用
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)伺服器免密認證。可填寫多個目標伺服器,填寫完畢點選測試。成功即可。
- Name:設定目標伺服器名稱,以便以後配置選擇使用;
- Hostname:目標伺服器地址;
- Username:目標伺服器使用者名稱;
- Remote Directory:Jenkins在目標伺服器的根目錄,該目錄必須已存在且該使用者有所有許可權。
- 配置完畢點選應用
4.3 Github WebHok配置
用於建立專案的webhook配置,需Jenkins服務為線上環境,否則Github不能訪問到Jenkins介面。
4.3.1 Github配置
- 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。一旦丟失不可找回。
- Github配置webhook
進入GitHub上指定的專案 –> setting –> WebHooks –> add webhook –> 輸入剛剛部署jenkins的伺服器的地址,如:http://12.232.121.121:8084/github-webhook–>點選Add webhook
4.3.2 Jenkins配置
Jenkins主頁–>系統管理 –> 系統設定 –> GitHub –> GitHub Sever–>Add GitHub Sever
Credentials:點選add,如下圖。配置完畢點選Add。
設定完成後,點選TestConnection
,提示Credentials verified for user UUserName, rate limit: xxx
,則表明有效。
- 配置完畢,點選應用
5. 設定全域性工具
Jenkines首頁–>系統管理–>全域性工具配置 jdk路徑,
配置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
三、使用Jenkins構建專案
在此構建一個Github、Webhook、SpringBoot、Gradle的可持續化部署的專案gradle4springboot
使用Gradle管理專案依賴、測試
使用Github進行原始碼版本管理
使用Github Webhook觸發任務的構建
使用SpringBoot作為專案框架
使用Email傳送執行任務失敗
使用ssh傳送jar包
使用shell指令碼進行專案部署,停止、部署、啟動
?使用構建失敗回滾上一版本
1. 配置任務名及形式,建立一個新的任務
Jenkins主頁–>新建任務–>輸入任務名稱gradle4springboot–>選擇構建自由風格的軟體專案—>點選確定
2. 配置任務描述及專案地址
進入配置頁面第一項即是,完描述點選應用。
3. 配置原始碼管理(SCM)
配置原始碼管理,Jenkins會從此處獲取原始碼,並且提交每次任務的執行結果。
選中Git
新增:
Repository URL
,用於git clone命令新增:
Credentials
,github使用者名稱和本機私鑰,點選Add
按鈕- 選則
型別
為SSH Username with private key
- 輸入
Username
該專案github具有編輯許可權的使用者名稱 - 輸入
PriateKey
是Jenkins伺服器的私鑰,檢視命令cat ~/.ssh/id_rsa
- 輸入
描述
,必要,用於區分其他憑據 - 點選
新增
- 選則
填寫
Branch Specifier (blank for 'any')
,需要clone的分支,如:refs/heads/master、refs/heads/dev1點選應用
4. 配置構建觸發器
配置任務執行的條件
5. 配置構建環境
- 勾選
Use secret text(s) or file(s)
- 選擇
Specific credentials
- Add按鈕旁邊選擇,之前配置的github webhook的內容,4.3.2
- 選擇
- 勾選
Abort the build if it's stuck
,設定超時時間 - 勾選
Add timestamps to the Console Output
,在日誌中新增時間戳 - 點選應用
6. 配置Jenkins任務構建
點選增加構建步驟
執行gradle命令,Invoke Gradle Script
選中
Invoke Gradle
選擇
Gradle Version
,選項為之前設定全域性工具中的Gradle- 點選
Tasks
最右邊的倒三角,輸入需要執行gradle指令碼的命令。若要執行gradle bulid
,則只需輸入buuild
即可,其他同理。
配置傳送jar包及在目標伺服器執行shell指令碼
輸入
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
進入構建後操作,點選
新增構建後操作步驟
選擇E-mail Notifycation
填寫
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管理使用者、密碼,重新構建即可成功。
page 2
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