Os comentários podem ser adicionados a um arquivo Jenkins?

177

Os comentários são possíveis em um arquivo Jenkins? Em caso afirmativo, qual é a sintaxe?

Estou usando a sintaxe do pipeline declarativo.

Quero comentar a seção "postar" abaixo até que meu servidor SMTP esteja 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
fonte
2
Sempre que você tiver perguntas desse tipo sobre o Jenkinsfiles, lembre-se de que eles são principalmente scripts GROOVY. Portanto, é possível que você encontre mais resultados se adicionar a palavra-chave "groovy" em vez de "Jenkinsfile".
Raúl Salinas-Monteagudo

Respostas:

284

O arquivo Jenkins é escrito no groovy, que usa a forma de comentários Java (e C):

/* this
   is a
   multi-line comment */

// this is a single line comment
BMitch
fonte
3
Estou usando o pipeline declarativo em um arquivo jenkins dentro de uma seção sh e ele falha, talvez funcione em um nível de bloco. 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} */ ''' < resulta em erro / erro de permissões do bash
Chen
6
Dentro de uma shseção, você precisaria usar o caractere de comentário do shell:#
BMitch 3/17/17
18

Você pode usar o bloco (/ *** /) ou o comentário de linha única (//) para cada linha. Você deve usar "#" no comando sh.

Bloquear comentário

/*  
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."
    }
  }
*/

Única linha

// 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."
//     }
// }

Comentar no comando 'sh'

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

sy456
fonte
1

Os comentários funcionam bem em qualquer um dos formulários Java / Groovy usuais, mas atualmente você não pode usar groovydocpara processar seusJenkinsfile .

Primeiro, groovydocengasga com arquivos sem extensões com o maravilhoso erro

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

... e segundo, até onde posso dizer, comentários no estilo Javadoc no início de um groovyscript são ignorados. Portanto, mesmo que você copie / renomeie seu Jenkinsfilepara Jenkinsfile.groovy, não obterá muita saída útil.

Eu quero poder usar um

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

comentar no início do meu Jenkinsfile. Não tem essa sorte (ainda).

groovydoc vai processar classes e métodos definidos em seu Jenkinsfilese você passar -privatepara o comando, no entanto.

Craig Ringer
fonte
1

A documentação oficial do Jenkins menciona apenas comandos de linha única como os seguintes:

// Declarative //

e ( ver )

pipeline {
    /* insert Declarative Pipeline here */
}

A sintaxe do arquivo Jenkins é baseada no Groovy, portanto, também é possível usar a sintaxe do groovy para comentários . 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 */

ou

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