สามารถเพิ่มความคิดเห็นในไฟล์เจนกินส์ได้หรือไม่?


177

ความคิดเห็นเป็นไปได้ใน Jenkinsfile? ถ้าใช่ไวยากรณ์คืออะไร

ฉันใช้ไวยากรณ์ไปป์ไลน์ที่ประกาศได้

ฉันต้องการแสดงความคิดเห็นในส่วน "โพสต์" ด้านล่างจนกว่าเซิร์ฟเวอร์ SMTP ของฉันจะใช้งานได้

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
เมื่อใดก็ตามที่คุณมีคำถามภาษาเกี่ยวกับ Jenkinsfiles เพียงจำไว้ว่าพวกเขาส่วนใหญ่เป็นสคริปต์ที่น่ากลัว ดังนั้นจึงเป็นไปได้ที่คุณจะพบผลลัพธ์มากขึ้นหากคุณเพิ่มคำหลัก "groovy" มากกว่า "Jenkinsfile"
Raúl Salinas-Monteagudo

คำตอบ:


282

Jenkinsfile เขียนด้วย groovy ซึ่งใช้รูปแบบความคิดเห็น Java (และ C):

/* this
   is a
   multi-line comment */

// this is a single line comment

3
ฉันใช้ไปป์ไลน์ที่ประกาศใน jenkinsfile ภายในส่วน sh และมันล้มเหลวบางทีมันอาจทำงานได้ในระดับบล็อก 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} */ ''' < ส่งผลให้เกิดข้อผิดพลาด / ข้อผิดพลาดการอนุญาตทุบตี
เฉิน

6
ภายในshส่วนคุณจะต้องใช้อักขระแสดงความคิดเห็นเชลล์:#
BMitch

18

คุณสามารถใช้บล็อก (/ *** /) หรือความคิดเห็นบรรทัดเดียว (//) สำหรับแต่ละบรรทัด คุณควรใช้ "#" ในคำสั่ง sh

ปิดกั้นความคิดเห็น

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

แถวเดียว

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

แสดงความคิดเห็นในคำสั่ง 'sh'

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


1

ความคิดเห็นทำงานได้ดีในรูปแบบใด ๆ ของ Java / Groovy แต่ตอนนี้คุณไม่สามารถใช้groovydocในการประมวลผลของคุณJenkinsfileได้

ก่อนอื่นgroovydocฉายาไฟล์ที่ไม่มีนามสกุลด้วยข้อผิดพลาดที่ยอดเยี่ยม

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

... และที่สองเท่าที่ฉันสามารถบอกได้ว่าคอมมิชชันสไตล์ Javadoc ที่จุดเริ่มต้นของgroovyสคริปต์จะถูกละเว้น ดังนั้นแม้ว่าคุณจะคัดลอก / เปลี่ยนชื่อของคุณJenkinsfileเป็นJenkinsfile.groovyคุณจะไม่ได้รับผลประโยชน์มากนัก

ฉันต้องการที่จะใช้

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

แสดงความคิดเห็นที่จุดเริ่มต้นของ Jenkinsfile ของฉัน ไม่มีโชคเช่นนี้

groovydoc จะประมวลผลคลาสและเมธอดที่กำหนดไว้ในของคุณJenkinsfileหากคุณผ่าน-privateไปยังคำสั่ง


1

เอกสารเจนกินส์อย่างเป็นทางการเพียงกล่าวถึงคำสั่งบรรทัดเดียวเช่นต่อไปนี้:

// Declarative //

และ ( ดู )

pipeline {
    /* insert Declarative Pipeline here */
}

ไวยากรณ์ของ Jenkinsfile จะขึ้นอยู่กับGroovyดังนั้นจึงเป็นไปได้ที่จะใช้ไวยากรณ์ Groovy สำหรับความคิดเห็น อ้างถึง:

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

หรือ

/**
 * such a nice comment
 */
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.