1.前期准备
1.1 环境准备
搭建docker,搭建k8s集群,
搭建maven私服Nexus,
搭建Harbor,
搭建Jenkins,并且系统配置已经配置k8s云
准备springCloud项目。
1.2 上传Maven仓库jar包到Nexus
参考之前的文章《Jenkins—批量上传Maven仓库jar包到Nexus》
2.SpringCloud项目框架
2.1Dockfile
用于构建docker镜像(每个需要构建的项目都需要配置,放在所在项目的根目录下)
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>
<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文件
每个需要构建的项目都需配置
在根目录下统一管理:
2.4 Jenkinsfile文件
流水线项目才会用到
2.5 eureka端口
3.Maven方式部署(方案一)
3.1 新建maven项目
3.2 General设置
只保留一个历史构建
3.3 源码管理
3.4 构建前执行的步骤
获取jenkins内置变量作为docker镜像的tag
这里只是在构建前打印出来,方便观察
点击“可用的环境变量列表”,可查询到jenkins所有的内置变量
3.5 构建
clean package -Ddocker.image.tag=$BUILD_NUMBER
项目打jar包时,自动构建镜像,镜像的tag替换为jenkins内置变量,构建完成自动推送到Harbor(pom文件已经配置)
3.6 构建成功后的操作,k8s的部署操作
按照服务的启动顺序,依次添加服务对应yaml文件
3.7 项目构建
4.流水线(方案二,推荐使用)
脚本都是写在Jenkinsfile里,便于项目的迁移。
可以看到流水线各个阶段的执行状态,如下
4.1 项目构建
4.2 General设置
只保留一个历史构建
构建触发器,高级项目选项可以不填
4.3 流水线
4.4 流水线文件中的内容
流水线文件格式:
顶层是pipeline
tools引入环境工具类
接着是stages
stage代表流水线中每一环的作业内容
steps中的操作内容通过流水线语法片段生成器生成
4.5 流水线脚本生成
按照服务的启动顺序,依次生成部署到K8s的流水线脚本