GitLab CI构建SpringBoot-2.3应用

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos
内容:所有原创文章分类和汇总 , 及配套源码 , 涉及JAVA、Docker、Kubernetes、DevOPS等;
关于GitLab CI在《体验SpringBoot(2.3)应用制作Docker镜像(官方方案)》一文中 , 咱们掌握了SpringBoot官方推荐的镜像构建方案 , 接下来要体验的是GitLab的CI能力 , 它负责把代码变成私有仓库中的镜像 , 咱们可以专心编码了;
GitLab CI的作用如下图 , 开发者提交代码到GitLab后 , 就会触发编译、构建、制作镜像、推送到仓库这些事情 , 然后K8S环境就能用上最新的镜像了:

GitLab CI构建SpringBoot-2.3应用

文章插图
 
本文内容【GitLab CI构建SpringBoot-2.3应用】本文继续坚持实战的风格 , 和大家一起完成以下操作:
  1. 准备一个SpringBoot-2.3应用;
  2. 编写GitLab的pipeline脚本;
  3. 提交代码触发pipeline脚本的工作;
  4. K8S环境使用最新镜像;
  5. 体验GitLab如何将最新镜像自动部署到K8S环境;
环境信息
  • GitLab:Community Edition 13.0.6
  • GilLab Runner:13.1.0
  • kubernetes:1.15.3
  • SpringBoot:2.3.0.RELEASE
  • JDK:1.8.0_121
  • Maven:3.3.9
  • Docker:19.03.8
  • 操作系统:centos linux release 7.8.2003
准备实战前需要您准备好以下环境:
  1. GitLab , 参考《群晖DS218+部署GitLab》
  2. 私有镜像仓库 , 参考《群晖DS218+部署Harbor(1.10.3)》
  3. GitLab Runner , 参考《GitLab Runner部署(kubernetes环境)》
  4. Kubernetes
SpringBoot应用源码本次实战用的是普通的SpringBoot工程 , 如果您不想写代码 , 整个系列的源码可在GitHub下载到 , 地址和链接信息如下表所示(
https://github.com/zq2599/blog_demos):
GitLab CI构建SpringBoot-2.3应用

文章插图
 
这个git项目中有多个文件夹 , 本章的应用在dockerlayerdemo文件夹下 , 如下图红框所示:
GitLab CI构建SpringBoot-2.3应用

文章插图
 
实战操作
  • 创建名为dockerlayerdemo的SpringBoot项目 , SpringBoot版本号为2.3.0.RELEASE , pom.xml内容如下:
<?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.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>dockerlayerdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dockerlayerdemo</name> <description>Demo project for Spring Boot layer docker image</description> <properties><java.version>1.8</java.version> </properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency> </dependencies> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.0.RELEASE</version><configuration><layers><enabled>true</enabled></layers></configuration></plugin></plugins> </build></project>
  • java代码并非重点 , 在Application类中加了个http接口:
package com.bolingcavalry.dockerlayerdemo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Date;@SpringBootApplication@RestControllerpublic class DockerlayerdemoApplication { public static void main(String[] args) {SpringApplication.run(DockerlayerdemoApplication.class, args); } @RequestMapping(value = https://www.isolves.com/sh/kj/2020-06-26/"/hello") public String hello(){return "hello " + new Date(); }}


推荐阅读