前言
使用jenkins关联github发布springboot项目仍是很简单的,本篇文章介绍一下结合docker发布的流程。java
ps:本文的服务器是centos7
安装docker
yum install docker
安装完之后,须要将其设置开机启动git
systemctl start docker.service systemctl enable docker.service
而后使用中国的加速器,这样下载镜像的时候会快一些github
vi /etc/docker/daemon.json #添加后: { "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true }
从新启动dockerweb
systemctl restart docker
ps:jdk 和maven也是须要安装的,我这遍就不重复补充,具体能够看我以前的文章:
http://www.javashuo.com/article/p-rykrivuh-ee.htmlspring
springboot项目
1.pom.xmldocker
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.iamcrawler</groupId> <artifactId>docker-demo</artifactId> <version>latest</version> <name>docker-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <docker.image.prefix>springboot</docker.image.prefix> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>docker-demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins> </build> </project>
2.在目录src/main/docker下建立 Dockerfile 文件,Dockerfile 文件用来讲明如何来构建镜像。shell
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD docker-demo.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:apache
/tmp
的目录,因为 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp
做为工做目录。这个命令的效果是:在宿主机的/var/lib/docker
目录下建立一个临时文件并把它连接到容器中的/tmp
目录java.security.egd
的系统属性指向/dev/urandom
做为 ENTRYPOINT3.controllerjson
@RestController @RequestMapping("/docker") public class DockerDemoController { @GetMapping("/hello") public ResponseEntity demo(){ return ResponseEntity.ok("hello docker"); } }
这样 Spring Boot 项目添加 Docker 依赖就完成了。segmentfault
jenkins配置
jenkins咱们关联上本身的github地址后,选择执行shell
#!/bin/bash ##找出进程并关闭 pids=$(ps -ef | grep docker-demo.jar| awk '{print $2}') for pid in $pids do echo $pid kill -9 $pid done echo "进程$pid已被kill" ##打包 mvn clean install -Dmaven.test.skip=true echo "maven 执行完毕" cur=$(pwd) echo "当前路径$cur" cp $cur/target/docker-demo.jar /docker/jar/docker-demo.jar dockerpids=$(docker ps -f name="docker-demo" | awk '{print $1}' ) for dockerpid in $dockerpids do echo "被删除的容器 $dockerpid" docker stop $dockerpid docker rm $dockerpid done echo "容器已删除完毕!" ipids=$(docker images | grep "springboot/docker-demo" | awk '{print $3}') for imagesid in $ipids do echo "被删除的image $imagesid" docker rmi $imagesid done echo "旧的docker docker-demo 容器和镜像已删除" mvn clean package -Dmaven.test.skip=true docker:build echo "docker打包完成" docker run -d --name="docker-demo" -p 7779:7779 springboot/docker-demo echo "启动完毕"
此时咱们访问www.iamcrawler.cn:7779/docker/hello就能够看到结果了...