下面是一个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,我的jenkins装在了192.168.12.240,即docker01
3.编写项目代码,我的springboot项目很简单,只有一个hello接口
@RestController public class HelloController { @GetMapping("/") public String hello(){ return "hello world!"; } }
4.代码上传至github
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 1. 服务名: docker stack deploy 指定工程名称+"_"+docker-compose.yml的子服务名,所以我的服务名是: test_web,能看到说明已经正常启动
浏览器访问 192.168.12.240:8088(docker01:8088):
访问成功,jenkins一键部署项目完成!