Bisakah komentar ditambahkan ke Jenkinsfile?

177

Apakah komentar mungkin dalam Jenkinsfile? Jika ya, bagaimana sintaksinya?

Saya menggunakan sintaksis pipa deklaratif.

Saya ingin mengomentari bagian "pos" di bawah sampai server SMTP saya berfungsi.

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
sumber
2
Setiap kali Anda memiliki pertanyaan bahasa semacam itu tentang Jenkinsfiles, ingatlah bahwa kebanyakan skrip GROOVY. Jadi sangat mungkin Anda akan menemukan lebih banyak hasil jika Anda menambahkan kata kunci "asyik" daripada "Jenkinsfile".
Raúl Salinas-Monteagudo

Jawaban:

284

Jenkinsfile ditulis dalam groovy yang menggunakan bentuk komentar Java (dan C):

/* this
   is a
   multi-line comment */

// this is a single line comment
BMitch
sumber
3
Saya menggunakan pipa deklaratif pada jenkinsfile di dalam bagian sh dan gagal, mungkin bekerja pada level blok. 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} */ ''' < menghasilkan kesalahan / kesalahan izin bash
Chen
6
Di dalam shbagian, Anda perlu menggunakan karakter komentar shell:#
BMitch
18

Anda dapat menggunakan blok (/ *** /) atau komentar satu baris (//) untuk setiap baris. Anda harus menggunakan "#" dalam perintah sh.

Blokir komentar

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

Garis tunggal

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

Komentar dalam perintah 'sh'

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

sy456
sumber
1

Komentar berfungsi dengan baik di salah satu formulir Java / Groovy yang biasa, tetapi saat ini Anda tidak dapat menggunakannya groovydocuntuk memprosesJenkinsfile (s).

Pertama, groovydoctersedak file tanpa ekstensi dengan kesalahan luar biasa

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

... dan kedua, sejauh yang saya tahu komitmen gaya Javadoc di awal groovyskrip diabaikan. Jadi, bahkan jika Anda menyalin / mengganti nama Jenkinsfileke Jenkinsfile.groovy, Anda tidak akan mendapatkan banyak hasil yang bermanfaat.

Saya ingin dapat menggunakan

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

berkomentar di awal Jenkinsfile saya. Belum ada keberuntungan seperti itu.

groovydoc akan memproses kelas dan metode yang ditentukan di Anda Jenkinsfilejika Anda meneruskan -privateke perintah.

Craig Ringer
sumber
1

The dokumentasi resmi Jenkins hanya menyebutkan perintah baris seperti berikut:

// Declarative //

dan ( lihat )

pipeline {
    /* insert Declarative Pipeline here */
}

Sintaks Jenkinsfile didasarkan pada Groovy sehingga juga memungkinkan untuk menggunakan sintaks groovy untuk komentar . Mengutip:

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

atau

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