Bình luận có thể được thêm vào một Jenkinsfile?


177

Là những bình luận có thể trong một Jenkinsfile? Nếu vậy, cú pháp là gì?

Tôi đang sử dụng cú pháp đường ống khai báo.

Tôi muốn bình luận phần "bài" bên dưới cho đến khi máy chủ SMTP của tôi hoạt động.

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
Bất cứ khi nào bạn có câu hỏi ngôn ngữ như vậy về Jenkinsfiles, chỉ cần nhớ rằng chúng chủ yếu là các tập lệnh GROOVY. Vì vậy, có thể bạn sẽ tìm thấy nhiều kết quả hơn nếu bạn thêm từ khóa "Groovy" thay vì "Jenkinsfile".
Raúl Salinas-Monteagudo

Câu trả lời:


282

Jenkinsfile được viết bằng Groovy sử dụng dạng bình luận Java (và C):

/* this
   is a
   multi-line comment */

// this is a single line comment

3
Tôi đang sử dụng đường ống khai báo trên một jenkinsfile bên trong một phần sh và nó thất bại, có lẽ nó hoạt động ở cấp độ khối. 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} */ ''' < dẫn đến lỗi / lỗi quyền bash
Chen

6
Bên trong một shphần, bạn sẽ cần sử dụng ký tự nhận xét shell:#
BMitch

18

Bạn có thể sử dụng khối (/ *** /) hoặc nhận xét dòng đơn (//) cho mỗi dòng. Bạn nên sử dụng "#" trong lệnh sh.

Chặn bình luận

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

Dòng đơn

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

Nhận xét trong lệnh 'sh'

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


1

Nhận xét hoạt động tốt trong bất kỳ biểu mẫu Java / Groovy thông thường nào, nhưng hiện tại bạn không thể sử dụng groovydocđể xử lýJenkinsfile (các) hình thức của mình.

Đầu tiên, groovydoccuộn cảm trên các tệp không có phần mở rộng với lỗi tuyệt vời

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

... Và thứ hai, theo như tôi có thể nói về các cam kết kiểu Javadoc khi bắt đầu một groovykịch bản bị bỏ qua. Vì vậy, ngay cả khi bạn sao chép / đổi tên Jenkinsfilethành Jenkinsfile.groovy, bạn sẽ không nhận được nhiều kết quả hữu ích.

Tôi muốn có thể sử dụng một

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

bình luận khi bắt đầu Jenkinsfile của tôi. Không có may mắn như vậy (chưa).

groovydoc sẽ xử lý các lớp và các phương thức được định nghĩa trong của bạn Jenkinsfilenếu bạn truyền -privatevào lệnh.


1

Các tài liệu chính thức Jenkins chỉ đề cập đến các lệnh dòng đơn như sau:

// Declarative //

và ( xem )

pipeline {
    /* insert Declarative Pipeline here */
}

Cú pháp của Jenkinsfile dựa trên Groovy nên cũng có thể sử dụng cú pháp Groovy cho các bình luận . Trích dẫn:

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

hoặc là

/**
 * such a nice comment
 */
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.