Jenkins 使用多分支工作流清理构建
使用多分支工作流,签出命令如下所示Jenkins 使用多分支工作流清理构建,jenkins,jenkins-workflow,Jenkins,Jenkins Workflow,使用多分支工作流,签出命令如下所示 checkout scm 我找不到办法让詹金斯进行一次干净的结账。所谓“清理”,我的意思是它应该从工作区中删除所有不受版本控制的文件。首先,您不能假设工作流作业有一个与自由式作业相同的工作区。实际上,工作流作业可以使用多个工作区(每个节点或ws块对应一个工作区) 话虽如此,我要提出的是一种黑客行为:在签出之前修改scm对象,以设置CleanCheckout扩展(您必须在那里批准一些调用) 但是我更喜欢Christopher Orr的建议,在签出之后使用she
checkout scm
我找不到办法让詹金斯进行一次干净的结账。所谓“清理”,我的意思是它应该从工作区中删除所有不受版本控制的文件。首先,您不能假设工作流作业有一个与自由式作业相同的工作区。实际上,工作流作业可以使用多个工作区(每个
节点或ws
块对应一个工作区)
话虽如此,我要提出的是一种黑客行为:在签出之前修改scm对象,以设置CleanCheckout
扩展(您必须在那里批准一些调用)
但是我更喜欢Christopher Orr的建议,在签出之后使用shell步骤(sh'git clean-fdx'
)。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扩展了扩展。但我保留了其他配置,如分支和UserRemoteConfig
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']],
userRemoteConfigs: scm.userRemoteConfigs
])
它仍然不是完美的,因为您必须创建一个新对象:(我不确定这是否回答了最初的问题(我不知道是否打算在工作区中保留一些文件),但为什么不先删除工作区,这将允许干净的签出:
stage ('Clean') {
deleteDir()
}
stage ('Checkout') {
checkout scm
}
配置源代码时可以添加行为。签出前清理
、签出后清理
和清除存储库并强制克隆
。这样就不需要向声明性/脚本化管道添加逻辑。添加的注释作为只需执行以下操作的答案:
stage('Checkout') {
checkout scm
sh 'git clean -fdx'
}
我不知道checkout
是否可以在multibranch中获取更多参数。我想有一个更优雅的解决方案,但是如果您使用Git,您应该能够在checkout
步骤后运行sh'Git clean-fdx'
。谢谢。这两个建议的问题是,它只适用于Gitalents适用于大多数SCM实现。例如,对于subversion,您可以使用SCM.setWorkspaceUpdater(new UpdateWithCleanUpdater())
在哪里可以找到关于这些内容的文档?(我使用的是Hg。)没有相关文档,它们是低级细节,您必须检查源代码才能获得。对于多分支管道来说,这基本上是不正确的,因为您已经创建了scm
对象。添加新的checkout
步骤会将另一个scm
对象添加到构建中,并且它具有side ef缺陷(如生成页面中重复的变更日志条目)。此答案仅适用于普通管道作业,但不适用于多分支管道作业。这应该是正确的答案。当您只想进行git清理时,删除完整目录并不总是合适的。我们是否直接将其添加到Jenkins文件中?是的,添加到任何管道脚本中。这是2年前的事了,但我认为这仍然有效:)很遗憾,脚本需要获得批准才能访问SCM
参数。这可能只发生在主分支上,而不是代理上。值得注意的是,您可以在签出后执行sh'git clean-fdx'
,而不是按照@christopher orr的建议删除所有内容
stage('Checkout') {
checkout scm
sh 'git clean -fdx'
}