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 域名 URL: https://gitee.com,或者按gitee官方提示 (碼雲私有化客戶輸入部署的域名)
-
證書令牌: 3.1 點選新建3.2 訪問藍色背景處的連結,在gitee上獲取私人令牌3.4 點選提交,系統會生成一串字元,複製過來填進去就OK了,ID和描述可按自己需求填寫,沒有什麼限制條件
-
點選測試連結,完美的配置成功
-
儲存返回
###四、jenkins新建mvn專案並配置
引數說明
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"]
#!/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.瀏覽器效果
大吉大利,完工。