使用多分支工作流清理构建

Clean builds with Multibranch Workflow

使用 Multibranch Workflow,签出命令如下所示

checkout scm

我找不到告诉 Jenkins 执行干净结帐的方法。 "clean," 我的意思是它应该从工作区中删除所有不受版本控制的文件。

首先,您不能假设工作流作业与自由式作业一样具有工作空间。实际上,一个工作流作业可以使用多个工作空间(每个 nodews 块一个)。

也就是说,我要提议的是一种 hacky:在结帐前修改 scm 对象以设置 CleanCheckout 分机(您必须在那里批准一些呼叫)。

import hudson.plugins.git.extensions.impl.CleanCheckout
scm.extensions.replace(new CleanCheckout())
checkout scm

但我更喜欢 Christopher Orr 的提议,在 checkout (sh 'git clean -fdx') 之后使用 shell 步骤。

Jenkins 当前包含一个用于生成 groovy 管道语法的页面。选择结帐步骤,您应该能够添加您习惯的所有其他选项。

我生成了以下内容,它应该可以满足您的要求:

checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'ssh://repo/location.git']]]

我 运行 遇到了同样的问题,这是我的解决方法。 我为结帐创建了一个新的 scm 对象,并使用 CleanBeforeCheckout 扩展了扩展。但我保留了其他配置,如分支和 userRemoteConfigs。

checkout([
    $class: 'GitSCM',
    branches: scm.branches,
    extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']],
    userRemoteConfigs: scm.userRemoteConfigs
])

它仍然不完美,因为你必须创建一个新对象:(

我不确定这是否回答了最初的问题(我不知道是否打算在工作区中保留一些文件)但为什么不先删除工作区,这样可以清理干净结帐:

stage ('Clean') {
    deleteDir()
}

stage ('Checkout') {
    checkout scm 
}

配置源时可以添加行为。 clean before checkoutclean after checkoutWipe out repository and force clone。这消除了向声明性/脚本化管道添加逻辑的需要。

添加 Christopher-Orr 的评论作为对 just do 的回答:

stage('Checkout') {
  checkout scm
  sh 'git clean -fdx'
}