使用Multibranch Workflow,签出的命令看起来像
checkout scm
我找不到告诉詹金斯执行干净结账的方法。通过“干净”,我的意思是它应该从工作区中删除所有不受版本控制的文件。
答案 0 :(得分:9)
我不确定这是否回答了原始问题(我无法判断是否意图将某些文件保留在工作区中)但为什么不首先删除工作区,这样可以进行干净的检查:
stage ('Clean') {
deleteDir()
}
stage ('Checkout') {
checkout scm
}
答案 1 :(得分:4)
我遇到了同样的问题,这是我的解决方法。 我为结帐创建了一个新的scm对象,并使用CleanBeforeCheckout扩展了扩展。但我保留了其他配置,如branches和userRemoteConfigs。
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']],
userRemoteConfigs: scm.userRemoteConfigs
])
它仍然不完美,因为你必须创建一个新对象:(
答案 2 :(得分:2)
首先,您不能假设工作流作业具有与自由式作业相同的工作空间。实际上,工作流作业可以使用多个工作区(每个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步骤。
答案 3 :(得分:0)
Jenkins目前包含一个生成groovy管道语法的页面。选择结帐步骤,您应该能够添加您习惯使用的所有其他选项。
我生成了以下内容,它可以做你想要的:
checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'ssh://repo/location.git']]]
答案 4 :(得分:0)
在配置源时可以添加行为。 clean before checkout
,clean after checkout
和Wipe out repository and force clone
。这样就无需向声明/脚本管道添加逻辑。
答案 5 :(得分:0)
添加 Christopher-Orr 的评论作为答案:
stage('Checkout') {
checkout scm
sh 'git clean -fdx'
}