jenkins + docker stack + springboot + github 集成部署

       我们每次修改代码后,需要部署到生产环境时,都要经历编译、拷贝jar包、生成镜像、启动服务这些繁琐的步骤,尤其是当我们的生产环境以集群方式部署时,还要将jar拷贝到不同的主机上,然后分别构建镜像,这些繁琐而重复的工作总是让我们不胜其烦,而持续集成工具--jenkins,可以为我们完成上面的工作

        提前在jenkins构建好项目后,然后只需轻轻点一下构建按钮,jenkins将自动拉取最新的代码,然后自动完成上面的步骤,实现自动化部署

 

下面是一个jenkins + docker stack + springboot + github 集成部署的实战例子:

1.安装docker swarm,我搭建的环境如下

主机名称

 ip

 节点性质

docker01

 192.168.12.240

 manager

docker02

192.168.12.241

worker

docker03

192.168.12.242

worker

 

2.安装jenkins,安装并配置插件git、jdk、maven,具体可参考https://blog.youkuaiyun.com/u010021282/article/details/102600681。我的jenkins装在了192.168.12.240,即docker01

 

3.编写项目代码,我的springboot项目很简单,只有一个hello接口

@RestController

public class HelloController {

    @GetMapping("/")

    public String hello(){

       return "hello world!";

    }

}

 

4.代码上传至github :https://github.com/blueiiii/web.git

 

5.在docker01,docker02,docker03,搭建好docker镜像目录,我的目录是/root/package,按照如下指令可完成构建

# 生成package目录
mkdir /root/package
vim docker-compose.yml

docker-compose.yml如下

version: "3"
services:
  #注册中心
  web:
    build:
      context: ./web
    image:  web:latest
    deploy:
      mode: replicated
      replicas: 1 
      #endpoint_mode: dnsrr
      restart_policy:
        #none、on-failure、any(默认)
        condition: any
        #尝试重启的等待时间默认为0
        delay: 10s
        #放弃之前尝试重新启动容器次数默认从不放弃
        max_attempts: 10
        #决定重新启动是否成功之前的等时间
        window: 120s
      resources:
        #资源限制
        limits:
          cpus: '0.95'
          memory: 2048M
        #资源保留
        reservations:
          cpus: '0.1'
          memory: 50M
    ports:
        - "8088:8088"

 

接着生成docker镜像上下文目录

# 生成web目录
mkdir /root/package/web
# 进入web目录
cd /root/package/web

#  编写Dockerfile

vim Dockerfile
Dockerfile如下:
#继承基础镜像
FROM openjdk:8
#维护者信息
MAINTAINER blue
#将本机docker目录临时文件挂载到镜像的/tmp目录[tomcat使用的默认目录-用于数据持久化]
VOLUME /tmp
#将本机Dockfile所在目录文件拷贝并重命名到镜像中
ADD spring-boot-web-0.0.1.jar app.jar
#暴露端口给容器
EXPOSE 8088
#启动容器时执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/.urandom","-Dfile.encoding=UTF-8","-server","-Xms128m","-Xmx128m","-Xss256k","-Xmn48m","-jar","/app.jar"]

docker02,docker03 如法炮制,也可以直接使用scp指令拷贝

 

6.进入jenkins页面,在系统配置中找到Publish Over SSH插件,进行配置(如果没有找到Public Over SSH,则需要去插件管理安装)

注意:

1.上面的key指的ssh的私钥,这里填了密码,应该就不用填私钥了

2.SSH servers的配置列表docker01,docker02,docker03都要配置,因为docker swarm服务要求每个实例上都要生成镜像

 

7.构建jenkin项目

新建item->输入项目名->Freestyle project->确定

源码管理使用git,填入github中的项目地址,然后点击下面添加按钮,输入giehub账号信息

输入giehub账号信息:

构建选择 Invoke top-level Maven targets,输入如下

继续增加构建步骤,选择 Send files or execute commands over SSH

Exec command的内容被挡住了,内容如下:

cd /root/package/web
docker rmi  web
docker build -t web .

解释一下,这里的作用就是在我们的项目编译成功后,自动将编译的jar包拷贝到docker01的、root/package/web目录,并生成镜像

docker02,docker03这里也要进行一样的配置

接着,添加构建后步骤,选择 Send build artifacts over SSH:

这里的作用是:启动docker stack,只需要在manager执行即可,所以这里只需要配置docker01

点击左下方的保存,项目配置完成

 

8.构建

点击build now,开始构建项目

构建完成后,进入docker01,查看服务是否正常启动:

docker service ls

服务名: docker stack deploy 指定工程名称+"_"+docker-compose.yml的子服务名,所以我的服务名是: test_web,能看到说明已经正常启动

浏览器访问 192.168.12.240:8088(docker01:8088):

访问成功,jenkins一键部署项目完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值