自动/持续部署Docker 的tomcat web项目(二)

自动/持续部署Docker 的tomcat web项目(一)

本文阅读需要 shell 基础

安装jenkins

【记录】jenkins 安装及环境配置(一)

Jenkins环境配置

【记录】jenkins 安装及环境配置(二)

创建Jenkins任务

这里选择自由构建模式
在这里插入图片描述

源码拉取

源码管理选择 git,账号为git平台登录账号,分支根据实际进行修改
在这里插入图片描述

maven构建

在构建中选择 调用顶层Maven 目标
在这里插入图片描述
选择之前配置的maven环境,配置参考jenkins maven配置
在这里插入图片描述

SSH连接

安装 SSH 插件后才能看到ssh选项,安装SSH插件参考配置SSH连接服务器
在这里插入图片描述
使用之前配置好的 ssh 连接,如何创建参考Jenkins插件安装
在这里插入图片描述

一键构建

保存后,点击 立即构建 就会运行。
在这里插入图片描述

脚本自动/持续部署

以下为/work/project/warToTomcat.sh的脚本内容,根据提示更改后,进行调试直至成功

#!/bin/bash

#-----------使用说明-----------#
#Author: bai5775@outlook.com
#v1 2021.04.28
#1.备份war包
#2.停止、删除docker容器
#3.删除旧docker镜像
#4.创建Dockerfile文件
#5.构建新docker镜像
#6.运行docker容器

# 操作/项目路径(Dockerfile存放的路径)
BASE_PATH=/work/project
# 源war路径  
SOURCE_PATH=/mydata/jenkins_home/workspace/tomcat-demo/target  
# 打包后war名字
SERVER_NAME=sprintboot_tomcat_demo-0.0.1-SNAPSHOT
# docker 镜像/容器名字
DOCKER_NAME=demo
# 获取容器id
CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')
# 获取镜像id
IID=$(docker images | grep "$DOCKER_NAME" | awk '{print $3}')
# 获取时间
DATE=`date +%Y%m%d%H%M`
# 镜像构建作者标识
AUTHOR=bai5775@outlook.com
 
# 创建构建docker镜像文件
function createDockerfile() {
    echo "检测docker构建文件 $BASE_PATH/$DOCKER_NAME/Dockerfile 是否存在"
    if [ ! -f "$BASE_PATH/$DOCKER_NAME/Dockerfile" ]; then
        echo "from tomcat
MAINTAINER $AUTHOR
RUN rm -rf /usr/local/tomcat/webapps/*
COPY $DOCKER_NAME.war   /usr/local/tomcat/webapps
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" > $BASE_PATH/$DOCKER_NAME/Dockerfile
        echo "创建构建文件 $BASE_PATH/$DOCKER_NAME/Dockerfile 成功,内容为"
        cat $BASE_PATH/$DOCKER_NAME/Dockerfile
    else 
        echo "构建文件 $BASE_PATH/$DOCKER_NAME/Dockerfile 存在"
    fi
}

# 将最新的war包移动到项目环境
function transfer(){
    echo "检测项目文件夹$BASE_PATH/$DOCKER_NAME是否存在"
	if [ ! -d "$BASE_PATH/$DOCKER_NAME" ]; then
      	mkdir -p $BASE_PATH/$DOCKER_NAME
        echo "$BASE_PATH/$DOCKER_NAME文件夹创建完成"
    else
      	echo "$BASE_PATH/$DOCKER_NAME文件夹已经存在"
    fi

    echo "最新的war包 $SOURCE_PATH/$SERVER_NAME.war 迁移至项目路径 $BASE_PATH/$DOCKER_NAME ...."
    cp $SOURCE_PATH/$SERVER_NAME.war $BASE_PATH/$DOCKER_NAME
    mv $BASE_PATH/$DOCKER_NAME/$SERVER_NAME.war $BASE_PATH/$DOCKER_NAME/$DOCKER_NAME.war 
    echo "迁移完成"
}
 
# 备份原先的war包
function backup(){
	echo "检测项目文件夹$BASE_PATH/backup/$DOCKER_NAME是否存在"
	if [ ! -d "$BASE_PATH/backup/$DOCKER_NAME" ];then
      	mkdir -p $BASE_PATH/backup/$DOCKER_NAME
        echo "$BASE_PATH/backup/$DOCKER_NAME文件夹创建完成"
    else
      	echo "$BASE_PATH/backup/$DOCKER_NAME文件夹已经存在"
    fi
    
	if [ -f "$BASE_PATH/$DOCKER_NAME.war" ]; then
    	echo "$DOCKER_NAME.war 备份..."
        mv $BASE_PATH/$DOCKER_NAME.war $BASE_PATH/$DOCKER_NAME-$DATE.war
        mv $BASE_PATH/$DOCKER_NAME-$DATE.war $BASE_PATH/backup/$DOCKER_NAME
        echo "备份 $DOCKER_NAME.war 完成"
    else
    	echo "$BASE_PATH/$DOCKER_NAME.war不存在,跳过备份"
    fi
}
 
# 构建docker镜像
function build(){
	if [ -n "$IID" ]; then
		echo "存在$DOCKER_NAME镜像,IID=$IID"
        if [ -n "$CID" ]; then
			echo "存在正在运行的$DOCKER_NAME容器,CID=$CID"
	        docker stop $DOCKER_NAME
            docker rm $DOCKER_NAME
			echo "停止并删除$DOCKER_NAME容器,CID=$CID"
    	fi
	    docker rmi $DOCKER_NAME
        echo "删除docker $DOCKER_NAME镜像"
	fi
	
	cd $BASE_PATH/$DOCKER_NAME
	echo "进入$BASE_PATH/$DOCKER_NAME目录,开始构建镜像"
	docker build -t $DOCKER_NAME .
	echo "构建镜像完成"
}
 
# 运行docker容器
function run(){
	docker run --name $DOCKER_NAME -d -p 8082:8080 $DOCKER_NAME
	echo "$DOCKER_NAME容器 运行完成"
	echo "检测运行情况"
	CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print $1}')
	if [ -n "$CID" ]; then
		echo "容器$DOCKER_NAME 运行成功"
	else
		echo "容器$DOCKER_NAME 运行失败"
	fi
}

function main(){
	backup
	transfer
    createDockerfile
	build
    run
}
 
# 入口
main
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鳄鱼儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值