jenkins 入门
Jenkins X是一个开源系统,可在Kubernetes中为软件开发人员提供持续集成,自动化测试和持续交付(称为CI / CD)。 Jenkins X托管的项目通过Jenkins管道获得了完整的CI / CD流程,该管道可以构建和打包项目代码以部署到Kubernetes,并可以访问管道以将项目推广到暂存和生产环境。
开发人员已经从Kubernetes上运行“经典”开源Jenkins和CloudBee版本的Jenkins中受益,这在一定程度上要归功于Jenkins Kubernetes插件,该插件可让您动态启动Kubernetes pod来运行Jenkins构建代理。 Jenkins X补充了Jenkins缺少的功能:对持续交付的全面支持以及管理在Kubernetes中运行的项目预览,登台和生产环境的推广。
本文是对Jenkins X的工作原理的高级解释。 它假定您对Kubernetes和经典Jenkins有所了解。
Jenkins X带来的好处
如果您在主要的云提供商之一(用于Kubernetes的Amazon Elastic Container Service,Google Kubernetes Engine或Microsoft Azure Kubernetes Service)上运行,则安装和部署Jenkins X很容易。 下载Jenkins X命令行界面,然后运行jx create cluster命令。 系统将提示您输入必要的信息,如果使用默认设置,Jenkins X将创建一个入门级的Kubernetes集群并安装JenkinsX。
部署Jenkins X时,会启用许多服务来监视您的Git存储库,并通过将应用程序构建,测试并将其升级到阶段,生产和您定义的其他环境来进行响应。 Jenkins X还部署了一套支持服务,包括Jenkins , Docker Registry , Chart Museum和Monocular来管理Helm图表,以及Nexus ,后者用作Maven和npm存储库。
Jenkins X部署还创建了两个Git存储库,一个用于您的登台环境,另一个用于生产。 这些是用于管理项目源代码的Git存储库的补充。 Jenkins X使用这些存储库来管理部署到每个环境的内容,并通过Git拉取请求(PR)进行升级-这种方法称为GitOps 。 每个存储库都包含一个Helm图表,该图表指定了要部署到相应环境的应用程序。 每个存储库还具有Jenkins管道来处理促销。
使用Jenkins X创建一个新项目
要使用Jenkins X创建新项目,请使用jx create quickstart命令。 如果您未指定任何选项,则jx将提示您选择项目名称和平台-几乎可以是任何东西。 SpringBoot,Go,Python,Node,ASP.NET,Rust,Angular和React均受支持,并且列表还在不断增长。 选择项目名称和平台后,Jenkins X将:
- 创建一个新项目,其中包括“ hello-world”样式的Web项目
- 为所选平台添加适当类型的makefile或构建脚本
- 添加一个Jenkinsfile来管理对登台和生产环境的促销
- 添加通过草稿创建的Dockerfile和Helm图表
- 添加一个Skaffold配置以将应用程序部署到Kubernetes
- 创建一个Git存储库并将新的项目代码推送到那里
接下来,来自Git的Webhook将通知Jenkins X项目已更改,它将运行您项目的Jenkins管道以构建并推送Docker映像和Helm图表。
最后,管道会将PR提交给暂存环境的Git存储库,其中包含升级应用程序所需的更改。
PR合并后,登台管道将运行以应用这些更改并进行升级。 创建项目后的几分钟,您将拥有端到端CI / CD,并且您的项目将在分阶段运行并可以使用。

