当前位置:主页 > 查看内容

阿里云Kubernetes服务上搭建jenkins环境并完成应用构建到部署的

发布时间:2021-04-29 00:00| 位朋友查看

简介:本文主要演示如何在阿里云Kubernetes服务上快速搭建jenkins持续集成环境 并基于提供的示例应用快速完成应用源码编译、镜像构建和推送以及应用部署的流水线。 前置条件 已经创建了ACK集群。 建议 建议用户先按照以下文档安装部署ack-jenkins应用 然后成功运行……

本文主要演示如何在阿里云Kubernetes服务上快速搭建jenkins持续集成环境 并基于提供的示例应用快速完成应用源码编译、镜像构建和推送以及应用部署的流水线。


前置条件

已经创建了ACK集群。


建议 建议用户先按照以下文档安装部署ack-jenkins应用 然后成功运行构建任务示例demo-pipeline 再依照此构建任务示例改造自己的构建任务配置。


1. 快速部署ack-jenkins


在容器服务-Kubernetes - 市场 - 应用目录 - ack-jenkins:

image.png

点击 参数 菜单修改 AdminPassword 字段 选择Kubernetes集群、填写命名空间和发布名称并点击创建

image.png

访问jenkins服务

image.png

使用用户名密码登录jenkins系统

image.png

ps 如未设置登陆密码 则可在部署完毕后使用如下命名查看

$ printf $(kubectl get secret --namespace ci jenkins-ci-jenkins -o jsonpath {.data.jenkins-admin-password} | base64 --decode);echo

在 新手入门页面点击安装推荐的插件 已默认安装了所有推荐的插件

image.png

在 实例配置页面 点击保存并完成。

image.png

点击开始使用Jenkins

image.png

进入Jenkins系统后 可以看到名为demo-pipeline的构建任务 可以直接点击构建 测试Kubernetes集群动态分配jenkins slave pod、jenkins slave pod自动连接jenkins master是否正常。首先点击构建任务进入构建任务详情页面 点击Build with Parameters 保持构建参数不动 点击开始构建。

image.png

执行构建后 Jenkins开始从Kubernetes集群动态创建一个slave pod运行本次构建任务。示例应用代码 https://github.com/AliyunContainerService/jenkins-demohttps://code.aliyun.com/haoshuwei/jenkins-demo.git

image.png

若构建成功则验证Jenkins on Kubernetes运行正常。

image.png


2. 配置 Kubernetes Cloud的配置说明

下面我们对Kubernetes Cloud的配置做简单说明 这些配置在部署ack-jenkins的时候已经自动化配置完毕。


Jenkins使用Kubernetes Plugin连接Kubernetes集群并动态生成和释放slave pod 关于slave pod的模板配置需要在 系统管理 - 系统配置 - 云 中进行配置

- 名称 kubernetes

- Kubernetes 地址 https://kubernetes.default.svc.cluster.local:443 jenkins 系统安装在当前集群中 可以使用内部服务端点访问集群的 API Server

- Kubernetes 命名空间 jenkins 动态 slave pod 会在命名空间 jenkins 下生成和销毁

点击 测试 按钮验证连接无误

