¿Se pueden agregar comentarios a un archivo Jenkins?

177

¿Son posibles los comentarios en un archivo Jenkins? Si es así, ¿cuál es la sintaxis?

Estoy usando la sintaxis declarativa de canalización.

Quiero comentar la sección "publicación" a continuación hasta que mi servidor SMTP esté funcionando.

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: "[email protected]", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
  }
}
danday74
fuente
2
Siempre que tenga preguntas de lenguaje sobre Jenkinsfiles, recuerde que en su mayoría son scripts MARAVILLOSOS. Por lo tanto, es posible que encuentre más resultados si agrega la palabra clave "maravilloso" en lugar de "Jenkinsfile".
Raúl Salinas-Monteagudo

Respuestas:

284

El Jenkinsfile está escrito en groovy que usa la forma de comentarios Java (y C):

/* this
   is a
   multi-line comment */

// this is a single line comment
BMitch
fuente
3
Estoy usando una tubería declarativa en un archivo jenkins dentro de una sección sh y falla, tal vez funciona en un nivel de bloque. pipeline { ... stage('Set Tagging') { steps { sh ''' echo "env.m_time='$m_time'" > ${params_file} echo "env.m_comp_tag='${BRANCH_NAME}_${m_time}_${BUILD_NUMBER}'" >> ${params_file} /* echo "env.docker_ws='/usr/local/lib/node_modules/${repo}'" >> ${params_file} */ ''' < da como resultado error / error de permisos de bash
Chen
66
Dentro de una shsección, necesitaría usar el carácter de comentario de shell:#
BMitch
18

Puede usar el bloque (/ *** /) o el comentario de una sola línea (//) para cada línea. Debe usar "#" en el comando sh.

Bloquear comentario

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

Linea sola

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

Comentario en el comando 'sh'

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

sy456
fuente
1

Los comentarios funcionan bien en cualquiera de los formularios habituales de Java / Groovy, pero actualmente no puede utilizarlos groovydocpara procesar su Jenkinsfile(s).

Primero, se groovydocahoga en archivos sin extensiones con el maravilloso 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

... y en segundo lugar, por lo que puedo decir, se ignoran los comentarios de estilo Javadoc al comienzo de un groovyscript. Entonces, incluso si copia / cambia el nombre de Jenkinsfilea Jenkinsfile.groovy, no obtendrá resultados muy útiles.

Quiero poder usar un

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

comentar al comienzo de mi Jenkinsfile. No hay tanta suerte (todavía).

groovydoc sin embargo, procesará las clases y los métodos definidos en su Jenkinsfilesi pasa -privateal comando.

Craig Ringer
fuente
1

La documentación oficial de Jenkins solo menciona comandos de línea única como los siguientes:

// Declarative //

y ( ver )

pipeline {
    /* insert Declarative Pipeline here */
}

La sintaxis del Jenkinsfile se basa en Groovy, por lo que también es posible utilizar una sintaxis maravillosa para comentarios . Citar:

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

o

/**
 * such a nice comment
 */
Michael Kemmerzell
fuente