教程講述的是在centos7系統環境下,把mvn項目自動化部署到docker容器中,實現提交代碼之後自動部署功能,代碼管理使用碼雲(gitee)。安裝Tomcat、jenkins、mvn環境請移步https://www.jianshu.com/p/686e534a6fec,docker安裝配置請移步https://www.jianshu.com/p/9bd3ed0b336b
簡要流程:
一共分爲六個步驟:
1. idea新建mvn項目,編寫測試接口
2. 安裝gitee插件
3. jenkins配置gitee
4. jenkins新建mvn項目並配置
5. 測試觸發構建功能
6. 編寫Dockerfile,shell腳本,構建鏡像,創建運行容器
###一、idea新建mvn項目,編寫測試接口
在idea中新建mvn項目,提交到gitee上,此步驟省略。
###二、安裝gitee插件
如果在線安裝失敗,可下載插件文件,選擇在插件這個地方選擇高級,從本地安裝插件。
下載地址 https://gitee.com/oschina/Gitee-Jenkins-Plugin/releases
安裝完成插件之後重啓jenkins服務
###三、jenkins配置gitee
-
鏈接名:可按自己想法填寫
-
Gitee 域名 URL: https://gitee.com,或者按gitee官方提示 (碼雲私有化客戶輸入部署的域名)
-
證書令牌:
3.1 點擊新建3.2 訪問藍色背景處的鏈接,在gitee上獲取私人令牌3.4 點擊提交,系統會生成一串字符,複製過來填進去就OK了,ID和描述可按自己需求填寫,沒有什麼限制條件 -
點擊測試鏈接,完美的配置成功
-
保存返回
###四、jenkins新建mvn項目並配置
1.源碼配置
參數說明
1. Repository URL:gitee項目地址
2. Credentials:上一步創建的憑據
3. Name:origin
4. Refspec:+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE
5. Branch Specifier (blank for 'any'):
1. 對於單倉庫工作流輸入: origin/${giteeSourceBranch}
2. 對於 PR 工作流輸入: pull/${giteePullRequestIid}/MERGE
2.構建觸發器配置,需要在項目位置webhooks,前面提示的鏈接和點擊生成webhooks密碼的結果填入gitee項目的webhooks中,如下圖所示
3.構建環境
4.準備構建
5.構建設置和構建後操作
6.保存
###五、測試觸發構建功能
1.隨意修改一個文件,提交代碼到gitee,然後觀察jenkins
2.自動構建已經完成,接下來編寫shell,使其運行在docker中,在 PostSteps這一步中
###六、編寫shell腳本,把jar包打包成鏡像
1.在服務器的jenkins工作目錄下找到我們新建的項目的目錄,進入項目目錄,新建文件夾
mkdir work
新建工作目錄完成之後,新建Dockerfile文件,
vim Dockerfile
Dockerfile代碼
FROM java:8
VOLUME /usr/local/jenkins_home/workspace/jenkinsdemo/work
ADD jenkinsdemo-1.0.0.jar jenkinsdemo.jar
RUN bash -c 'touch /jenkinsdemo.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/jenkinsdemo.jar"]
2.shell腳本,根據https://blog.csdn.net/wangshouhan/article/details/80332951改動得到如下腳本
#!/bin/bash
#操作/項目路徑(Dockerfile存放的路勁)
BASE_PATH=/usr/local/jenkins_home/workspace/jenkinsdemo/work
#jenkins工作空間
SOURCE_PATH=/usr/local/jenkins_home/workspace
#docker 鏡像/容器名字或者jar名字 這裏都命名爲這個
SERVER_NAME=jenkinsdemo
JAR_NAME=jenkinsdemo-1.0.0
#獲取容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#獲取鏡像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
# 備份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "$SERVER_NAME.jar 備份..."
cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "備份 $JAR_NAME.jar 完成"
else
echo "$BASE_PATH/$JAR_NAME.jar不存在,跳過備份"
fi
}
# 最新構建代碼 移動到項目環境
function transfer(){
echo "最新構建代碼 $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar 遷移至 $BASE_PATH"
cp $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar $BASE_PATH/
echo "遷移完成"
}
# 修改訪問權限
function changemod(){
echo "修改 $BASE_PATH/$JAR_NAME.jar 的訪問權限"
cd $BASE_PATH
chmod 777 $JAR_NAME.jar
echo "修改訪問權限完成"
}
# 構建docker鏡像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME鏡像,IID=$IID"
echo "停止容器docker stop $CID"
docker stop $CID
echo "刪除容器 docker rm $CID"
docker rm $CID
echo "刪除鏡像 docker rmi $SERVER_NAME"
docker rmi $SERVER_NAME
echo "構建鏡像 docker build -t="$SERVER_NAME" ."
cd $BASE_PATH
docker build -t="$SERVER_NAME" .
else
echo "不存在$SERVER_NAME鏡像,開始構建鏡像 docker build -t $SERVER_NAME . "
cd $BASE_PATH
docker build -t="$SERVER_NAME" .
fi
}
# 運行docker容器
function run(){
backup
transfer
changemod
build
echo "docker run創建容器... docker run -d --name=$SERVER_NAME -p 8002:8082 -v $BASE_PATH:$BASE_PATH jenkinsdemo:latest"
docker run -d --name=$SERVER_NAME -p 8002:8002 -v $BASE_PATH:$BASE_PATH jenkinsdemo:latest
echo "$SERVER_NAME容器創建完成"
}
#入口
run
3.保存,返回
4.然後修改代碼,push到gitee,在系統中會產生鏡像和容器,
5.瀏覽器效果
大吉大利!完工!喜歡的可以轉發,有疑問或者有不足的地方歡迎大家留言,或者在我的公衆號上留言,微信搜索:forkroad