K8S + Jenkins 动态增减 slave节点自动部署VUE前端

2019年12月3日18:40:09 发表评论 885 views

本文中,自动构建部署过程大概完成了以下项目:

  • 1 代码提交至 git,触发 Jenkins 自动构建
  • 2 Jenkins 动态在 Kubernetes 集群创建 slave Pod
  • 3 slave Pod 拉取项目代码,执行编译,打包为镜像,推送至第三方镜像仓库
  • 4 slave Pod 执行 kubectl,更新项目的 Deployment 中的镜像版本为最新版本,自动部署完成

基础环境

IP地址 运行程序
172.20.2.10 k8s-master
172.20.2.11 k8s-node1,NFS
172.20.2.12 k8s-node2
172.20.2.13 Gitlab

 

部署Jenkins

1、创建一个kube-ops的 namespace:

2、创建pv、pvc:

注:下面使用的是nfs的存储方式

3、创建需要用到的 PVC 对象:

4、给jenkins绑定权限

5、创建 rbac 相关的资源对象:

6、新建一个 Deployment:(jenkins.yaml)

通过 NodePort 的形式来暴露 Jenkins 的 web 服务,固定为30002端口

另外还需要暴露一个 agent 的端口,这个端口主要是用于 Jenkins 的 master 和 slave 之间通信使用的

7、创建 Jenkins 服务:


完成

配置 Jenkins 动态 slave

1、安装 Kubernetes 插件(Jenkins 插件管理中搜索安装即可)

2、安装完毕后,点击 Manage Jenkins —> Configure System —> (拖到最下方)Add a new cloud —> 选择 Kubernetes,然后填写 Kubernetes 和 Jenkins 配置信息。

注意 namespace,这里填 kube-ops,然后点击Test Connection,如果出现 Connection test successful 的提示信息证明 Jenkins 已经可以和 Kubernetes 系统正常通信了,然后下方的 Jenkins URL 地址:http://jenkins.kube-ops.svc.cluster.local:8080,这里的格式为:服务名.namespace.svc.cluster.local:8080,根据上面创建的jenkins 的服务名填写

3、配置 Pod Template

即配置动态生成的 slave 运行的模板

模板镜像可自定义制作,具体步骤见 jenkins-slave镜像制作

其中,运行的命令和命令参数为空!

需要在下面挂载两个主机目录,一个是/var/run/docker.sock,该文件是用于 Pod 中的容器能够共享宿主机的 Docker,使用 docker in docker 的方式,Docker 二进制文件已经打包到上面的镜像中了,另外一个目录下/root/.kube目录,将这个目录挂载到容器的/root/.kube目录下面这是为了能够在 Pod 的容器中能够使用 kubectl 工具来访问 Kubernetes 集群,方便后面在 Slave Pod 部署 Kubernetes 应用。

动态 slave 测试

添加一个 Job 任务,看是否能够在 Slave Pod 中执行,任务执行完成后看 Pod 是否会被销毁.

注意在下面的 Label Expression 这里要填入 jnlp-slave,就是前面配置的 Slave Pod 中的 Label,这两个地方必须保持一致

在页面点击“构建”

 

Jenkins Pipeline 配置

1、Gitlab 配置 webhook 略,代码提交到 Gitlab 时,会自动触发 Jenkins 构建即可。

2、新建 Jenkins 流水线任务,添加 Jenkins 参数化构建

3、配置构建触发器

4、添加流水线,并指定 Jenkinsfile 文件

5、保存任务,进行测试

6、创建demo的Deployment 和 SVC

当代码提交后的过程:

  • 1、当代码 push 到 Gitlab上,触发 Jenkins 自动构建
  • 2、Jenkins 动态创建 slave Pod ,拉起后,在该 Pod 上进行 Jenkinsfile部署
  • 3、在 slave Pod 上执行 pipeline 流水线
  • 4、拉取 VUE 代码,Webpack 打包,并根据 Dockerfile 生成镜像
  • 5、将镜像推送至第三方镜像仓库
  • 6、调用 kubectl ,修改 Deployment 的镜像版本为最新版本
  • 7、发布完成

构建日志查看展开

 

jenkins-slave镜像制作

1、编辑 Dockerfile

2、生成本地镜像

3、将镜像推送到第三方仓库

 

  • 微信小程序
  • 关注微信小程序
  • weinxin
  • 微信公众号
  • 关注微信公众号
  • weinxin
Honest1y

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: