jenkins + docker-compose 实现一键构建部署
2020/3/10 17:01:21
本文主要是介绍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这里就不多说了吧.....自寻教程
首先我们新建一个任务
配置git,拉取项目
触发构建后发布到远程服务器
也就是我们需要用docker容器部署的服务器,最后目的就是把我们构建好的jar包,推送到docker服务器对应的java项目路径,如java-demo-one-1.0.0.jar,需要推送到/data/java-demo-one目录下,不会操作的,请先了解jenkins如何构建发布java。
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实现了服务一键部署。 当然还有很多地方需要优化,比如版本号怎么管理,环境变量是不是可以统一配置等等。 而且思路也有局限,如果有更好方式的朋友,非常欢迎提出建议。
这篇关于jenkins + docker-compose 实现一键构建部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程