Jenkins on ACK实战(三):容器化的构建

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 上一篇中,我们演示了如何配置并运行一条简单的流水线,可能有些读者对于上篇文章中的配置还有些疑问: 为何构建任务运行时会有一个slave节点加入 pipeline的写法似乎和Jenkins文档中的例子有点不一样 今天这篇文章就来解答上面两个问题,并解释下构建中的几个stage跟传统环境中的差异 .

上一篇中,我们演示了如何配置并运行一条简单的流水线,可能有些读者对于上篇文章中的配置还有些疑问:

  • 为何构建任务运行时会有一个slave节点加入
  • pipeline的写法似乎和Jenkins文档中的例子有点不一样

今天这篇文章就来解答上面两个问题,并解释下构建中的几个stage跟传统环境中的差异

哪里来的slave?

这些slave节点都是kubernetes-plugin这个插件动态创建的,实际上是在kubernetes运行的一个pod

大家应该还记得,我们在第一篇文章中,检查Jenkins安装结果的时候,查看了cloud的kubernetes配置,这些配置就是给kubernetes-plugin用的

这个插件会扩展pipeline的写法,允许我们自定义执行构建的环境,这也是为什么我们的pipeline会跟常见的有些差异的原因

slave节点配置

参数 作用
名称 kubernetes集群的标识,pipeline中以此选择在哪个集群中做构建
Kubernetes 地址 kubernetes api入口,如果要连接Jenkins master所在的集群,写成https://kubernetes.default 即可
凭据 连接kubernetes api的凭据,如果Jenkins master在集群内且安装了rbac权限,可以留空
Jenkins 地址 slave节点连接Jenkins master的地址
Jenkins 通道 Jenkins master节点连接slave的地址
Pod 模板 slave节点的定义,可以定义调度规则,包含那些容器,挂载哪些配置等

在我们这个环境中,pod模板的定义放在了pipeline里,可以提供更好的可回溯性

这里面还有几个点要注意:

  1. Jenkins会在slave pod启动的时候自动注入一个jnlp container,用来和Jenkins master通信
  2. 一般来讲,pod中的container都会有至少一个stage与其相对应,且stage一般都是串行执行,所以,container的主进程要配置成阻塞在stdin
  3. container之间一般都会有数据传递,默认会给pod上加一个emptydir的volume,mount到每一个container的/home/jenkins/agent目录,并且这个目录作为各个container的workspace

容器中的CI/CD

既然slave节点是Jenkins在kubernetes中动态创建的pod,那么自然我们所有的CI/CD流程都是在容器中进行的,如果说容器中做代码构建和传统环境区别还不算大,那么在后面的docker镜像构建、发布到kubernetes等过程就有了比较大的变化了,也是常常会困扰我们的问题,这里我们要推荐一些新东西出来:

无docker daemon的image build

在容器中做image build并不是新鲜事,常见的有这么几种做法:

  1. dind方式,需要privilege权限
  2. 挂载/var/run/docker.sock文件到容器里,完全操作主机的docker daemon

这两种方式都对主机有要求,并且在serverless的virtual node上无法使用,我们在示例的pipeline中使用的是kaniko,完全不依赖docker daemon即可完成image build

kubernetes-cli插件

在将应用发布到kubernetes的时候,需要用到kubectl,这里有两种方式:

  1. 将目标集群的.kube/config文件保存在configmap里,通过volume的方式挂载到容器里,在容器内使用kubectl
  2. 将目标集群的任意凭证保存在Jenkins里,通过kubernetes-cli插件来使用kubectl

在我们的例子中使用的是第二种方式

小结

前面两篇文章介绍了如果快速搭建Jenkins环境、演示了一条简单的流水线,本片着重介绍这种构建方式要注意的点以及因这种构建方式而引入的新的工具

后面我们会介绍在这套基于容器的Jenkins环境中的发布实践

参考

  1. kubernetes-plugin
  2. kaniko
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
14天前
|
存储 Kubernetes 调度
通过重新构建Kubernetes来实现更具弹性的容器编排系统
通过重新构建Kubernetes来实现更具弹性的容器编排系统
33 8
|
11天前
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
34 2
|
13天前
|
Prometheus 监控 Kubernetes
|
24天前
|
Kubernetes jenkins 持续交付
jenkins连接k8s
jenkins连接k8s
44 7
|
22小时前
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
1天前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之如何在K8s集群上进行构建
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4天前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
10 0
|
6天前
|
jenkins 持续交付
Jenkins Pipeline 流水线 - Parameters 参数化构建
Jenkins Pipeline 流水线 - Parameters 参数化构建
6 0
|
6天前
|
jenkins 持续交付 网络安全
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
8 0
|
6天前
|
Kubernetes jenkins 网络安全
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
12 0

相关产品

  • 容器服务Kubernetes版