Tomcat+ jenkins +mvn+gitee+docker 完整教程


  教程講述的是在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

  1. 鏈接名:可按自己想法填寫

  2. Gitee 域名 URL: https://gitee.com,或者按gitee官方提示 (碼雲私有化客戶輸入部署的域名)

  3. 證書令牌:
    3.1 點擊新建3.2 訪問藍色背景處的鏈接,在gitee上獲取私人令牌3.4 點擊提交,系統會生成一串字符,複製過來填進去就OK了,ID和描述可按自己需求填寫,沒有什麼限制條件

  4. 點擊測試鏈接,完美的配置成功

  5. 保存返回

###四、jenkins新建mvn項目並配置
新建mvn項目
1.源碼配置
image.png

參數說明

    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中,如下圖所示webhooks配置
3.構建環境構建環境
4.準備構建準備構建
5.構建設置和構建後操作image.png
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

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