首页 > 解决方案 > 在 Jenkins 管道作业中使用包含区域进行 SCM 轮询

问题描述

我正在使用 GitLab。给定多个目录,例如文件夹 1、文件夹 2、文件夹 3。我希望仅在 folder1 下有任何更改时才运行该作业。有没有人能够让包含区域在 Jenkins 管道工作中工作。

    checkout(
      [
        $class: 'GitSCM', 
        branches: [[name: '*/master']], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'PathRestriction', excludedRegions: '', includedRegions: 'folder1/.*']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'user', url: 'ssh://something/experiment.git']]
      ]
    )

标签: jenkinsjenkins-pipeline

解决方案


我设法让它工作。由于结帐将在我们的 Jenkins 中跨项目使用,因此我编写了共享库以使其易于使用。

示例:strToSparseCheckout.groovy

#!/usr/bin/env groovy

import hudson.plugins.git.extensions.impl.SparseCheckoutPath

def call(paths) {
    def list = paths.split('\n')
    def sparsePaths = []
    def isDefaultAdded = false
    list.each {
        def path = it - '/.*'
        def sparsePath = new SparseCheckoutPath(path)
        sparsePaths.push(sparsePath)
    }

    return sparsePaths
}

示例:sparseCheckout.groovy

#!/usr/bin/env groovy

def call(Map namedargs) {
    checkout(
        [
            $class: 'GitSCM',
            branches: [[name: "${namedargs.branch}"]],
            extensions: [
                [$class: 'LocalBranch', localBranch: '**'],
                [$class: 'RelativeTargetDirectory', relativeTargetDir: "${namedargs.target_dir}"],
                [$class: 'SparseCheckoutPaths', sparseCheckoutPaths: strToSparseCheckout("${namedargs.included_regions}")],
                [$class: 'PathRestriction', excludedRegions: """${namedargs.excluded_regions}""", includedRegions: """${namedargs.included_regions}"""]
            ],
            userRemoteConfigs: [[credentialsId: 'user', url: "${namedargs.url}"]]
        ]
    )
}

在管道中,我们可以调用 sparseCheckout 共享库。

pipeline {
    stage('Checkout') {
        sparseCheckout(
            [
                url: 'ssh://path.to.git/something.git',
                branch: 'refs/heads/master',
                target_dir: 'something',
                excluded_regions: "${params.excluded_regions}",
                included_regions: "${params.included_regions}"
            ]
        )
    }
}

推荐阅读