[jenkins] Jenkins: Can comments be added to a Jenkinsfile?

Are comments possible in a Jenkinsfile? If so, what's the syntax?

I am using the declarative pipeline syntax.

I want to comment out the "post" section below until my SMTP server is working.

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: "[email protected]", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
    }
    failure {
      mail to: "X[email protected]", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
  }
}

This question is related to jenkins groovy comments jenkins-pipeline

The answer is


The Jenkinsfile is written in groovy which uses the Java (and C) form of comments:

/* this
   is a
   multi-line comment */

// this is a single line comment

You can use block (/***/) or single line comment (//) for each line. You should use "#" in sh command.

Block comment

_x000D_
_x000D_
/*  _x000D_
post {_x000D_
    success {_x000D_
      mail to: "[email protected]", _x000D_
      subject:"SUCCESS: ${currentBuild.fullDisplayName}", _x000D_
      body: "Yay, we passed."_x000D_
    }_x000D_
    failure {_x000D_
      mail to: "[email protected]", _x000D_
      subject:"FAILURE: ${currentBuild.fullDisplayName}", _x000D_
      body: "Boo, we failed."_x000D_
    }_x000D_
  }_x000D_
*/
_x000D_
_x000D_
_x000D_

Single Line

_x000D_
_x000D_
// post {_x000D_
//     success {_x000D_
//       mail to: "[email protected]", _x000D_
//       subject:"SUCCESS: ${currentBuild.fullDisplayName}", _x000D_
//       body: "Yay, we passed."_x000D_
//     }_x000D_
//     failure {_x000D_
//       mail to: "[email protected]", _x000D_
//       subject:"FAILURE: ${currentBuild.fullDisplayName}", _x000D_
//       body: "Boo, we failed."_x000D_
//     }_x000D_
// }
_x000D_
_x000D_
_x000D_

Comment in 'sh' command

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


The official Jenkins documentation only mentions single line commands like the following:

// Declarative //

and (see)

pipeline {
    /* insert Declarative Pipeline here */
}

The syntax of the Jenkinsfile is based on Groovy so it is also possible to use groovy syntax for comments. Quote:

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

or

/**
 * such a nice comment
 */

Comments work fine in any of the usual Java/Groovy forms, but you can't currently use groovydoc to process your Jenkinsfile (s).

First, groovydoc chokes on files without extensions with the wonderful error

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

... and second, as far as I can tell Javadoc-style commments at the start of a groovy script are ignored. So even if you copy/rename your Jenkinsfile to Jenkinsfile.groovy, you won't get much useful output.

I want to be able to use a

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

comment at the start of my Jenkinsfile. No such luck (yet).

groovydoc will process classes and methods defined in your Jenkinsfile if you pass -private to the command, though.


Questions with jenkins tag:

Maven dependencies are failing with a 501 error Jenkins pipeline how to change to another folder Docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock groovy.lang.MissingPropertyException: No such property: jenkins for class: groovy.lang.Binding How to solve npm install throwing fsevents warning on non-MAC OS? Run bash command on jenkins pipeline Try-catch block in Jenkins pipeline script How to print a Groovy variable in Jenkins? Jenkins pipeline if else not working Error "The input device is not a TTY" How to set and reference a variable in a Jenkinsfile Get git branch name in Jenkins Pipeline/Jenkinsfile Jenkins: Can comments be added to a Jenkinsfile? How to define and use function inside Jenkins Pipeline config? Environment variable in Jenkins Pipeline Rebuild Docker container on file changes How to use the curl command in PowerShell? Jenkins: Cannot define variable in pipeline stage Jenkins fails when running "service start jenkins" How to reset the use/password of jenkins on windows? How can I remove jenkins completely from linux Check if a file exists in jenkins pipeline Checkout Jenkins Pipeline Git SCM with credentials? Jenkins CI Pipeline Scripts not permitted to use method groovy.lang.GroovyObject How to retrieve current workspace using Jenkins Pipeline Groovy script? Conditional step/stage in Jenkins pipeline Jenkins Pipeline Wipe Out Workspace Jenkins "Console Output" log location in filesystem how to setup ssh keys for jenkins to publish via ssh How to list all `env` properties within jenkins pipeline job? How to pass boolean parameter value in pipeline to downstream jobs? Get absolute path to workspace directory in Jenkins Pipeline plugin Running stages in parallel with Jenkins workflow / pipeline Is it possible to capture the stdout from the sh DSL command in the pipeline How can I test a change made to Jenkinsfile locally? How can I trigger another job from a jenkins pipeline (jenkinsfile) with GitHub Org Plugin? How to change workspace and build record Root Directory on Jenkins? Jenkins vs Travis-CI. Which one would you use for a Open Source project? Jenkins - how to build a specific branch Run a command shell in jenkins How to change the JDK for a Jenkins job? Jenkins: Is there any way to cleanup Jenkins workspace? How to access parameters in a Parameterized Build? Is it ok to run docker from inside docker? Where can I find jenkins restful api reference? How to get build time stamp from Jenkins build variables? How do I clone a job in Jenkins? How to change port for jenkins window service when 8080 is being used Reading file from Workspace in Jenkins with Groovy script How/When does Execute Shell mark a build as failure in Jenkins?

Questions with groovy tag:

Jenkins pipeline how to change to another folder groovy.lang.MissingPropertyException: No such property: jenkins for class: groovy.lang.Binding Run bash command on jenkins pipeline Try-catch block in Jenkins pipeline script How to print a Groovy variable in Jenkins? Jenkins pipeline if else not working How to set and reference a variable in a Jenkinsfile Jenkins: Can comments be added to a Jenkinsfile? How to define and use function inside Jenkins Pipeline config? Jenkins: Cannot define variable in pipeline stage How to replace string in Groovy get current date and time in groovy? How to retrieve current workspace using Jenkins Pipeline Groovy script? Conditional step/stage in Jenkins pipeline How to list all `env` properties within jenkins pipeline job? How to pass boolean parameter value in pipeline to downstream jobs? How do I get the output of a shell command executed using into a variable from Jenkinsfile (groovy)? How can I trigger another job from a jenkins pipeline (jenkinsfile) with GitHub Org Plugin? How to access parameters in a Parameterized Build? Groovy: How to check if a string contains any element of an array? How do I add an element to a list in Groovy? Groovy built-in REST/HTTP client? for each loop in groovy Dynamically adding elements to ArrayList in Groovy Could not find method compile() for arguments Gradle Reading file from Workspace in Jenkins with Groovy script Access to build environment variables from a groovy script in a Jenkins build step (Windows) Groovy - Convert object to JSON string How to pass parameters or arguments into a gradle task Running Groovy script from the command line Groovy method with optional parameters how to fix groovy.lang.MissingMethodException: No signature of method: Checking if a collection is null or empty in Groovy Converting File to MultiPartFile Splitting String with delimiter Groovy Shell warning "Could not open/create prefs root node ..." Java/Groovy - simple date reformatting groovy: safely find a key in a map and return its value How to check if a directory containing a file exist? Map with Key as String and Value as List in Groovy Groovy - How to compare the string? String concatenation with Groovy Gradle does not find tools.jar Test only if variable is not null in if statement How to retrieve Jenkins build parameters using the Groovy API? Creating a Jenkins environment variable using Groovy Loop through Map in Groovy? How can I determine if a String is non-null and not only whitespace in Groovy? Including a groovy script in another groovy How to get just the parent directory name of a specific file

Questions with comments tag:

Way to create multiline comments in Bash? Jenkins: Can comments be added to a Jenkinsfile? /** and /* in Java Comments Where is the syntax for TypeScript comments documented? Multiple line comment in Python How do I add comments to package.json for npm install? How to comment multiple lines with space or indent Is there a shortcut to make a block comment in Xcode? How to comment and uncomment blocks of code in the Office VBA Editor Which comment style should I use in batch files? How to write a comment in a Razor view? What key shortcuts are to comment and uncomment code? How to "comment-out" (add comment) in a batch/cmd? R: Comment out block of code How can I add comments in MySQL? Comments in .gitignore? Commenting multiple lines in DOS batch file How to add comments into a Xaml file in WPF? Is there a way to create multiline comments in Python? How do you comment out code in PowerShell? multi line comment vb.net in Visual studio 2010 Comments in Markdown Is it possible to have a multi-line comments in R? How do I enter a multi-line comment in Perl? How to comment/uncomment in HTML code How do I comment on the Windows command line? Multi-Line Comments in Ruby? How do I comment out a block of tags in XML? single line comment in HTML Inline comments for Bash? In Java what is the syntax for commenting out multiple lines? How do you do block comments in YAML? How to comment in Vim's config files: ".vimrc"? How to comment a block in Eclipse? Can a CSV file have a comment? What's a quick way to comment/uncomment lines in Vim? What is the common header format of Python files? Commenting in a Bash script inside a multiline command Commenting out a set of lines in a shell script Do standard windows .ini files allow comments? PHP Function Comments PHP/MySQL: How to create a comment section in your website SQL comment header examples Commenting code in Notepad++ Why doesn't Python have multiline comments? Can comments be used in JSON? How comment a JSP expression? What is the best comment in source code you have ever encountered? Is there a way to comment out markup in an .ASPX page?

Questions with jenkins-pipeline tag:

Jenkins pipeline how to change to another folder Docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock Try-catch block in Jenkins pipeline script How to print a Groovy variable in Jenkins? Error "The input device is not a TTY" How to set and reference a variable in a Jenkinsfile Get git branch name in Jenkins Pipeline/Jenkinsfile Jenkins: Can comments be added to a Jenkinsfile? How to define and use function inside Jenkins Pipeline config? Environment variable in Jenkins Pipeline Jenkins: Cannot define variable in pipeline stage get current date and time in groovy? Check if a file exists in jenkins pipeline Checkout Jenkins Pipeline Git SCM with credentials? Jenkins CI Pipeline Scripts not permitted to use method groovy.lang.GroovyObject How to retrieve current workspace using Jenkins Pipeline Groovy script? Conditional step/stage in Jenkins pipeline Jenkins Pipeline Wipe Out Workspace How to list all `env` properties within jenkins pipeline job? How to pass boolean parameter value in pipeline to downstream jobs? Get absolute path to workspace directory in Jenkins Pipeline plugin Running stages in parallel with Jenkins workflow / pipeline How do I get the output of a shell command executed using into a variable from Jenkinsfile (groovy)? Is it possible to capture the stdout from the sh DSL command in the pipeline How can I test a change made to Jenkinsfile locally? How can I trigger another job from a jenkins pipeline (jenkinsfile) with GitHub Org Plugin? How to access parameters in a Parameterized Build? How can I execute Shell script in Jenkinsfile?