7

나는 jitkinsfile에서 git commit 메시지를 얻으려고 시도하고 커밋 메시지를 기반으로 빌드를 막으려 고했다.커밋 메시지에 [ci skip]이 포함되어 있으면 git의 최신 커밋 메시지를 받고 jenkins 빌드를 방지하는 방법은 무엇입니까?

env.GIT_COMMIT jenkinsfile에서 커밋 정보를 반환하지 않습니다.

커밋 메시지에 [ci skip]이 포함되어 있으면 최신 커밋 메시지를 받고 jenkins 빌드를 방지하는 방법은 무엇입니까?

+2

sh "git log -1"을 시도하고 관련 텍스트를 grep하기 때문에 SUCCESS으로 설정할 수 없습니다. – Amityo

+0

@Amityo : 정말 고마워. 메시지가 [ci 건너 뛰기] 내용을 포함하는 경우 젠킨스가 jenkinsfile에서 빌드되는 것을 방지하는 방법? –

답변

10

빌드가 [CI 건너 뛰기]가 마지막 자식 로그에 제공 될 때 통과하지만, 실제 빌드 코드 (첫 번째 에코 문으로 교체)

node { 
    checkout scm 
    result = sh (script: "git log -1 | grep '\\[ci skip\\]'", returnStatus: true) 
    if (result != 0) { 
    echo "performing build..." 
    } else { 
    echo "not running..." 
    } 
} 
+1

'sh' 사용법에 대한 더 자세한 정보는 https://issues.jenkins-ci.org/browse/JENKINS-26133 –

3

내가 쉽게 할 수 생각을 실행하지 않습니다 여러 가지 파이프 라인 작업 구성에 지점 소스> 추가 동작> 폴링 특정 메시지 multi branch pipeline job configuration

+0

이 접근법을 사용할 때, $ CHANGE_ID는 Jenkinsfile에서 사용할 수 없습니다. –

5

저도 같은 문제를 가지고 함께 커밋을 무시 않습니다. 나는 파이프 라인을 사용하고있다. 나는 shared library을 구현하여이 문제를 해결했습니다. 내 Jenkinsfile에서, 그리고

// vars/ciSkip.groovy 

def call(Map args) { 
    if (args.action == 'check') { 
     return check() 
    } 
    if (args.action == 'postProcess') { 
     return postProcess() 
    } 
    error 'ciSkip has been called without valid arguments' 
} 

def check() { 
    env.CI_SKIP = "false" 
    result = sh (script: "git log -1 | grep '.*\\[ci skip\\].*'", returnStatus: true) 
    if (result == 0) { 
     env.CI_SKIP = "true" 
     error "'[ci skip]' found in git commit message. Aborting." 
    } 
} 

def postProcess() { 
    if (env.CI_SKIP == "true") { 
     currentBuild.result = 'NOT_BUILT' 
    } 
} 

:

라이브러리의 코드는 다음입니다

pipeline { 
    stages { 
    stage('prepare') { steps { ciSkip action: 'check' } } 
    // other stages here ... 
    } 
    post { always { ciSkip action: 'postProcess' } } 
} 

당신이 볼 수 있듯이이 빌드는 NOT_BUILT로 표시됩니다. 원할 경우 ABORTED으로 변경할 수 있지만 a build result can only get worse

+0

감사합니다. 훌륭한 작품입니다! #testedAndApproved –