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脚本

#!/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这里就不多说了吧…自寻教程

首先我们新建一个任务

在这里插入图片描述

配置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实现了服务一键部署。
当然还有很多地方需要优化,比如版本号怎么管理,环境变量是不是可以统一配置等等。
而且思路也有局限,如果有更好方式的朋友,非常欢迎提出建议。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Docker Compose 部署 Jenkins 可以简化 Jenkins 的安装和配置过程,提高部署效率和可维护性。 以下是部署 JenkinsDocker Compose 文件示例: ``` version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - "808:808" - "50000:50000" volumes: - jenkins_home:/var/jenkins_home environment: - JAVA_OPTS=-Djenkins.install.runSetupWizard=false networks: - jenkins_network volumes: jenkins_home: networks: jenkins_network: ``` 在该示例中,我们定义了一个名为 `jenkins` 的服务,使用了 Jenkins 官方提供的 `jenkins/jenkins:lts` 镜像。我们将 Jenkins 的 808 和 50000 端口映射到主机的同名端口,以便我们可以通过浏览器访问 Jenkins。我们还将 Jenkins 的数据目录 `/var/jenkins_home` 挂载到了 Docker 卷 `jenkins_home` 中,以便我们可以在容器重启后保留 Jenkins 的配置和数据。我们还设置了一个环境变量 `JAVA_OPTS=-Djenkins.install.runSetupWizard=false`,以禁用 Jenkins 的安装向导。最后,我们将 Jenkins 容器连接到一个名为 `jenkins_network` 的 Docker 网络中。 要部署 Jenkins,只需在包含上述 Docker Compose 文件的目录中运行以下命令: ``` docker-compose up -d ``` 该命令将启动 Jenkins 容器,并将其连接到 `jenkins_network` 网络中。我们可以通过浏览器访问 `http://localhost:808` 来访问 Jenkins。在第一次访问时,我们需要输入初始管理员密码,该密码可以在容器日志中找到。输入密码后,我们可以按照向导完成 Jenkins 的配置。 希望这个回答对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

碩果

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

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

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

打赏作者

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

抵扣说明:

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

余额充值