一 自动化构建部署的必要性
- 现如今,自动化构建部署在研发流程中,已经占据了很重要的位置。除非你们公司还是单体架构,每次只需要构建一个大单体系统即可,那自动化构建可能对你们的用处不大。
- 但是,目前大部分的互联网公司或者传统转型互联网的公司,几乎都会使用微服务架构,微服务架构的微服务少的十几个,多的几十个或者几百个都很正常。如果这么多的微服务,都靠人工去构建部署,效率得多低,可想而知。所以我们都会考虑通过自动化构建部署手段去做这些重复劳动,对于有些大厂,可能会自研一些自动化部署的系统。而对于大部分公司,几乎都会通过Jenkins和Jenkins的一些插件来实现自动化部署。
- 而且,这么多的微服务,如果靠运维去管理这些服务,工作量也会很大,所以,目前大部分互联网公司都会用上k8s。
- 我们这篇文章不会介绍如何安装k8s,但是会介绍如何通过Jenkins流水线自动化构建部署前后端应用到k8s。
二 依赖的Jenkins插件
- Jackson 2 API v2.11.0
- Kubernetes v1.21.3
- Kubernetes Client API v4.6.3-1
- Kubernetes Credentials v0.5.0
- Kubernetes Continuous Deploy v2.1.2
- Last Changes Plugin(最新版本插件即可)
- Pipeline Utility Steps(最新版本插件即可)
- Docker Pipeline(最新版本插件即可)
如果遇到一些版本冲突,大概率是Jackson2API造成的,调整版本也许即可解决。
三 Jenkins流水线构建流程如下
流水线的流程如下:
-> Gitlab配置Jenkins钩子
-> 触发Jenkins流水线构建
-> 拉取代码
-> 编译
-> 打镜像
-> push镜像
-> 发布到开发环境k8s
-> 发送钉钉消息通知
流水线groovy脚本如下:
vars/bootCD.groovy
1 | // spring boot项目标准化构建及部署 |
Jenkins配置流水线lib
代码中配置Jenkinsfile
直接在项目的根目录下创建Jenkinsfile,如下:
1 | library 'mafgwo-library@master' |
代码中配置Dockerfile
Dockerfile放在模块下的main/docker/Dockerfile,如下:
1 | FROM xxxxx.com/openjdk:8 |
代码中配置k8s的yaml文件
根目录下增加目录 kubernetes,在该目录下,增加k8s的yaml文件,如下:
1 | apiVersion: apps/v1 |
Jenkins中创建流水线任务
新增任务选择流水线
关键配置:
1 选择不允许并发构建
2 配置gitlab钩子:Build when a change is pushed to GitLab. GitLab webhook URL: xxxx
3 配置scm如下
依赖其他组件部署文档如下:
k8s的部署请参考文章:https://mafgwo.cn/2021/01/22/7307_kubeadm%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85k8s%E9%9B%86%E7%BE%A4/
Jenkins的部署请参考文章:https://mafgwo.cn/2021/01/31/2012_Jenkins%E7%9A%84Docker%E6%96%B9%E5%BC%8F%E9%83%A8%E7%BD%B2/
harbor仓库部署请参考文章:https://mafgwo.cn/2021/02/01/2013_Docker%E4%BB%93%E5%BA%93Harbor%E9%83%A8%E7%BD%B2/
Gitlab仓库部署请参考官方文档:https://about.gitlab.com/install/