基於Docker安裝Jenkins實現自動化構建、部署、測試、監控項目
推薦個人Docker文章,講的非常詳細
【玩轉Docker容器 1】Dockerd的詳解及安裝【玩轉Docker容器 2】基於Docker一分鐘搭建完 Jdk、Mysql、Nginx、Redis、Tomcat環境
【玩轉Docker容器 3】基於Docker部署SpringBoot項目
【玩轉Docker容器 4】基於Docker搭建Docker私服,以及如何使用Docker私服詳解
【玩轉Docker容器 5】基於Docker搭建Maven私服,以及項目如何使用Maven私服詳解
【玩轉Docker容器 6】基於Docker構建GitLab管理代碼
【玩轉Docker容器 7】基於Docker安裝Jenkins實現自動化構建、部署、測試、監控項目
什麼是Jenkins
Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,它用Java語言編寫而成,可持續集成、自動的構建/測試軟件項目、監控外部任務的運行的web界面的平臺
CI/CD是什麼
CI(Continuous integration),中文意思是持續集成,是一種軟件開發時間。持續集成強調開發人員提交了新代碼之後,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。
CD(Continuous Delivery), 中文意思持續交付,是在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境(類生產環境)中。比如,我們完成單元測試後,可以把代碼部署到連接數據庫的Staging環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。
Jenkins的特點
1、開源的java語言開發持續集成工具,支持CI,CD;
2、易於安裝部署配置:可通過yum安裝,通過docker容器等快速實現安裝部署,可通過web界面配置管理;
3、消息通知及測試報告:集成RSS/E-mail通過RSS發佈構建結果或當構建完成時通過e-mail通知,生成JUnit/TestNG測試報告;
4、分佈式構建:支持Jenkins能夠讓多臺計算機一起構建/測試;
5、文件識別:Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等;
6、豐富的插件支持:支持擴展插件,你可以開發適合自己團隊使用的工具,如git,svn,maven,docker等。
7、支持項目持續監控,日誌輸出
使用Docker 安裝jenkins
1 使用docker 安裝jenkins
輸入下載(有可能比較久)
# docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
2 訪問jenkins所在的IP地址加上8080端口
注意關閉8080防火牆
注意:第一次啓動的時候正在加載jenkins大概會等待3-10分鐘。出現下圖即可
3 解鎖jenkins
進入jenkins容器 查看密碼
# docker ps
# docker exec -it 容器id /bin/bash
# cat /var/jenkins_home/secrets/initialAdminPassword
輸入上面複製的解鎖密碼
點擊安裝推薦插件
等待完成就好了
大概需要等待3-10分鐘
4 創建新的用戶
自己輸入填完
點擊開始使用
出現下圖就成功了
Jenkins全局工具配置
1 配置JDK
進入jenkins容器 查看java環境安裝地址
# docker ps
# docker exec -it 容器id /bin/bash
# echo $JAVA_HOME
在點擊
找到jdk添加,別名隨便寫,這個JAVA_HOME就是自己查詢出來的JDK路徑
填寫完點擊保存
2 配置Maven
Maven的話就選擇直接點擊自動安裝就好了
3.配置項目Maven插件
上面不是配置了Maven插件嗎,那是不一樣的,上面那個是全局的Jenkins的Maven插件,我這裏是需要配置項目的Maven插件,現在的項目基本都Maven項目,所以需要部署時聯網下載。
搜索插件名稱:
Maven Integration
在選擇安裝後重啓
等待完成就OK啦
使用Jenkins自動打包SpringBoot項目
1 新建一個SpringBoot項目
我只勾選了WEB開發
添加這一點點代碼
package com.example.demo.api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestApi {
@RequestMapping("/test")
public String test(){
System.out.println("基於Docker安裝Jenkins實現自動化構建、部署、測試、監控項目");
return "基於Docker安裝Jenkins實現自動化構建、部署、測試、監控項目";
}
}
端口號:5656
運行訪問看看:
2 上傳項目至GitLab
使用git上傳,或者使用IDEA上傳,或者Eclipse上傳到GitLab上
我自己是找到項目地址使用Git打開git bash輸入命令上傳的
不懂看這篇文章,搭建、上傳、下載過程都有:
【玩轉Docker容器 6】基於Docker構建GitLab管理代碼
整個項目打包上來:
3 Jenkins實現Springboot項目自動部署
1 新建一個發佈任務
選擇Maven項目,在點擊確定
注:如果沒有Maven選項的話,就是 沒有完成上面:3 配置項目Maven插件這一步驟.
2 配置任務git地址和賬號密碼
上面那一步驟完成後,往下移,找到源碼管理,點擊Git
配置裏面的地址參數
把上面的複製下來:http://120.77.0.58/root/springboot_test.git
我這裏加了有點不一樣,我加上了端口號,因爲我服務器80端口未打開,我就使用了我GitLab的端口號,如果防火牆開發了80端口就不需要加上端口號
在配置用戶名密碼:
ID和描述可以不需要填,只需要填寫正確的地址和用戶名密碼就行了
還未完成
還未完!
3 配置項目自動打包
接着往下移找到Build
填寫
clean install
在點擊保存
完成後,在點擊立即構建
在點擊左下角
選擇控制檯,即可查看打包的日誌
下面是成功的樣子:
第一次構建可能耗時比較長,因爲需要下載一些相關依賴jar包
結尾出現:Finished: SUCCESS 代表成功
結尾出現:Finished: FAILURE 代表失敗
注意如果報錯:ERROR: Maven JVM terminated unexpectedly with exit code 137
問題原因:因爲maven設置的內存不足,也就是服務器內存不足,運行內存不足,可以輸入top命令把大的進程給關了:TOP命令詳解
4 找到Jenkins打包的項目位置
Jenkins打包的項目是在Docker中Jenkins容器內,要找到打包的項目必須進入容器才能查看
輸入:
# docker ps
# docker exec -it 容器id /bin/bash
# cd /var/jenkins_home/workspace/springboot_test/target/
# ls
上面的選項 4 就是打包成功的JAR包,這個包是可以直接在Docker容器內運行的,但是我們不要去容器內運行,我們要在可視化Jenkins中內實現打包後自動運行
使用Jenkins實現打包後執行shll腳本部署項目
1、選擇項目
2、點擊配置
3、往下移動找到Post Steps,選擇添加Shall腳本
4、配置腳本
配置:(需要修改前面四個)服務名、Jar包名稱、Jar包路徑、Jar包路勁
建議重控制檯輸出去複製粘貼上來
#!/bin/bash
#服務名稱,最好和項目名稱一致
SERVER_NAME=springboot_test
# 源jar路徑,mvn打包完成之後,target目錄下的jar包名稱,也可選擇成爲war包,war包可移動到Tomcat的webapps目錄下運行,這裏使用jar包,用java -jar 命令執行
JAR_NAME=demo-0.0.1-SNAPSHOT
# 源jar路徑
JAR_PATH=/var/jenkins_home/workspace/springboot_test/target/
JAR_WORK_PATH=/var/jenkins_home/workspace/springboot_test/target/
echo "查詢進程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到進程ID:$PID"
echo "結束進程"
for id in $PID
do
kill -9 $id
echo "killed $id"
done
echo "結束進程完成"
#複製jar包到執行目錄
echo "複製jar包到執行目錄:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "複製jar包完成"
cd $JAR_WORK_PATH
#修改文件權限
chmod 755 $JAR_NAME.jar
#如果要設置後臺啓動方式的話,修改底下爲:BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &
java -jar $JAR_NAME.jar
5、保存完了後點擊:立即構建:
成功!
配置Docker容器映射外網訪問
輸入:
# docker ps
# docker exec -it 容器id /bin/bash
# cd /var/jenkins_home/workspace/springboot_test/target/
# ps
發現已經配置完成,
但是外網訪問不了,就算關閉了防火牆也訪問不了,需要重新映射Docker中的Jenkins容器的端口號
1 配置Jenkins容器映射端口號
1.重啓容器
輸入:
systemctl restart docker
2.清空未運行的容器
輸入:
docker run -d -p 8080:8080 -p 5656:5656 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
5656端口號是我的項目端口號
2 重新構建項目
等待重啓完成,在次點擊立即構建
等待構建完成即可
外網訪問測試
輸入:IP地址+端口號+接口路徑
完成!
何爲自動化部署項目
1、現在的項目輸入是這樣的:
2、修改源代碼
3.使用Git重新提交項目
4.點擊關閉,在點擊構建
5.在此訪問查看
成功!