Czy można dodawać komentarze do pliku Jenkins?


177

Czy komentarze są możliwe w pliku Jenkinsfile? Jeśli tak, jaka jest składnia?

Używam deklaratywnej składni potoku.

Chcę skomentować sekcję „post” poniżej, dopóki mój serwer SMTP nie będzie działał.

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

2
Ilekroć masz takie pytania językowe dotyczące plików Jenkinsfiles, pamiętaj, że są to głównie skrypty GROOVY. Jest więc możliwe, że znajdziesz więcej wyników, jeśli dodasz słowo kluczowe „groovy” zamiast „Jenkinsfile”.
Raúl Salinas-Monteagudo

Odpowiedzi:


282

Plik Jenkinsfile jest napisany w stylu groovy, który wykorzystuje formę komentarzy w języku Java (i C):

/* this
   is a
   multi-line comment */

// this is a single line comment

3
Używam potoku deklaratywnego w pliku jenkinsfile wewnątrz sekcji sh i nie działa, być może działa na poziomie bloku. 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} */ ''' < powoduje błąd / błąd uprawnień bash
Chen

6
Wewnątrz shsekcji musiałbyś użyć znaku komentarza powłoki:#
BMitch,

18

Możesz użyć bloku (/ *** /) lub komentarza jednowierszowego (//) dla każdego wiersza. Powinieneś użyć "#" w poleceniu sh.

Zablokuj komentarz

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

Pojedyncza linia

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

Komentarz w komendzie „sh”

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


1

Komentarze działają dobrze w każdym ze zwykłych formularzy Java / Groovy, ale obecnie nie można ich używać groovydocdo przetwarzania swoich Jenkinsfile.

Po pierwsze, groovydocdławi się plikami bez rozszerzeń z cudownym błędem

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

... a po drugie, o ile wiem, polecenia w stylu Javadoc na początku groovyskryptu są ignorowane. Więc nawet jeśli skopiujesz / zmienisz nazwę Jenkinsfiledo Jenkinsfile.groovy, nie uzyskasz zbyt użytecznego wyniku.

Chcę móc korzystać z

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

komentarz na początku mojego pliku Jenkins. Nie ma takiego szczęścia (jeszcze).

groovydoc będzie przetwarzał klasy i metody zdefiniowane w twoim, Jenkinsfilejeśli przejdziesz -privatedo polecenia.


1

Oficjalna dokumentacja Jenkins wspomina tylko pojedynczej linii poleceń tak:

// Declarative //

i ( patrz )

pipeline {
    /* insert Declarative Pipeline here */
}

Składnia pliku Jenkins jest oparta na Groovy, więc do komentarzy można również użyć składni groovy . Zacytować:

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

lub

/**
 * such a nice comment
 */
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.