项目部署(四、docker安装的Jenkins部署springboot和tomcat项目)
基础环境准备
docker安装jenkins(自行百度)
安装jdk,git,maven
插件管理
安装相关SSH的插件,因为jenkins是安装在docker容器里面的,需要通过SSH连接到宿主上
添加凭据
添加宿主服务器连接的登录账户和密码
这里类似配置git的凭证,通过凭证可以在宿主服务器中进行操作
配置宿主服务器的连接IP和端口(SSH默认端口是22)
打包步骤
1.前面的拉去git,maven打包等步骤不变
2.在maven构建完成后通过ssh编写脚本
3.TOMCAT脚本
docker安装tomcat(本地使用的是tomcat8 jdk8)
docker pull tomcat:8.5.54-jdk8-openjdk
xhell脚本
#===================================================================================== #=================================定义初始化变量====================================== #===================================================================================== #操作/项目路径(文件挂载存放的路径) BASE_PATH=/usr/local/kemuch/his-8081 # jenkins构建好的源jar路径 SOURCE_PATH=/var/jenkins_home/workspace #【docker 镜像】【docker容器】【jenkins的workspace下的项目名称】 SERVER_NAME=his-8081 # 原始war包名称 SOURCE_WAR_NAME=chss-server.war # 发布war包名称 WAR_NAME=his # 发布端口号 PORT=8081 # docker安装的tomcat版本 TOMCAT=tomcat:8.5.54-jdk8-openjdk #容器id [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID] [无论容器启动与否,都获取到] CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}') #jenkins容器id JID=$(docker ps -a | grep -w "jenkins" | awk '{print $1}') DATE=`date +%Y%m%d%H%M%S` #===================================================================================== #============================ 创建BASE_PATH ================================ #===================================================================================== function makedir(){ if [ ! -d "$BASE_PATH" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH 不存在,创建……" mkdir -p $BASE_PATH echo "=========================>>>>>>>>>>>$BASE_PATH 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH 已存在,跳过创建" fi if [ ! -d "$BASE_PATH/backup" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH/backup 不存在,创建……" mkdir -p $BASE_PATH/backup echo "=========================>>>>>>>>>>>$BASE_PATH/backup 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH/backup 已存在,跳过创建" fi if [ ! -d "$BASE_PATH/webapps" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 不存在,创建……" mkdir -p $BASE_PATH/webapps echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH/webapps 已存在,跳过创建" fi if [ ! -d "$BASE_PATH/logs" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH/logs 不存在,创建……" mkdir -p $BASE_PATH/logs echo "=========================>>>>>>>>>>>$BASE_PATH/logs 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH/logs 已存在,跳过创建" fi } #===================================================================================== #============================对原本已存在的war进行备份================================ #===================================================================================== # 备份 function backup(){ if [ -f "$BASE_PATH/webapps/$WAR_NAME.war" ]; then echo "=========================>>>>>>>$WAR_NAME.war 备份..." mv $BASE_PATH/webapps/$WAR_NAME.war $BASE_PATH/backup/$WAR_NAME-$DATE.war echo "=========================>>>>>>>备份老的 $WAR_NAME.war 完成" else echo "=========================>>>>>>>老的$BASE_PATH/webapps/$WAR_NAME.war不存在,跳过备份" fi } #===================================================================================== #=========================移动最新源war包到docker挂载目录所在目录========================= #===================================================================================== # 查找源jar文件名,进行重命名,最后将源文件移动到项目环境 function transfer(){ echo "=========================>>>>>>>源文件完整地址为 $SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME" echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME 迁移至 $BASE_PATH" docker cp $JID:$SOURCE_PATH/$SERVER_NAME/target/$SOURCE_WAR_NAME $BASE_PATH/webapps/$WAR_NAME.war echo "=========================>>>>>>>迁移完成Success" echo "=========================>>>>>>>开始删除挂载目录webapps下的程序" rm -rf $BASE_PATH/webapps/$WAR_NAME } # 构建容器 function build(){ #无论容器存在与否,都停止原容器服务,并移除原容器服务 echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID" docker rm $CID echo "=========================>>>>>>>开始构建容器" docker run -d --name=$SERVER_NAME -p $PORT:8080 -v $BASE_PATH/webapps/:/usr/local/tomcat/webapps/ -v $BASE_PATH/logs/:/usr/local/tomcat/logs/ $TOMCAT } #===================================================================================== #==============================运行docker容器,启动服务=============================== #===================================================================================== # 运行docker容器 function run(){ makedir backup transfer build } #入口 run
4.springboot脚本
#===================================================================================== #=================================定义初始化变量====================================== #===================================================================================== #操作/项目路径(Dockerfile存放的路劲) BASE_PATH=/usr/local/kemuch/transmit # jenkins构建好的源jar路径 SOURCE_PATH=/var/jenkins_home/workspace #【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】 #这里都以这个命名[微服务的话,每个服务都以ms-springboot这种格式命名] #注意统一名称!!!!! SERVER_NAME=transmit #容器id [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID] [无论容器启动与否,都获取到] CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}') #镜像id [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID] IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}') #jenkins容器id JID=$(docker ps -a | grep -w "gracious_hamilton" | awk '{print $1}') #源jar完整地址 [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径] #例如:/apps/Devops/jenkins/workspace/springboot/target/springboot-0.0.1-SNAPSHOT.jar SOURCE_JAR_PATH=$SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar DATE=`date +%Y%m%d%H%M%S` #===================================================================================== #============================对原本已存在的jar进行备份================================ #===================================================================================== function makedir(){ if [ ! -d "$BASE_PATH" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH 不存在,创建……" mkdir -p $BASE_PATH echo "=========================>>>>>>>>>>>$BASE_PATH 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH 已存在,跳过创建" fi if [ ! -d "$BASE_PATH/backup" ]; then echo "=========================>>>>>>>>>>>$BASE_PATH/backup 不存在,创建……" mkdir -p $BASE_PATH/backup echo "=========================>>>>>>>>>>>$BASE_PATH/backup 创建成功" else echo "=========================>>>>>>>>>>>$BASE_PATH/backup 已存在,跳过创建" fi } # 备份 function backup(){ if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then echo "=========================>>>>>>>$SERVER_NAME.jar 备份..." mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成" else echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份" fi } #===================================================================================== #============================ 创建BASE_PATH ================================ #===================================================================================== #===================================================================================== #============================ 创建Dockerfile文件 ================================ #===================================================================================== function createfile(){ if [ ! -f "$BASE_PATH/Dockerfile" ]; then echo "======================>>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 不存在,创建……" cd $BASE_PATH echo "FROM java:8" > Dockerfile echo "MAINTAINER wangkang" >> Dockerfile echo "VOLUME /workspace" >> Dockerfile echo "ADD $SERVER_NAME.jar /$SERVER_NAME.jar" >> Dockerfile echo "ENTRYPOINT [\"java\",\"-Djava.security.egd=file:/dev/./urandom\",\"-jar\",\"/$SERVER_NAME.jar\"]" >>Dockerfile echo "========================>>>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 创建成功" else echo "=======================>>>>>>>>>>>>>>$BASE_PATH/Dockerfile 已存在,跳过创建" fi } #===================================================================================== #=========================移动最新源jar包到Dockerfile所在目录========================= #===================================================================================== # 查找源jar文件名,进行重命名,最后将源文件移动到项目环境 function transfer(){ echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH" echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH" docker cp $JID:$SOURCE_JAR_PATH $BASE_PATH echo "=========================>>>>>>>迁移完成Success" } #===================================================================================== #==================================构建最新镜像======================================= #===================================================================================== # 构建docker镜像 function build(){ #无论镜像存在与否,都停止原容器服务,并移除原容器服务 echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID" docker rm $CID #无论如何,都去构建新的镜像 if [ -n "$IID" ]; then echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID" docker rmi $IID echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->" else echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->" fi } #===================================================================================== #==============================运行docker容器,启动服务=============================== #===================================================================================== # 运行docker容器 function run(){ makedir backup createfile transfer build docker run --name $SERVER_NAME -itd -p 8700:8700 $SERVER_NAME } #入口 run
根据启动项目,填入实现的脚本代码,注意定义初始化变量