当前位置:   article > 正文

jenkins + docker-compose 实现一键构建部署_docker compose jenkins单个服务部署

docker compose jenkins单个服务部署

前言

上一章说到利用docker-compose一键部署redis,mysql和java服务。本章我们要实现的,就是通过jenkins构建项目,在docker容器部署的自动化功能。

配置

docker-compose

首先配置好docker-compose.yml文件,前提当然是要先安装好docker以及docker-compose,可以参考我上一篇文章 docker-compose 一键安装redis和Mysql,部署java

下面我直接贴上代码。(这里我们配置两个java项目)

version: '3'
services:
    java-demo-one:
    	## jdk镜像
        image: ascdc/jdk8
        ## 容器名字
        container_name: java-demo-one
        ports:
          - "8083:8083"
        ## 挂载
        volumes:
        	##这是我们要启动的jar包
            - /data/java-demo-one/java-demo-one-1.0.0.jar:/data/java-demo-one-1.0.0.jar
            ##这是服务启动脚本,代码见下面
            - /data/docker/app.sh:/data/app.sh
            ##日志输出,具体输出位置可以在app.sh指定,加了这个配置我们到时就能在/data/java-demo-one/logs目录下查看日志
            - /data/java-demo-one/logs:/logs/java-demo-one/
        ## 容器启动脚本,app.sh输入三个参数,restart:重启,java-demo-one:项目名称,1.0.0:jar包版本号,则jar包名称为java-demo-one-1.0.0.jar
        entrypoint: /data/app.sh restart java-demo-one 1.0.0
        ##环境变量
        environment:
            - TZ=Asia/Shanghai
    java-demo-two:
    	## jdk镜像
        image: ascdc/jdk8
        ## 容器名字
        container_name: java-demo-two
        ports:
          - "8083:8083"
        ## 挂载
        volumes:
        	##这是我们要启动的jar包
            - /data/java-demo-two/java-demo-two-1.0.0.jar:/data/java-demo-two-1.0.0.jar
            ##这是服务启动脚本,代码见下面
            - /data/docker/app.sh:/data/app.sh
            ##日志输出,具体输出位置可以在app.sh指定,加了这个配置我们到时就能在/data/java-demo-two/logs目录下查看日志
            - /data/java-demo-two/logs:/logs/java-demo-two/
        ## 容器启动脚本,app.sh输入三个参数,restart:重启,java-demo-two:项目名称,1.0.0:jar包版本号,则jar包名称为java-demo-two-1.0.0.jar
        entrypoint: /data/app.sh restart java-demo-two 1.0.0
        ##环境变量
        environment:
            - TZ=Asia/Shanghai

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

贴上app.sh脚本

#!/bin/bash
## jar包版本号
version=$3
day=$(date '+%Y-%m-%d')
##app名称,如java-demo-two、java-demo-one
appName=$2
if [ -z $appName ];then
    appName=`ls -t |grep .jar$ |head -n1`
fi

function start()
{
	count=`ps -ef |grep java|grep $appName|wc -l`
	if [ $count != 0 ];then
		echo "Maybe $appName is running, please check it..."
	else
		echo "The $appName is starting..."
		java -jar /data/$appName-$version.jar --spring.profiles.active=test -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G > /logs/$appName/$day.log 2>&1
	fi
}

function stop()
{
	appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
	if [ -z $appId ];then
	    echo "Maybe $appName not running, please check it..."
	else
        echo "The $appName is stopping..."
        kill -9 $appId
	fi
}

function restart()
{

	echo "The appName is $appName"
    stop
    for i in {5..1}
    do
        echo -n "$i "
        sleep 1
    done
    echo 0
    
    

    start
}

function backup() 
{
    # get backup version
    backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`
    
    # create backup dir
    if [ ! -d "backup" ];then
        mkdir backup
    fi
    
    # backup
    for i in ${backupApp[@]}
    do
        echo "backup" $i
        mv $i backup
    done
}

function status()
{
    appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`
	if [ -z $appId ] 
	then
	    echo -e "\033[31m Not running \033[0m" 
	else
	    echo -e "\033[32m Running [$appId] \033[0m" 
	fi
}


function usage()
{
    echo "Usage: $0 {start|stop|restart|status|stop -f}"
    echo "Example: $0 start"
    exit 1
}

case $1 in
	start)
	start;;

	stop)
	stop;;
	
	restart)
	restart;;
	
	status)
	status;;
	
	*)
	usage;;
esac

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103

我们根据上面配置的挂载路径,先把文件配置好,放到指定的路径

  • 在/data/docker目录下,保存docker-compose.yml和app.sh
  • 新建java项目目录,分别为/data/java-demo-one和/data/java-demo-two,然后在里面再新建一个logs文件夹用来存放日志。

到此,我们docker这边的配置已经搭建好了,下面我们来配置jenkins。

jenkins 配置

安装jenkins这里就不多说了吧…自寻教程

首先我们新建一个任务

在这里插入图片描述

配置git,拉取项目

在这里插入图片描述

触发构建后发布到远程服务器

也就是我们需要用docker容器部署的服务器,最后目的就是把我们构建好的jar包,推送到docker服务器对应的java项目路径,如java-demo-one-1.0.0.jar,需要推送到/data/java-demo-one目录下,不会操作的,请先了解jenkins如何构建发布java。
在这里插入图片描述

command中,我们利用docker-compose命令来重启容器。
整个流程下来就是:

  • jenkins构建代码,生成jar包
  • 发布jar包到指定的远程服务器的指定目录下
  • 利用命令,执行docker-compose指令,删除旧容器,运行新的容器。

总结

至此,我们已经实现了利用jenkins+docker-compose实现了服务一键部署。
当然还有很多地方需要优化,比如版本号怎么管理,环境变量是不是可以统一配置等等。
而且思路也有局限,如果有更好方式的朋友,非常欢迎提出建议。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/244985
推荐阅读
相关标签
  

闽ICP备14008679号