1.前期准备

1.1 环境准备

搭建docker,搭建k8s集群,

搭建maven私服Nexus,

搭建Harbor,

搭建Jenkins,并且系统配置已经配置k8s云

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring


准备springCloud项目。

1.2 上传Maven仓库jar包到Nexus

参考之前的文章《Jenkins—批量上传Maven仓库jar包到Nexus》

2.SpringCloud项目框架

2.1Dockfile

用于构建docker镜像(每个需要构建的项目都需要配置,放在所在项目的根目录下)

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_02

2.2 pom文件

在root的pom文件添加以下内容

<!--默认使用Nexus私服,避免连接国外的Maven仓库下载 -->
	<repositories>
		<repository>
			<id>nexus_public</id>
			<url>http://Nexus的ip:端口/repository/上传的目录/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	<!--默认使用Nexus私服 -->
	<pluginRepositories>
		<pluginRepository>
			<id>nexus_public</id>
			<url>http://Nexus的ip:端口/repository/上传的目录/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_03

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
		<admin-server.version>2.1.2</admin-server.version>
		<docker.image.prefix>Harbor地址/项目名</docker.image.prefix>
		<docker.image.tag>${project.version}</docker.image.tag>
	</properties>

每个需要构建的项目下添加以下内容

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.9</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>package-push</id>
                        <phase>package</phase>
                        <goals>
                            <goal>push</goal>    <!--相当于docker的push命令-->
                        </goals>
                        <configuration>
                            <repository>${docker.image.prefix}/${project.artifactId}</repository><!--要push的镜像名,,镜像重命名,构建完成自push-->
                            <tag>${docker.image.tag}</tag><!--通过tag来区分每次构建的镜像 -->
                        </configuration>
                    </execution>

                </executions>
                <configuration>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <tag>${docker.image.tag}</tag>
                    <contextDirectory>${project.basedir}</contextDirectory>
                    <googleContainerRegistryEnabled>false</googleContainerRegistryEnabled>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.3 k8s文件

每个需要构建的项目都需配置

在根目录下统一管理:

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_04


java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_05

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_06

2.4 Jenkinsfile文件

流水线项目才会用到

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_07


java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_08

2.5 eureka端口

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_09

3.Maven方式部署(方案一)

3.1 新建maven项目

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_10


java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_11

3.2 General设置

只保留一个历史构建

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_12

3.3 源码管理

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_13

3.4 构建前执行的步骤

获取jenkins内置变量作为docker镜像的tag

这里只是在构建前打印出来,方便观察

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_14


点击“可用的环境变量列表”,可查询到jenkins所有的内置变量

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_15

3.5 构建

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_16

clean package -Ddocker.image.tag=$BUILD_NUMBER

项目打jar包时,自动构建镜像,镜像的tag替换为jenkins内置变量,构建完成自动推送到Harbor(pom文件已经配置)

3.6 构建成功后的操作,k8s的部署操作

按照服务的启动顺序,依次添加服务对应yaml文件

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_17

3.7 项目构建

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_18

4.流水线(方案二,推荐使用)

脚本都是写在Jenkinsfile里,便于项目的迁移。

可以看到流水线各个阶段的执行状态,如下

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_19

4.1 项目构建

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_20

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_21

4.2 General设置

只保留一个历史构建

java jenkins springboot 启动脚本 jenkins部署springcloud项目_docker_22


构建触发器,高级项目选项可以不填

4.3 流水线

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_23

4.4 流水线文件中的内容

流水线文件格式:

顶层是pipeline

tools引入环境工具类

接着是stages

stage代表流水线中每一环的作业内容

steps中的操作内容通过流水线语法片段生成器生成

java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_24

4.5 流水线脚本生成

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_25


java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_26


java jenkins springboot 启动脚本 jenkins部署springcloud项目_spring_27


按照服务的启动顺序,依次生成部署到K8s的流水线脚本

java jenkins springboot 启动脚本 jenkins部署springcloud项目_上传_28