簡體   English   中英

Jenkins Multibranch Pipeline缺乏對PathRestriction觸發器的支持

[英]Jenkins Multibranch Pipeline Lacks Support for PathRestriction triggers

目標

針對Java更改更頻繁地構建我們的repo,而對於docker基礎映像更改則更少。

情況

我們有兩個multibranch管道作業: build-javabuild-base-docker 我們希望build-base-docker僅在推送包含/docker下的更改時才觸發主分支和功能分支。

途徑

關注cloudbees 如何自定義Pipleine Multibranch的Checkout? doc我們實施了以下更改。

但是,當我們不希望它執行時,對src/main/java/foo.java會觸發該分支的build-base-docker src/main/java/foo.java作業。

這真的只是JENKINS-36195錯誤還是我做錯了導致意外觸發?

node('java-build') {

stage ('git checkout') {
    checkout([
            $class: 'GitSCM',
            branches: scm.branches,
            extensions: scm.extensions + [
                [$class: 'PathRestriction', excludedRegions: '.*', includedRegions: 'docker/.*']
            ],
            userRemoteConfigs: [[credentialsId: 'our-git-repo-deploy-key', url: 'git@github.com:we/our-repo.git']]

    ])
}
...
}

如果Jenkins無法很好地處理多分支管道的路徑限制,那么我們可以從管道代碼(或從共享庫中)來減少重復。

如果我們有多個結帳,這可能會產生一些問題,因為所有報告都會報告。 但是,如果它們不使用相同的布局,則誤報的風險很低。 例如,jenkins-shared-library通常會看到/ vars目錄下的更改而不是docker。

node() {
    if ( ! doChangesRequireBuild('^docker/.*')) {
        currentBuild.result = 'ABORTED'
        return 'Changes not made to docker/... base image files. Aborting build'
    }
}

/**
 * Provide List of changed file paths since last successful build
 */
def getChangedFiles() {
    def found = []

    for (def changeSet in currentBuild.getChangeSets()) {
        for (def change in changeSet.logs) {
            for (def path in change.paths) {
                found.add(path.path)
            }
        }
    }
    return found
}

/**
 * do changes since last successful build mandate a build?
 * @param pathRegex path restriction regex pattern
 * @return true if any file paths match the regex
 */
boolean doChangesRequireBuild(def pathRegex) {

    for (def path in getChangedFiles()) {
        if ( path ==~ pathRegex) {
            return true
        }
    }
    return false
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM