使用Multibranch Workflow清理构建

时间:2015-12-10 22:40:33

标签: jenkins jenkins-workflow

使用Multibranch Workflow,签出的命令看起来像

checkout scm

我找不到告诉詹金斯执行干净结账的方法。通过“干净”,我的意思是它应该从工作区中删除所有不受版本控制的文件。

6 个答案:

答案 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)

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

说,我要建议的是一种hacky:在结账前修改scm对象以设置CleanCheckout扩展名(你必须批准那里的一些电话)。

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

但我更喜欢Christopher Orr的建议,在checkoutsh '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)

workflow behavior

在配置源时可以添加行为。 clean before checkoutclean after checkoutWipe out repository and force clone。这样就无需向声明/脚本管道添加逻辑。

答案 5 :(得分:0)

添加 Christopher-Orr 的评论作为答案:

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