一个好老好老的老程序员了。
全部博文(915)
分类: 云计算
2021-04-29 14:43:56
本文主要演示如何在阿里云Kubernetes服务上快速搭建jenkins持续集成环境,并基于提供的示例应用快速完成应用源码编译、镜像构建和推送以及应用部署的流水线。
已经创建了ACK集群。
建议: 建议用户先按照以下文档安装部署ack-jenkins应用, 然后成功运行构建任务示例demo-pipeline, 再依照此构建任务示例改造自己的构建任务配置。
在容器服务-Kubernetes -> 市场 -> 应用目录 -> ack-jenkins:
点击 参数 菜单修改 AdminPassword 字段, 选择Kubernetes集群、填写命名空间和发布名称并点击创建:
访问jenkins服务:
使用用户名密码登录jenkins系统:
ps:如未设置登陆密码,则可在部署完毕后使用如下命名查看:
点击(此处)折叠或打开
在 实例配置页面 点击保存并完成。
点击开始使用Jenkins:
进入Jenkins系统后,可以看到名为demo-pipeline的构建任务,可以直接点击构建,测试Kubernetes集群动态分配jenkins slave pod、jenkins slave pod自动连接jenkins master是否正常。首先点击构建任务进入构建任务详情页面,点击Build with Parameters,保持构建参数不动,点击开始构建。
执行构建后,Jenkins开始从Kubernetes集群动态创建一个slave pod运行本次构建任务。示例应用代码: 或: 或
若构建成功则验证Jenkins on Kubernetes运行正常。
下面我们对Kubernetes Cloud的配置做简单说明,这些配置在部署ack-jenkins的时候已经自动化配置完毕。
Jenkins使用Kubernetes Plugin连接Kubernetes集群并动态生成和释放slave pod,关于slave pod的模板配置需要在 系统管理 -> 系统配置 -> 云 中进行配置
- 名称:kubernetes;
- Kubernetes 地址:;jenkins 系统安装在当前集群中,可以使用内部服务端点访问集群的 API Server
- Kubernetes 命名空间:jenkins;动态 slave pod 会在命名空间 jenkins 下生成和销毁
点击 `测试` 按钮验证连接无误:
- Jenkins 地址:;slave pod连接jenkins master使用的服务端点
- Jenkins 通道:ack-jenkins-default-agent:50000;slave pod使用jnlp连接jenkins master
- Pod Templates -> 名称: slave-pipeline; slave pod名称
- Pod Templates -> 命名空间:jenkins
- Pod Templates -> 标签列表:slave-pipeline;jenkins 构建任务通过此标签选择使用哪个模板生成slave pod
- Pod Templates -> 容器列表 -> jnlp;用于jnlp连接jenkins master
- Pod Templates -> 容器列表 -> kaniko;用于构建和推送容器镜像
- Pod Templates -> 容器列表 -> maven:用于maven构建和打包应用
- Pod Templates -> 容器列表 -> kubectl:用于kubectl命令行部署应用
- Pod Templates -> 容器列表 -> maven:用于maven构建和打包应用
- Pod Templates -> 容器列表 -> kubectl:用于kubectl命令行部署应用
由于slave pod是在Kubernetes集群中动态生成的,可能运行于集群的任何一个worker节点,所以要保证每次动态生成slave pod时都能使用到maven缓存,就必须使用共享存储持久化存储卷,如何创建NAS共享存储卷请参考:https://help.aliyun.com/document_detail/144398.html
例如,本示例中我们的Jenkins系统部署在jenkins命名空间下,那么首先需要在jenkins命名空间下创建一个NAS持久化存储卷,如下所示:
点击(此处)折叠或打开
存储卷ack-jenkins-default是Jenkins Master的/var/jenkins_home目录的持久化存储,nas-csi-pvc则是我们为maven缓存NAS持久化存储卷。
在Jenkins的 系统管理->系统配置->Kubernetes Cloud配置页面中,点击Pod Templates details,如下图所示:
在Pod Template中添加Persistent Volume Claim类型挂载,申明值为NAS存储声明的名字,本示例为nas-csi-pvc,挂载路径为maven默认缓存路径/root/.m2/repository。如下图所示:
点击SAVE,保存配置。
下面测试maven缓存是否生效。
首先编辑demo-pipeline构建任务,选择Jekinsfile.maven文件进行构建,如下图所示:
保存并执行构建,可以看到第一次maven构建时,需要花费一段时间下载所有依赖包:
再次进行maven构建,则会引用缓存的依赖包,快速完成源码打包:
如果你需要为jenkins slave pod挂载自定义settings文件,则可以先创建Configmap,然后再配置到Pod Template上:
点击(此处)折叠或打开
使用kaniko推送镜像时,需要设置镜像仓库的访问权限,在本示例中,首先需要在Linux环境下(请注意不要在MacOS下生成)生成访问镜像仓库的config.json文件,例如我们需要构建和推送一个镜像registry.cn-hangzhou.aliyuncs.com/haoshuwei24/jenkins-demo:20200428,则生成config.json文件的命令为:
点击(此处)折叠或打开
在jenkins命名空间下使用生成的config.json文件创建名为jenkins-docker-cfg的Secret:
点击(此处)折叠或打开
下面测试kaniko构建和推送镜像。
首先修改demo-pipeline使用Jenkinsfile.kaniko文件进行构建。
请将构建参数修改为您实际的镜像仓库相关信息并执行构建:
查看kaniko构建日志如下所示:
也可以在容器镜像仓库查看是否已经成功推送:
如果您的jenkins环境需要更换jenkins-master镜像,请先为/var/jenkins_home目录对应的云盘存储卷做快照备份,因为新版本的jenkins master会有自动化脚本往/var/jenkins_home目录写数据的动作,防止覆盖已有数据。