搭建大型分布式服务(二十七)如何通过Coding流水线CI/CD将SpringBoot服务部署到TKE容器集群

系列文章目录



前言

企业上云是比较热门的话题也是趋势,越来越多的企业放弃传统IDC,选择上云。因为把服务上云,一来可以降低企业技术开发成本,二来服务升级扩容灵活,减少运维成本。那么在容器集群的开发模式是怎样的呢?如何做到一键发布?我们来揭开它神秘的面纱。
在这里插入图片描述


一、本文要点

接前文,我们演示过怎样把一个nginx服务部署到容器集群,然后了解CI/CD的前世今生,发现nginx部署流程还是挺繁琐的。那么有没有更加便捷的方式呢?答案是有的。本文通过部署一个SringBoot服务来体验便捷的交付模式。
系列文章完整目录

  • 腾讯云容器集群
  • TKE容器集群服务部署
  • Coding流水线
  • 部署SringBoot服务到容器集群
  • 容器服务动态扩容和弹性伸缩

二、开发环境

  • jdk 1.8
  • maven 3.6.2
  • springboot 2.4.3
  • idea 2020
  • 腾讯云TKE
  • 腾讯云TCR
  • Coding流水线

三、编写SpringBoot服务

1、创建工程
使用早期文章的脚手架项目,在工蜂上创建一个SpringBoot book-service图书服务,模拟真实应用场景。

《搭建大型分布式服务(十八)Maven自定义项目脚手架》

2、镜像文件
在项目代码根目录编写Dockerfile文件,用于流水线制作容器镜像(可以替换合适的基础镜像)。

FROM ccr.ccs.tencentyun.com/xxx/jdk8
MAINTAINER hanyi hanyi@qq.com

WORKDIR /app
COPY ./target/*.jar /app.jar

ENV TZ='Asia/Shanghai'
ENV JAVA_OPTS="-server -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:./gclogs  -XX:+UseG1GC -Xms2048m -Xmx2048m "
ENV SPRING_EXT=" -Dspring.profiles.active=test "
ENV SERVER_PORT 8080
ENV LANG en_US.UTF-8

EXPOSE ${SERVER_PORT}

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom $SPRING_EXT -jar /app.jar " ]

三、容器镜像

1、创建镜像仓库
仓库参考《搭建大型分布式服务(二十五)如何将应用部署到TKE容器集群?》,新建一个个人TCR镜像仓库,用来存储book服务构建的镜像。(这里实际上也可以使用Coding自带的仓库,看个人使用习惯)
在这里插入图片描述
2、开通Coding
在刚才新建的仓库的【镜像构建】页,关联到Coding流水线。篇幅优先,省略开户和授权过程,有疑问的欢迎留意咨询。
在这里插入图片描述

3、容器集群授权
Coding关联到TKE容器集群,这步非常重要!设置后Coding才有权限去调度TKE容器集群。
在这里插入图片描述

四、Coding流水线

为什么不使用TCR里的交付流水线呢?因为交付流水线仅支持的能力有限,例如我们SpringBoot服务需要jdk、maven等环境去编译代码,自带的交付流水线难实现。而Coding支持公用构建机和自建构建机,方便我们拉各种依赖和各种灵活配置调度流水线和流程插件。

1、新建Coding项目
跳转到Coding页面后,首先创建一个项目。Coding的管理一般是按项目划分的,在一个项目内可以管理各个服务的流水线和发布清单。例如这里创建一个天空一号DevOps项目。
在这里插入图片描述
2、关联代码
在代码仓库页关联我们之前创建book-service的代码仓库。Coding支持工蜂、gitlab、GitHub等仓库,按需选择,这里我使用的是腾讯云的工蜂。
在这里插入图片描述

3、构建计划
在持续集成页面,创建构建计划,目的是构建镜像并推送到镜像仓库(里面有比较多插件可以支持很丰富的功能)。里面的预置模板非常多,可以根据实际情况来选择。由于我们之前是使用腾讯云TCR个人版仓库,所以这里选择这个。
在这里插入图片描述
4、流水线配置 根据实际情况选择代码仓库、集群、工作负载和构建生成的镜像名称。可以看到,这里的底层是一个Jenkins配置文件。点击完成,就可以唤起容器镜像构建进程了。
在这里插入图片描述
注意,自定生成的流水线并没有设置构建命令,所以要稍微增加一个。我这里使用maven,所以流水线增加以下流程。mvn clean package -Dmaven.test.skip=true -X -e
在这里插入图片描述
假如这时候你还没在TKE容器集群创建工作负载,怎么办呢?一、可以参考前文部署nginx服务时手工创建工作负载,也可以通过Coding-持续部署页,快速生成工作负载。参考步骤⑤。

5、持续部署-新建工作负载
(1)假设您还没有在腾讯云TKE容器集群创建工作负载,可以通过Coding来创建。在部署控制台-应用,创建book-service应用。
在这里插入图片描述
(2)关联到上文创建的项目,天空一号。
在这里插入图片描述
(3)回到持续部署-Kubernetes 应用部署,点击快速发布。
在这里插入图片描述
设置工作负载的名称,点击确认即可。当然这种只适合快速验证的场景,复杂些的业务还需要去自定义部署流程,编写manifest。
在这里插入图片描述
稍等一会即可在容器集群看到book-service工作负载
在这里插入图片描述
6、持续部署-自动发布流程
当步骤4配置好构建计划和流水线后可以自动构建镜像,所以这里我们配置自动触发部署的流程,更新容器服务镜像版本。
(1)回到部署控制台,编辑部署流程。
在这里插入图片描述
(2)在基础配置里增加镜像触发器,根据镜像tag名称触发部署流程。
在这里插入图片描述

五、发布验证

1、自动构建
代码提交后,自动触发持续集成中流水线镜像构建。

@RestController
public class IndexController {

    @Value("${spring.wellcome.msg:TestPage}")
    private String msg;

    /**
     * 测试页.
     */
    @GetMapping({"", "/", "index.*"})
    public String index() {
        return "Hello " + msg;
    }
}

在这里插入图片描述
2、自动部署
容器镜像构建完毕后,自动触发持续部署中预置的部署流程,更新容器工作负载的POD容器镜像版本,达到升级服务的目标。
在这里插入图片描述
3、验证一下
在这里插入图片描述

六、小结

至此,我们就成功使用Codeing流水线CI/CD来完成SpringBoot服务的升级啦,下一篇《搭建大型分布式服务(二十八)Serverless和服务编排

加我加群一起交流学习!更多干货下载、项目源码和大厂内推等着你

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值