![image.png](https://ucc.alicdn.com/pic/developer-ecology/33a3278bcce14602a9427bf72551c9fe.png)

- Jenkins 地址 http://ack-jenkins-default:8080 slave pod连接jenkins master使用的服务端点

- Jenkins 通道 ack-jenkins-default-agent:50000 slave pod使用jnlp连接jenkins master

![image.png](https://ucc.alicdn.com/pic/developer-ecology/feaa326c78584138be6273f9ac804598.png)

- Pod Templates - 名称: slave-pipeline; slave pod名称

- Pod Templates - 命名空间 jenkins

- Pod Templates - 标签列表 slave-pipeline;jenkins 构建任务通过此标签选择使用哪个模板生成slave pod

![image.png](https://ucc.alicdn.com/pic/developer-ecology/7ba9e66fd12e4249a3b81492f892e857.png)

- Pod Templates - 容器列表 - jnlp;用于jnlp连接jenkins master

![image.png](https://ucc.alicdn.com/pic/developer-ecology/0c6da0eae15748ebb8eb54e32410f59f.png)

- Pod Templates - 容器列表 - kaniko 用于构建和推送容器镜像

![image.png](https://ucc.alicdn.com/pic/developer-ecology/a345e4828be54bf6bdfaae9a393fec1f.png)

- Pod Templates - 容器列表 - maven 用于maven构建和打包应用

![image.png](https://ucc.alicdn.com/pic/developer-ecology/e6c9c5c3a339424cbaca7efc399a2f2c.png)

- Pod Templates - 容器列表 - kubectl 用于kubectl命令行部署应用

![image.png](https://ucc.alicdn.com/pic/developer-ecology/195c2756e870455bb6d18d194fc73a55.png)


3. 如何为slave pod配置maven缓存

由于slave pod是在Kubernetes集群中动态生成的 可能运行于集群的任何一个worker节点 所以要保证每次动态生成slave pod时都能使用到maven缓存 就必须使用共享存储持久化存储卷 如何创建NAS共享存储卷请参考 https://help.aliyun.com/document_detail/144398.html


例如 本示例中我们的Jenkins系统部署在jenkins命名空间下 那么首先需要在jenkins命名空间下创建一个NAS持久化存储卷 如下所示

kubectl -n jenkins get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ack-jenkins-default Bound d-2ze8xhgzuw1t278jjzbj 20Gi RWO alicloud-disk-efficiency 3h16m
nas-csi-pvc Bound nas-c6c3e703-58a9-484e-8ce5-630486ea265d 20Gi RWX alicloud-nas-subpath 4m17s

存储卷ack-jenkins-default是Jenkins Master的/var/jenkins_home目录的持久化存储 nas-csi-pvc则是我们为maven缓存NAS持久化存储卷。

在Jenkins的 系统管理- 系统配置- Kubernetes Cloud配置页面中 点击Pod Templates details 如下图所示

image.png

在Pod Template中添加Persistent Volume Claim类型挂载 申明值为NAS存储声明的名字 本示例为nas-csi-pvc 挂载路径为maven默认缓存路径/root/.m2/repository。如下图所示

image.png

点击SAVE 保存配置。

下面测试maven缓存是否生效。

首先编辑demo-pipeline构建任务 选择Jekinsfile.maven文件进行构建 如下图所示

image.png

保存并执行构建 可以看到第一次maven构建时 需要花费一段时间下载所有依赖包

image.png

再次进行maven构建 则会引用缓存的依赖包 快速完成源码打包

image.png


如果您需要为jenkins slave pod挂载自定义settings文件 则可以先创建Configmap 然后再配置到Pod Template上

kubectl -n jenkins create configmap maven-config --from-file settings.xml 

image.png

4. 如何使用kaniko构建和推送容器镜像

使用kaniko推送镜像时 需要设置镜像仓库的访问权限 在本示例中 首先需要在Linux环境下 请注意不要在MacOS下生成 生成访问镜像仓库的config.json文件 例如我们需要构建和推送一个镜像registry.cn-hangzhou.aliyuncs.com/haoshuwei24/jenkins-demo:20200428 则生成config.json文件的命令为

$ docker login -u xxx -p xxx registry.cn-hangzhou.aliyuncs.com
Login Succeeded

在jenkins命名空间下使用生成的config.json文件创建名为jenkins-docker-cfg的Secret

kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file /root/.docker/config.json

在Pod Template中添加挂载配置和环境变量设置

image.png

下面测试kaniko构建和推送镜像。

首先修改demo-pipeline使用Jenkinsfile.kaniko文件进行构建。

image.png

请将构建参数修改为您实际的镜像仓库相关信息并执行构建

image.png

查看kaniko构建日志如下所示

image.png

也可以在容器镜像仓库查看是否已经成功推送

image.png

5. jenkins升级

如果您的jenkins环境需要更换jenkins-master镜像 请先为/var/jenkins_home目录对应的云盘存储卷做快照备份 因为新版本的jenkins master会有自动化脚本往/var/jenkins_home目录写数据的动作 防止覆盖已有数据。


本文转自网络,原文链接:https://developer.aliyun.com/article/783848
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