开发人员提交更改,将项目部署到暂存环境。
上图说明了存储库,注册表和管道,以及它们在Jenkins X升级到暂存中的交互方式。 步骤如下:
- 开发人员提交更改并将更改推送到项目的Git存储库
- 通知Jenkins X,并在Docker映像中运行项目的Jenkins管道,该映像中包含项目的语言和支持框架
- 项目管道将构建,测试项目的Helm图表并将其推送到Chart Museum,并将其Docker映像推送到注册表
- 项目管道将创建PR,其中包含将项目添加到暂存环境所需的更改
- Jenkins X自动将PR合并到Master
- 通知Jenkins X并运行登台管道
- 登台管道运行Helm,后者部署环境,从Chart Museum提取Helm图表,并从Docker注册表提取Docker映像。 Kubernetes创建项目的资源,通常是pod,服务和入口。
将现有项目导入Jenkins X
jx import ,Jenkins X添加了将您的项目部署到Kubernetes并参与CI / CD所需的东西。 它将添加Jenkins管道,Helm图表和Skaffold配置,以将应用程序部署到Kubernetes。 Jenkins X将创建一个Git存储库并将更改推送到那里。 接下来,来自Git的Webhook将通知Jenkins X一个项目已更改,并且将如上针对新项目所述升级到暂存。将您的项目推广到生产
要将项目的版本升级到生产环境,请使用jx Promotion命令。 此命令将准备一个Git PR,其中包含部署到生产环境中并将此请求提交到生产环境的Git存储库所需的Helm图表更改。 手动批准请求后,Jenkins X将运行生产管道以通过Helm部署您的项目。

开发人员将项目推广到生产中。
此图说明了存储库,注册表和管道,以及它们在Jenkins X促销生产中的相互作用。 步骤如下:
- 开发人员运行jx Promotion命令以将项目提升为生产
- Jenkins X使用将项目添加到生产环境所需的更改来创建PR
- 开发人员手动批准PR,并将其合并到Master
- 詹金斯X收到通知并运行生产流程
- 生产管道运行Helm,Helm部署环境,从Chart Museum提取Helm图表,从Docker注册表提取Docker图像。 Kubernetes创建项目的资源,通常是pod,服务和入口。
Jenkins X的其他功能
Jenkins X的其他有趣和吸引人的功能包括:
预览环境
创建PR以便将新功能添加到项目中时,可以要求Jenkins X创建预览环境,以便在合并PR之前可以使新功能可用于预览和测试。
扩展名
可以创建Jenkins X的扩展名。扩展名是在CI / CD流程中的特定时间运行的代码。 扩展可以提供在安装,卸载扩展以及在每个管道之前和之后运行的代码。
无服务器詹金斯
您不必运行会不断消耗CPU和内存资源的Jenkins Web应用程序,而只能在需要时运行Jenkins。 在过去的一年中,Jenkins社区创建了一个Jenkins版本,该版本可以通过命令行运行由代码定义的配置(而不是HTML表单)的经典Jenkins管道。
Jenkins X现在可以使用此功能。创建Jenkins X集群时,可以选择使用无服务器Jenkins。 如果你这样做,詹金斯X将部署船头到从GitHub和手柄网络挂接Knative运行詹金斯管道。
Jenkins X的局限性
Jenkins X还具有一些应考虑的限制:
- Jenkins X当前仅限于使用Git的项目: Jenkins X对CI / CD持坚定态度,并假定每个人都希望将软件运行和部署到Kubernetes,并且每个人都乐于将Git用于源代码和定义环境。 另外,无服务器Jenkins功能当前仅适用于GitHub。
- Jenkins X仅限于Kubernetes:的确,Jenkins X可以针对任何类型的软件运行自动构建,测试和持续集成,但持续交付部分的目标是由Jenkins X管理的Kubernetes命名空间。
- Jenkins X需要集群管理员级别的Kubernetes访问: Jenkins X需要集群管理员级别的访问,以便它可以定义和管理Kubernetes自定义资源定义。 希望这是一个暂时性的限制,因为对于某些人来说,这可能是个阻碍。
结论
Jenkins X似乎是为Kubernetes实施CI / CD的好方法,我期待将其投入生产测试。 使用Jenkins X也是了解一些有用的开源工具以部署到Kubernetes的好方法,包括Helm,Draft,Skaffold,Prow等。 即使您确定Jenkins X不适合您,这些也是您可能要使用的东西。 如果您要部署到Kubernetes,请尝试使用Jenkins X.
翻译自: https://opensource.com/article/18/11/getting-started-jenkins-x
jenkins 入门