如何在多分支管道中执行干净的SVN签出/更新

时间:2019-10-28 16:23:26

标签: jenkins svn jenkins-pipeline multibranch-pipeline

我正在将多分支管道与SVN一起使用。我目前不使用显式的checkout scm命令,但使用的是声明式默认签出。我的问题是,这似乎只执行svn update。但是,我想使用UpdateWithCleanUpdater更新策略。

我已经看到here可以修改scm对象-但不能不授予进一步的权限:

import hudson.scm.subversion.UpdateWithCleanUpdater
scm.setWorkspaceUpdater(new UpdateWithCleanUpdater())

是否有一种简单的方法来仅配置更新程序,同时保留来自多分支配置的所有其他信息,并且必须再次手动设置分支,凭据,服务器等??

我尝试了checkout scm: [workspaceUpdater: [$class: 'UpdateWithCleanUpdater']],但这不起作用

2 个答案:

答案 0 :(得分:0)

在声明式管道阶段,请确保选项包含:

options {
  skipDefaultCheckout()
}

“步骤”部分以类似以下的脚本块开头:

script {
  myScm = scm
  myScm.setWorkspaceUpdater(new hudson.scm.subversion.UpdateWithRevertUpdater())
  checkout myScm
}

有关用于Subversion的不同类型的工作空间更新程序的更多信息,请参见:https://javadoc.jenkins.io/plugin/subversion/hudson/scm/subversion/WorkspaceUpdater.html

是的,您可能需要在批准页面上批准一些脚本:

http://<myjenkins>/scriptApproval/

答案 1 :(得分:0)

Jenkins随附<jenkins-url>/pipeline-syntax的内置生成器,例如http://localhost/pipeline-syntax

  1. 在“示例步骤”下,使用“签出”步骤代替“ svn”。
  2. SCM:颠覆
  3. 输入要使用的URL和凭据
  4. 退房策略:可以是“始终退房”或“在更新前先恢复svn”。由您自己决定,后一种速度更快,并且根据我的经验还没有失败。 (请参见下图)
  5. 单击“生成管道脚本”,然后将输出复制到管道中。

示例输出如下:

checkout(
    [$class: 'SubversionSCM',
    additionalCredentials: [], excludedCommitMessages: '',
    excludedRegions: '', excludedRevprop: '', excludedUsers: '',
    filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '',
    locations: [[cancelProcessOnExternalsFail: true,
    credentialsId: '********-********-*******',
    depthOption: 'infinity', ignoreExternalsOption: true,
    local: '.', remote: 'http://*****/*****/trunk']],
    quietOperation: true,
    workspaceUpdater: [$class: 'CheckoutUpdater']]
)

您可以在管道脚本中包含任意多的行,而远程URL会根据分支而变化。就我而言,我有两个存储库,在签出时需要彼此相邻放置,因此我的脚本中有两个checkout命令。

注意:“总是新鲜的”使用CheckoutUpdater类,而“更新之前还原”使用UpdateWithRevertUpdater。生成的输出可用于声明性和脚本化管道语法。

jenkins snippet generator