Jenkins Pipeline - 工作流 CPS 插件 JAR 依赖项

Posted

技术标签:

【中文标题】Jenkins Pipeline - 工作流 CPS 插件 JAR 依赖项【英文标题】:Jenkins Pipeline - Workflow CPS plugin JAR dependencies 【发布时间】:2017-10-29 03:03:56 【问题描述】:

我正在为Jenkins Pipeline Shared Groovy Library 中使用的代码实施单元测试。具体来说,我需要模拟 Jenkinsfile 中可用的steps 对象,它是org.jenkinsci.plugins.workflow.cps.DSL 的一个实例。在我的 Gradle 构建中,我指定了一个依赖项,如下所示:

testCompile group: 'org.jenkins-ci.plugins.workflow', name: 'workflow-cps', version: '2.30', ext: 'jar'

这是托管上述课程的项目。在没有将 ext 指定为 JAR 的情况下,Gradle 会检索 .hpi 文件,因为这是项目的 pom.xml 中定义的包装;显然我需要覆盖它并为我的项目获取 JAR。但是,在执行此操作时,Gradle 不会下载 workflow-cps JAR 的传递依赖项,我发现自己必须使用通过反复试验确定的所有依赖项填充我的 build.gradle。有没有办法检索传递依赖关系,或者这是工作流cps项目的限制以及它如何定义它的pom.xml?

【问题讨论】:

你用的是什么测试框架? 我正在使用 Spock。我保持vars 目录非常轻量级,并将复杂的逻辑添加到src,因此我可以使用标准单元测试来测试库。 【参考方案1】:

您要模拟的 CPS 类不包含插件或工作流库引入的方法/变量,因此这种方法可能不会完全令人满意。

面对同样的挑战,我采取了务实的方法,在我的测试源中创建自己的 TestScript 接口并对其进行 Mock,而不是在类中键入脚本引用。

缺点是没有对引用脚本的内容进行 IDE 代码检查,并且在我添加测试时必须手动向 TestScript 添加签名(这也容易出错,因为我已经手动确保这些签名匹配)。

但它可以工作,并且避免被拖入插件依赖地狱。

【讨论】:

以上是关于Jenkins Pipeline - 工作流 CPS 插件 JAR 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins pipeline概念理解

Jenkins pipeline 语法详解

Jenkins Pipeline - 我们可以在 jenkins 管道之外运行工作吗?

Docker的Jenkins Pipeline工作流

Jenkins 训练营 | 带你玩转 Pipeline

Jenkins 2.0 Pipeline (docker)安装使用手册