前言
使用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就能夠看到結果了...