Jenkins 使用說明
一、基本信息
Jenkins 是一個可擴展的持續集成引擎。
主要用於:
- 持續、自動地構建/測試軟件項目。
- 監控一些定時執行的任務。
官網地址:https://jenkins.io/
Jenkins教程地址:官網、中文參考w3cschool
參考:Jenkins配置maven構建地址、Jenkins Github Hook搭建
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 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)服務器免密認證。可填寫多個目標服務器,填寫完畢點擊測試。成功即可。
- 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
API URL:默認:https://api.github.com即可
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. 配置構建觸發器
配置任務運行的條件
- 勾選
觸發遠程構建
,用於Http Get形式觸發,如:http://localhost:8084/job/gradle4springboot/build?token=passw0rd - 勾選
輪詢SCM
,並且日程表不填寫任何東西。用於Github Webhook。 - 點擊應用
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腳本
選擇
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
進入構建後操作,點擊
添加構建後操作步驟
選擇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