如何将Jenkins构建步骤限制为仅给定变更集?

时间:2019-09-10 19:11:15

标签: jenkins jenkins-pipeline pipeline changeset

我正在使用Jenkins声明性管道,并且仅在仅在指定目录中进行更改的情况下,我才尝试执行特定的构建阶段。

所以我的目录层次结构看起来像这样:

root
 ├─ some-directory
 |   ├─ sub-directory
 |   |   └─ file-1
 |   ├─ file-1
 |   └─ file-2
 ├─ another-directory
 |   ├─ file-1
 |   └─ file-2
 ├─ file-x
 └─ file-y

这是当前代码:

stage ("Deploy branches") {
    agent any

    when { 
        allOf {
            not { branch 'master' }
            changeset "some-directory/**"
        }
    }

    steps {
        // do stuff
    }
}

无论何时在“ some-directory”中进行了某些更改,而且在“ some-directory”之外的某些内容也进行了更改,都会部署此选项。如果只更改了“ some-directory”的内容,我希望运行此步骤。

the Jenkins docs关于“ changeset”指令的内容是这样的:

  

变更集

     

如果构建的SCM变更集包含一个或多个与给定字符串或glob匹配的文件,则执行阶段。示例:当{changeset“ ** / *。js”}

     

默认情况下,路径匹配将不区分大小写,可以使用caseSensitive参数将其关闭,例如:when {changeset glob:“ ReadMe。*”,caseSensitive:true}

“如果变更集包含一个或多个与给定字符串或glob匹配的文件。”意味着管道按设计工作,但我需要的是

“如果变更集中的文件仅匹配 给定的字符串或glob。”

不幸的是,我在文档或互联网上的其他地方找不到任何有关此的信息。

您对我如何做到这一点有任何建议吗?

2 个答案:

答案 0 :(得分:2)

我相信.on无法做到您想要实现的目标;但是可以用tbody.append( $('<tr class="table__row">') .append($(`<td class="table__content" data-heading="De" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][1]).on("click", mar1ld)) // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^^^^ .append($(`<td class="table__content" data-heading="Tipo" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][8]).on("click", mar1ld)) .append($(`<td class="td-info table__content" data-heading="Assunto" data-alerta="${ Ida }, ${ Paraa }" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][2]).on("click", mar1ld)) .append($(`<td class="table__content" data-heading="Conteúdo" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][3]).on("click", mar1ld)) .append($(`<td class="table__content" data-heading="Estado" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][4]).on("click", mar1ld)) .append($(`<td class="table__content" data-heading="Recebido" style="font-weight: ${ Stat != '0' ? 'bold' : 'normal' }; font-size: 90%">`).append(data[i][5]).on("click", mar1ld)) ) 替换它来计算Git差异并进行相关过滤。我有一个类似的问题,对我来说很好。

以下内容适用于您的用例:

changeset

(这是与我的用例expression进行硬编码的比较;如果不够复杂,则可以使用一些包含pull-request的目标分支的Jenkins变量。)

答案 1 :(得分:0)

一些旧的 jenkins 管道版本不支持 when 语句。

您也可以检查这样的更改:

def rc = sh(
  script: "git status -s ${dir} | grep -q ${dir}",
  returnStatus: true
)
if(!rc) {
  doSomething(dir)
}

相关问题