Jenkinsfile에 주석을 추가 할 수 있습니까?


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"대신 "groovy"라는 키워드를 추가하면 더 많은 결과를 얻을 수 있습니다.
Raúl Salinas-Monteagudo

답변:


282

Jenkinsfile은 Java (및 C) 형식의 주석을 사용하는 그루비로 작성되었습니다.

/* this
   is a
   multi-line comment */

// this is a single line comment

3
sh 섹션 내부의 jenkinsfile에서 선언 파이프 라인을 사용하고 있으며 실패합니다. 아마도 블록 수준에서 작동합니다. 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} */ ''' < 오류 / bash 권한 오류 발생
Chen

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 양식에서 잘 작동하지만 현재는 (s) 를 처리 하는 데 사용할 수 없습니다 .groovydocJenkinsfile

첫째, 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

... 그리고 둘째, groovy스크립트 시작 부분에서 Javadoc 스타일의 commments를 무시할 수있는 한 무시됩니다. 복사 그래서 경우에도 / 당신의 이름을 변경 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.