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

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

#1 楼

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

从命令行管道Linter:


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

通过CLI使用SSH通过SSH进行Linting


# 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


使用curl通过HTTP POST进行Linting

# 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


示例

以下是两个正在运行的Pipeline Linter的示例。第一个
示例显示了传递无效的
Jenkinsfile时,lint的输出,而agent声明中缺少该部分。

Jenkinsfile

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已更新为包括
any上缺少agent。现在,lint报告管道有效。

Jenkinsfile

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] [全局选项...]命令[命令选项...] [参数...]

– 030
17年9月27日在8:34

devops.stackexchange.com/q/2164/210

– 030
17年9月27日在8:50

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

– 030
17年9月27日在8:53

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

–普雷斯顿·马丁(Preston Martin)
17年9月28日在14:40

您可以从该链接中添加一些片段到此答案。如果不赞成使用该链接,则该信息将消失。

– 030
17-10-3在10:22