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

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


当前回答

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

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

其他回答

将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}"
    }
  ]
}

据我所知,这个管道插件是新的Jenkinsfile机制的“引擎”,所以我非常肯定你可以用它来本地测试你的脚本。

我不确定是否有任何额外的步骤,当你复制到一个Jenkinsfile,但语法等应该完全相同。

编辑:在“引擎”上找到了参考,检查这个功能描述,最后一段,第一个条目。

Jenkins有一个“重放”功能,它可以让你快速重放作业而不更新源:

有一些限制,对于脚本管道,我使用这个解决方案:

使用内联groovy脚本的管道作业:


node('master') {
    stage('Run!') {
                def script = load('...you job file...')
    }
}

用于测试的Jenkinsfile具有与lesfuret相同的结构:


def execute() {
 ... main job code here ...
}
execute()

您可以验证您的管道以找出语法问题。Jenkins有很好的用于Jenkisfile验证的API - https://jenkins_url/pipeline-model-converter/validate

使用curl并传递.Jenkinsfile,您将立即得到语法检查

curl --user username:password -X POST -F "jenkinsfile=<jenkinsfile" https://jenkins_url/pipeline-model-converter/validate

您可以将此工作流添加到编辑器:

VS代码 崇高的文本