Jenkins构建镜像并发布更新至Kubernetes

本次没有使用Pipeline,通过页面配置实现,可根据页面配置转换为Pipeline;

最终实现效果:

1、配置gitlab webhook监听merge请求,触发jenkins job,同时jenkins job仅对master分支做响应(其他分支的merge请求自动忽略);
2、编译代码并生成Docker images;
3、推送images到阿里云容器仓库
4、触发阿里云k8s集群中的pod更新

所用插件及版本

Kubernetes Continuous Deploy Plugin 2.3.0
Jackson 2 API Plugin 2.11.2(非官方版,有bug,见文章最后解Bug部分)
docker-build-step 2.5

Webhook的配置

Jenkins部分

配置Build when a change is pushed to GitLab 部分

Gitlab部分

项目-> 设置 -> webhook

编译代码并生成Docker images

给k8s yaml文件配置环境变量

这里定义的环境变量可以传送到yaml文件中引用;

image

编译代码

这部分按照自己的需求结合Dockerfile做即可

生成镜像

推送Image到阿里云容器仓库

触发阿里云k8s集群更新

添加集群凭据

可以使用Enter directly直接将config内容放进去

配置k8s的更新

==========================

页面配置结束,下面解插件bug

Kubernetes Continuous Deploy Plugin

Bug问题讨论:

任务台输出:
exception=Class not found: io.kubernetes.client.openapi.models.V1Service

解决方案:

拉取github代码:
git clone https://github.com/jenkinsci/jackson2-api-plugin
git checkout jackson2-api-2.11.2
删除
https://github.com/jenkinsci/jackson2-api-plugin/commit/cbbdf36843505efd5d2d7cd4769018e4cc09f450
这次提交的内容

在maven 的setting.xml里面添加:

 <mirror>
      <mirrorOf>m.g.o-public</mirrorOf>
      <url>http://repo.jenkins-ci.org/public</url>
      <id>jenkins-ci.org</id>
      <name>Jenkins CI Public</name>
 </mirror>

执行mvn clean verify 打包
将编译好的hpi文件上传更新即可

2赞

个人觉得应该把整个实验步骤都写出来,让大家一起学习进步