1. 程式人生 > >centos 7 Tomcat+ jenkins +mvn+gitee+docker完整教程

centos 7 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上,此步驟省略。

###三、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"]
 #!/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.瀏覽器效果

大吉大利,完工。