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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文主要演示如何在阿里云Kubernetes服务上快速搭建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目录写数据的动作,防止覆盖已有数据。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
11天前
|
Kubernetes 算法 调度
阿里云 ACK FinOps成本优化最佳实践
本文源自2024云栖大会梁成昊演讲,讨论了成本优化策略的选择与实施。文章首先介绍了成本优化的基本思路,包括优化购买方式、调整资源配置等基础策略,以及使用弹性、资源混部等高级策略。接着,文章详细探讨了集群优化和应用优化的具体方法,如使用抢占式实例降低成本、通过资源画像识别并优化资源配置,以及利用智能应用弹性策略提高资源利用效率。
|
11天前
|
弹性计算 调度 数据中心
阿里云 ACK One 注册集群云上弹性:扩展业务新利器
随着企业数字化转型深入,传统IDC数据中心因物理容量限制,难以实现动态扩容,缺乏弹性能力。阿里云ACK One注册集群凭借其高度灵活性和丰富资源选择,成为解决此问题的最佳方案。通过与阿里云资源的整合,ACK One不仅实现了计算资源的按需扩展,提高了资源利用率,还通过按需付费模式降低了成本,使企业能够更高效地应对业务增长和高峰需求。
|
11天前
|
运维 Kubernetes Serverless
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
本文基于2024云栖大会田双坤的演讲,介绍了Kubernetes作为云原生操作系统的角色及其在各类任务中的应用,重点探讨了Argo Workflows在Kubernetes上编排并行任务的能力。面对自建Argo Workflows的挑战,如稳定性、成本和安全性等问题,阿里巴巴云推出了全托管的Serverless Argo工作流,提供全托管、免运维、可观测和易集成的特点,显著提升了任务编排的效率和稳定性。适用于数据处理、科学计算、自动驾驶仿真等多个领域。
|
11天前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
11天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
59 2
|
4月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
13天前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
53 12
|
1月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
1月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
73 4

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    DataWorks