【问题标题】:Jenkins: Can comments be added to a Jenkinsfile?Jenkins:可以将评论添加到 Jenkinsfile 中吗?
【发布时间】:2017-07-07 16:33:09
【问题描述】:

在 Jenkinsfile 中可以使用 cmets 吗?如果有,语法是什么?

我正在使用声明性管道语法。

我想在我的 SMTP 服务器正常工作之前注释掉下面的“帖子”部分。

pipeline {

  agent { label 'docker-build-slave' }

  environment {
    IMAGE = 'registry.gitlab.com/XXXXX/bible-server'
    DOCKER_REGISTRY_CREDENTIALS = credentials('DOCKER_REGISTRY_CREDENTIALS')
  }

  options {
    timeout(10)
  }

  stages {

    stage('Test') {
      steps {
        sh 'yarn'
        sh 'npm test'
      }
    }

    stage('Build') {
      when {
        branch '*/master'
      }
      steps {
        sh 'docker login -u ${DOCKER_REGISTRY_CREDENTIALS_USR} -p ${DOCKER_REGISTRY_CREDENTIALS_PSW} registry.gitlab.com'
        sh 'docker build -t ${IMAGE}:${BRANCH_NAME} .'
        sh 'docker push ${IMAGE}:${BRANCH_NAME}'
      }
    }

    stage('Deploy') {
      when {
        branch '*/master'
      }
      steps {
        echo 'Deploying ..'
      }
    }
  }

  post {
    success {
      mail to: "XXXXX@gmail.com", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
    }
    failure {
      mail to: "XXXXX@gmail.com", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
  }
}

【问题讨论】:

  • 每当您对 Jenkinsfiles 有这样的语言问题时,请记住它们大多是 GROOVY 脚本。因此,如果您添加关键字“groovy”而不是“Jenkinsfile”,您可能会发现更多结果。

标签: jenkins groovy comments jenkins-pipeline


【解决方案1】:

official Jenkins documentation 仅提及如下单行命令:

// Declarative //

和 (see)

pipeline {
    /* insert Declarative Pipeline here */
}

Jenkinsfile 的语法基于Groovy,因此也可以使用groovy syntax for comments。引用:

/* a standalone multiline comment
   spanning two lines */
println "hello" /* a multiline comment starting
                   at the end of a statement */
println 1 /* one */ + 2 /* two */

/**
 * such a nice comment
 */

【讨论】:

    【解决方案2】:

    您可以对每一行使用块 (/***/) 或单行注释 (//)。您应该在 sh 命令中使用“#”。

    屏蔽评论

    /*  
    post {
        success {
          mail to: "XXXXX@gmail.com", 
          subject:"SUCCESS: ${currentBuild.fullDisplayName}", 
          body: "Yay, we passed."
        }
        failure {
          mail to: "XXXXX@gmail.com", 
          subject:"FAILURE: ${currentBuild.fullDisplayName}", 
          body: "Boo, we failed."
        }
      }
    */

    单行

    // post {
    //     success {
    //       mail to: "XXXXX@gmail.com", 
    //       subject:"SUCCESS: ${currentBuild.fullDisplayName}", 
    //       body: "Yay, we passed."
    //     }
    //     failure {
    //       mail to: "XXXXX@gmail.com", 
    //       subject:"FAILURE: ${currentBuild.fullDisplayName}", 
    //       body: "Boo, we failed."
    //     }
    // }

    “sh”命令中的注释

            stage('Unit Test') {
                steps {
                    ansiColor('xterm'){
                      sh '''
                      npm test
                      # this is a comment in sh
                      '''
                    }
                }
            }

    【讨论】:

      【解决方案3】:

      评论在任何常见的 Java/Groovy 形式中都可以正常工作,但您不能目前使用 groovydoc 来处理您的 Jenkinsfile (s)。

      首先,groovydoc 在没有扩展名的文件上出现了奇妙的错误

      java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:498)
          at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
          at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)
      Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
          at java.lang.String.substring(String.java:1967)
          at org.codehaus.groovy.tools.groovydoc.SimpleGroovyClassDocAssembler.<init>(SimpleGroovyClassDocAssembler.java:67)
          at org.codehaus.groovy.tools.groovydoc.GroovyRootDocBuilder.parseGroovy(GroovyRootDocBuilder.java:131)
          at org.codehaus.groovy.tools.groovydoc.GroovyRootDocBuilder.getClassDocsFromSingleSource(GroovyRootDocBuilder.java:83)
          at org.codehaus.groovy.tools.groovydoc.GroovyRootDocBuilder.processFile(GroovyRootDocBuilder.java:213)
          at org.codehaus.groovy.tools.groovydoc.GroovyRootDocBuilder.buildTree(GroovyRootDocBuilder.java:168)
          at org.codehaus.groovy.tools.groovydoc.GroovyDocTool.add(GroovyDocTool.java:82)
          at org.codehaus.groovy.tools.groovydoc.GroovyDocTool$add.call(Unknown Source)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
          at org.codehaus.groovy.tools.groovydoc.Main.execute(Main.groovy:214)
          at org.codehaus.groovy.tools.groovydoc.Main.main(Main.groovy:180)
          ... 6 more
      

      ...其次,据我所知,groovy 脚本开头的 Javadoc 样式的注释被忽略。因此,即使您将 Jenkinsfile 复制/重命名为 Jenkinsfile.groovy,您也不会获得太多有用的输出。

      我希望能够使用一个

      /**
       * Document my Jenkinsfile's overall purpose here
       */
      

      在我的 Jenkinsfile 开头发表评论。 (还)没有这样的运气。

      groovydoc 处理在Jenkinsfile 中定义的类和方法,如果你将-private 传递给命令。

      【讨论】:

        【解决方案4】:

        Jenkinsfile 是用 groovy 编写的,它使用 Java(和 C)形式的 cmets:

        /* this
           is a
           multi-line comment */
        
        // this is a single line comment
        

        【讨论】:

        • 我在 sh 部分内的 jenkinsfile 上使用声明性管道,但它失败了,也许它在块级别上工作。 pipeline { ... stage('Set Tagging') { steps { sh ''' echo "env.m_time='$m_time'" &gt; ${params_file} echo "env.m_comp_tag='${BRANCH_NAME}_${m_time}_${BUILD_NUMBER}'" &gt;&gt; ${params_file} /* echo "env.docker_ws='/usr/local/lib/node_modules/${repo}'" &gt;&gt; ${params_file} */ ''' &lt; 导致错误 /bash 权限错误
        • sh 部分内,您需要使用shell 注释字符:#
        猜你喜欢
        • 2018-01-23
        • 1970-01-01
        • 2021-12-30
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 2014-12-15
        相关资源
        最近更新 更多