使用多分支工作流清理构建
Clean builds with Multibranch Workflow
使用 Multibranch Workflow,签出命令如下所示
checkout scm
我找不到告诉 Jenkins 执行干净结帐的方法。 "clean," 我的意思是它应该从工作区中删除所有不受版本控制的文件。
首先,您不能假设工作流作业与自由式作业一样具有工作空间。实际上,一个工作流作业可以使用多个工作空间(每个 node
或 ws
块一个)。
也就是说,我要提议的是一种 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 checkout
、clean after checkout
和 Wipe out repository and force clone
。这消除了向声明性/脚本化管道添加逻辑的需要。
添加 Christopher-Orr 的评论作为对 just do 的回答:
stage('Checkout') {
checkout scm
sh 'git clean -fdx'
}
使用 Multibranch Workflow,签出命令如下所示
checkout scm
我找不到告诉 Jenkins 执行干净结帐的方法。 "clean," 我的意思是它应该从工作区中删除所有不受版本控制的文件。
首先,您不能假设工作流作业与自由式作业一样具有工作空间。实际上,一个工作流作业可以使用多个工作空间(每个 node
或 ws
块一个)。
也就是说,我要提议的是一种 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 checkout
、clean after checkout
和 Wipe out repository and force clone
。这消除了向声明性/脚本化管道添加逻辑的需要。
添加 Christopher-Orr 的评论作为对 just do 的回答:
stage('Checkout') {
checkout scm
sh 'git clean -fdx'
}