转载

jenkins + docker-compose 实现一键构建部署

上一章说到利用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

复制代码

贴上app.sh脚本(该脚本用来重启java服务)

#!/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

复制代码

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

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

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

jenkins 配置

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

首先我们新建一个任务

jenkins + docker-compose 实现一键构建部署

配置git,拉取项目

jenkins + docker-compose 实现一键构建部署

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

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

jenkins + docker-compose 实现一键构建部署

command中,我们利用docker-compose命令来重启容器。

source /etc/profile
cd /data/docker
docker-compose stop java-demo-one
docker-compose rm -f java-demo-one
docker-compose up -d java-demo-one
复制代码

配置另外一个项目只要改下项目的名称即可 整个流程下来就是:

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

总结

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

原文  https://juejin.im/post/5e6735bbf265da5769711ce4
正文到此结束
Loading...