在编写jenkins管道时,提交每个新更改以查看它是否有效似乎非常不方便。

是否有一种方法可以在本地执行这些而不提交代码?


当前回答

博士TL;

Jenkins Pipeline单元测试框架 Jenkinsfile跑步

长版本 管道测试越来越让人头疼。不同于经典的声明式作业配置方法(其中用户仅限于UI所公开的内容),新的Jenkins Pipeline是一种用于构建过程的成熟编程语言,您可以将声明式部分与自己的代码混合在一起。作为优秀的开发人员,我们也希望对这类代码进行单元测试。

在开发Jenkins pipeline时,您应该遵循三个步骤。第一步。应该覆盖80%的用例。

Do as much as possible in build scripts (eg. Maven, Gradle, Gulp etc.). Then in your pipeline scripts just calls the build tasks in the right order. The build pipeline just orchestrates and executes the build tasks but does not have any major logic that needs a special testing. If the previous rule can't be fully applied then move over to Pipeline Shared libraries where you can develop and test custom logic on its own and integrate them into the pipeline. If all of the above fails you, you can try one of those libraries that came up recently (March-2017). Jenkins Pipeline Unit testing framework or pipelineUnit (examples). Since 2018 there is also Jenkinsfile Runner, a package to execution Jenkins pipelines from a command line tool.

例子

pipelineUnit GitHub回购包含了一些关于如何使用Jenkins Pipeline Unit测试框架的Spock示例

其他回答

在我的开发设置中(缺少合适的Groovy编辑器),大量的Jenkinsfile问题源于简单的语法错误。要解决这个问题,你可以根据Jenkins实例验证Jenkinsfile(运行在$JENKINS_HTTP_URL):

curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=< jenkinsfile " $JENKINS_HTTP_URL/管道模型转换器/验证

上面的命令是对 -a-Declarative-Jenkinsfile-from-the-command-line https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating- (or-linting)

将SSH密钥放入Jenkins配置文件,然后使用声明式linter,如下所示:

ssh jenkins.hostname.here declarative-linter < Jenkinsfile

这将对你的詹金斯档案进行静态分析。在您选择的编辑器中,定义一个自动运行该命令的键盘快捷方式。在Visual Studio Code中,这是我使用的,转到Tasks > Configure Tasks,然后使用以下JSON创建一个Validate Jenkinsfile命令:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Validate Jenkinsfile",
      "type": "shell",
      "command": "ssh jenkins.hostname declarative-linter < ${file}"
    }
  ]
}

博士TL;

Jenkins Pipeline单元测试框架 Jenkinsfile跑步

长版本 管道测试越来越让人头疼。不同于经典的声明式作业配置方法(其中用户仅限于UI所公开的内容),新的Jenkins Pipeline是一种用于构建过程的成熟编程语言,您可以将声明式部分与自己的代码混合在一起。作为优秀的开发人员,我们也希望对这类代码进行单元测试。

在开发Jenkins pipeline时,您应该遵循三个步骤。第一步。应该覆盖80%的用例。

Do as much as possible in build scripts (eg. Maven, Gradle, Gulp etc.). Then in your pipeline scripts just calls the build tasks in the right order. The build pipeline just orchestrates and executes the build tasks but does not have any major logic that needs a special testing. If the previous rule can't be fully applied then move over to Pipeline Shared libraries where you can develop and test custom logic on its own and integrate them into the pipeline. If all of the above fails you, you can try one of those libraries that came up recently (March-2017). Jenkins Pipeline Unit testing framework or pipelineUnit (examples). Since 2018 there is also Jenkinsfile Runner, a package to execution Jenkins pipelines from a command line tool.

例子

pipelineUnit GitHub回购包含了一些关于如何使用Jenkins Pipeline Unit测试框架的Spock示例

使用VS Code Jenkins Jack扩展,你可以在不使用git推送的情况下测试你的Jenkins文件,从你的本地文件到本地或远程运行的Jenkins。你将在VS Code中有作业的运行日志,能够在Jenkins中创建作业和更多的工作人员。我希望这有助于更多的人寻找一种方法来开发詹金斯档案。

除了其他人已经提到的重放功能(关于它的有用性也一样!),我发现以下功能也很有用:

创建一个测试管道作业,您可以在其中键入管道代码或指向Jenkinsfile的repo/分支来快速测试一些东西。为了更准确的测试,使用Multibranch Pipeline,它指向你自己的fork,在那里你可以快速做出改变并提交,而不影响proch。 由于Jenkinsfile是Groovy代码,只需使用“Groovy Jenkinsfile”调用它来验证基本语法。