233 votes

Jenkins : Peut-on ajouter des commentaires à un fichier Jenkins ?

Les commentaires sont-ils possibles dans un fichier Jenkins ? Si oui, quelle est la syntaxe ?

J'utilise la syntaxe déclarative du pipeline.

Je veux commenter la section "post" ci-dessous jusqu'à ce que mon serveur SMTP fonctionne.

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

3 votes

Chaque fois que vous vous posez des questions sur les Jenkinsfiles, rappelez-vous qu'il s'agit principalement de scripts GROSSES. Il est donc possible que vous trouviez plus de résultats si vous ajoutez le mot clé "groovy" plutôt que "Jenkinsfile".

371voto

BMitch Points 3744

Le fichier Jenkins est écrit en groovy qui utilise la forme Java (et C) des commentaires :

/* this
   is a
   multi-line comment */

// this is a single line comment

3 votes

J'utilise un pipeline déclaratif sur un fichier jenkins à l'intérieur d'une section sh et cela échoue, peut-être que cela fonctionne au niveau du bloc. 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} */ ''' < donne lieu à l'erreur /bash permissions error

9 votes

A l'intérieur d'un sh vous devez utiliser le caractère de commentaire de l'interpréteur de commandes : #

29voto

sy456 Points 530

Vous pouvez utiliser un bloc (/***/) ou un commentaire simple (//) pour chaque ligne. Vous devez utiliser "#" dans la commande sh.

Commentaire sur le bloc

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

Ligne unique

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

Commentaire dans la commande 'sh

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

3voto

Michael Kemmerzell Points 3274

Le site la documentation officielle de Jenkins ne mentionne que les commandes à ligne unique comme les suivantes :

// Declarative //

et ( voir )

pipeline {
    /* insert Declarative Pipeline here */
}

La syntaxe du fichier Jenkins est basée sur Groovy il est donc également possible d'utiliser syntaxe groovy pour les commentaires . Citation :

/* 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
 */

1voto

Craig Ringer Points 72371

Les commentaires fonctionnent bien dans toutes les formes habituelles de Java/Groovy, mais vous ne peut pas utiliser actuellement groovydoc pour traiter votre Jenkinsfile (s).

D'abord, groovydoc s'étrangle sur les fichiers sans extension avec la merveilleuse erreur

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

... et deuxièmement, pour autant que je sache, les commentaires de style Javadoc au début d'un fichier groovy script sont ignorés. Ainsi, même si vous copiez/renommez votre Jenkinsfile à Jenkinsfile.groovy vous n'obtiendrez pas beaucoup de résultats utiles.

Je veux pouvoir utiliser un

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

au début de mon fichier Jenkins. Pas de chance (encore).

groovydoc sera les classes et méthodes de traitement définies dans votre Jenkinsfile si vous passez -private à la commande, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X