有没有可以在线验证Jenkinsfiles的工具?


13

目前,我正在编辑Jenkins文件,然后让它运行,除非Jenkins报告问题。这种方法花费大量时间。我更喜欢在提交Jenkinsfile之前先验证语法。是否有解决此问题的工具?

gitlab中有一个URI,即/ci/lint可以提交gitlab文件,单击检查按钮,然后UI会指示语法是否正确。

Answers:


13

这是有关Jenkins管道linter及其命令的一些文档。提交之前是否需要验证?如果没有,那么在管道运行之前运行linting命令真的很简单,如果不通过,则失败。

命令行管道短绒

詹金斯可以验证,或“ 棉绒从命令行实际运行它之前”,一个声明管道。可以使用Jenkins CLI命令或通过使用适当的参数发出HTTP POST请求来完成。我们建议使用SSH接口来运行linter。有关如何正确配置Jenkins以进行安全的命令行访问的详细信息,请参见Jenkins CLI文档

通过SSH通过CLI进行lint

# ssh (Jenkins CLI)
# JENKINS_SSHD_PORT=[sshd port on master]
# JENKINS_HOSTNAME=[Jenkins master hostname]
ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile

通过HTTP POST使用使用 curl

# curl (REST API)
# Assuming "anonymous read access" has been enabled on your Jenkins instance.
# JENKINS_URL=[root URL of Jenkins master]
# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should
JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`
curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

例子

以下是两个正在运行的流水线实例。第一个示例显示了将linter传递给invalid时Jenkinsfile,lint的输出,该输出 缺失了agent声明的一部分。

詹金斯档案

pipeline {
  agent
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

无效的Jenkinsfile的Linter输出

# pass a Jenkinsfile that does not contain an "agent" section
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 2: Not a valid section definition: "agent". Some extra configuration is required. @ line 2, column 3.
     agent
     ^

WorkflowScript: 1: Missing required section "agent" @ line 1, column 1.
   pipeline &#125;
   ^

在第二个例子中,Jenkinsfile已更新,包括失踪anyagent。现在,lint报告管道有效。

詹金斯档案

pipeline {
  agent any
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

有效的Jenkinsfile的Linter输出

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.

您能解释一下如何在本地使用客户端吗?java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


感谢您发布答案。还有在线工具吗?如果可以导航到用户界面,发布jenkinsfile并检查是否存在语法问题,那就太好了。我已经更新了问题。
030

@ 030我怀疑是否有一个在线的linter工具,但这听起来像是一个有趣的项目:)要在本地使用linter,您需要使用您的凭据登录到Jenkins服务器,然后“询问” Jenkins以使您的棉绒jenkinsfile。pierre-beitz.eu/2017/01/17/…–
PrestonM

您可以从该链接中添加一些片段到此答案。如果不赞成使用该链接,则该信息将消失。
030
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.