我如何testing在本地对Jenkinsfile所做的更改?

在编写jenkinspipe道时,为了查看它是否有效,对每个新的更改进行操作似乎非常不方便。

有没有办法执行这些本地没有提交代码?

你不能在本地执行pipe道脚本,因为它的全部目的是脚本jenkins。 (这是为什么最好保持Jenkinsfile简短并且限于实际处理Jenkins特性的代码的一个原因;您的实际构build逻辑应该使用外部进程或构build工具来处理,您可以通过单行shbat步骤。)

如果您想要testingJenkinsfile的更改,但不提交 ,请使用1.14中添加的重播function

JENKINS-33925追踪所需的自动化testing框架。

TL; DR
Jenkinspipe道unit testing框架

长版本
jenkinspipe道testing变得越来越痛苦。 与传统的声明性作业configuration方法不同,用户被限制在UI所暴露的位置,新的Jenkins Pipeline是一个完整的编程语言,用于将声明性部分与自己的代码混合在一起的构build过程。 作为优秀的开发人员,我们也希望对这种代码进行一些unit testing。

开发Jenkinspipe道时,应遵循三个步骤。 第1步应该覆盖80%的用例。

  1. 尽可能多的构build脚本(例如,Maven,Gradle,Gulp等)。 然后在你的pipe道中,脚本只是按正确的顺序调用构build任务。 构buildpipe道只是编排和执行构build任务,但没有任何需要特殊testing的主要逻辑。
  2. 如果以前的规则不能完全应用,那么就转到Pipeline共享库 ,您可以在其中开发和testing自定义逻辑并将其集成到pipe道中。
  3. 如果上述全部失败,您可以尝试最近(2017年3月)提供的那些库中的一个。 Jenkinspipe道unit testing框架或pipelineUnit (示例)

例子

pipelineUnit GitHub repo包含一些关于如何使用Jenkinspipe道unit testing框架的 Spock示例

据我所知这个pipe道插件是新的Jenkinsfile机制的“引擎”,所以我相当积极,你可以用它来本地testing你的脚本。

我不知道是否有任何额外的步骤,当你把它复制到一个Jenkinsfile,但是语法等应该是完全一样的。

编辑:在“引擎”find引用,检查这个function描述,最后一段,第一个条目。

在我的开发环境中 – 缺less一个合适的Groovy编辑器 – 大量的Jenkinsfile问题源于简单的语法错误 。 要解决这个问题,你可以根据你的Jenkins实例(运行在$JENKINS_HTTP_URL )validation$JENKINS_HTTP_URL

curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate

上述命令是从https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line稍作修改的版本;

除了其他人已经提到的重播function(同上),我发现以下内容也是有用的:

  1. 创build一个testingstream水线作业,您可以在其中inputstream水线代码或指向Jenkins文件的repo /分支以快速testing某些内容。 为了更准确的testing,使用多分支stream水线指向您自己的分支,您可以快速进行更改和提交而不影响产品。 像BRANCH_NAME env之类的东西只能在Multibranch中使用。
  2. 由于Jenkinsfile是Groovy代码,只需使用“groovy Jenkinsfile”来调用它以validation基本语法。

在撰写(2017年7月底)的蓝海插件时,您可以直接在可视化stream水线编辑器中检查声明式pipe道的语法。 编辑器,从蓝海用户界面,当你点击“configuration”只为github项目 (这是一个已知的问题,他们正在努力使其工作也git等)的作品。

但是,正如在这个问题中所解释的,你可以打开编辑器浏览到:

[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/

然后点击页面中间,然后按Ctrl+S ,这将打开一个textarea,您可以粘贴一个pipe道声明脚本。 当你点击更新时 ,如果出现语法错误,编辑器会让你知道语法错误在哪里。 像这个截图一样:

作为一个快速测试,我错误地键入“步”而不是“步”

如果没有语法错误,textarea将closures,页面将可视化您的pipe道。 不要担心它不会保存任何东西(如果它是一个github项目,它会承诺Jenkinsfile的变化)。

我是Jenkins的新手,这很有帮助,没有这个,我必须多次执行一个Jenkins文件,直到它工作(非常烦人!)。 希望这可以帮助。 干杯。