jenkins - 快速周转的 Jenkins Pipeline 脚本开发

标签 jenkins groovy jenkins-pipeline

有没有一种方法可以交互式地编写 Jenkins Pipeline 脚本,就像您可以在 Jenkins 脚本控制台中运行其他 Groovy 一样?理想情况下,我实际上想要“Jenkins 中的管道 groovysh”。

AFAICS 脚本控制台不会设置使管道工作所需的任何环境,因此您不能只在那里运行临时的管道作业 block 。

我知道“重播”选项,但对于远程 Jenkins 来说,它的速度非常慢,并且不能很好地集成到 VCS 中。

背景:由于我最近在 Jenkins 管道上做了很多工作,我发现测试周期变得很痛苦。真的很讽刺。提交,推送到工作分支,“使用参数构建”(或重建)指向管道脚本工作分支的作业,等待结果,检查控制台日志,重复。

乏味。

我通过让我的测试作业在推送到我的管道存储库时自动触发来对其进行了一些改进,但这仍然相当笨拙。

启动本地 Jenkins 进行测试不太实用 - 管道需要与私有(private) Docker 注册表交互,需要特定的插件配置,需要一些特定的工作类型等。它也没有多大帮助扭转局面。

那么其他人如何做得更好呢? jenkins-cli 远程控制?其他?

最佳答案

我使用了两种处理管道的方法来缓解您正在经历的痛苦的开发-测试-失败-修复周期:

1) 基于单元测试的测试方法

在单元测试框架中编写管道,并使用 IntelliJ IDEA 等 IDE 完全模拟所有内容。使用 Spock 或 JUnit 创建在 Groovy 中开发的单元测试,并利用 JenkinsPipelineUnit测试框架。如果您习惯于编写单元测试和模拟,那么这可能没问题,但很多人都不是。它对我的大部分管道都有效。

2) 使用 Docker 和文件系统 SCM 插件

在开发机器上的 Docker 中启动 Jenkins,使用 Jenkins Configuration as Code (JCasC) 将其配置为尽可能接近您的生产系统。 。在运行 Jenkins 的 Docker 容器中,map/bind 将主机系统上包含所有管道代码的目录挂载到 Docker 容器中。然后,您可以使用名为“File system SCM Plugin”的 Jenkins 插件。这个 FS SCM 插件将允许您在 Dockerized Jenkins 中配置管道作业,以将其管道代码直接从映射到 Docker 容器的主机上的文件系统中获取。因此,您要做的就是在主机系统上的 IDE 中打开管道代码,根据需要进行编辑,然后在 Docker 化的 Jenkins 中执行作业,而无需提交。然后,完成调试/开发后,将代码提交到生产服务器。该方法基于 CloudBees 的 Oleg Nenashev 的工作和想法,值得一看他的演示 "How to Develop Your Jenkins Pipeline Locally" 。要在 Docker 中设置 Jenkins,其中大部分是通过 YAML 配置的,请查看 JCasC README文件以及 Jenkins Docker项目以了解如何配置已安装的插件。

您还可以从 Jenkins Pipeline Authoring special interest group 获得有关此主题的一些有用信息。 .

关于jenkins - 快速周转的 Jenkins Pipeline 脚本开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56454006/

相关文章:

groovy - 为什么这个 Groovy 代码试图强制转换?

groovy - 如何使用 GrabResolver 在 groovysh 中使用远程存储库

java - Groovy:什么是 java stream anyMatch 的模拟

jenkins - 如何在Linux上的jenkins中设置android ndk

git - Jenkins Git 环境变量未在管道中设置

java - Jenkins 中的 Junit 测试挂起

jenkins - Groovy - Jenkins 管道 - Groovy CPS 不通过 .each Line 方法

shell - Jenkins Pipeline 脚本转义连字符或打印引号

Jenkins 管道多配置项目

github - 如何将 Jenkins GitHub 组织文件夹与受 github 保护的分支一起使用?