Jenkins管道如何使用凭据检出SVN?

27

我如何通过Jenkins流水线Groovy脚本检查需要用户凭据的Subversion仓库?似乎内置的svn命令不支持凭据,因此我尝试了以下代码:

node {
    stage 'checkout'
    withCredentials([[$class: 'UsernamePasswordMultiBinding',
                      credentialsId: '34761a89-1402-47d7-96e2-aec22ffdc50b',
                      usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
        sh "svn co https://trac.nci.org.au/svn/cable/branches/$SVN_BRANCH --username $USERNAME --password $PASSWORD cable_branch"
    }
}

但是这会失败。

groovy.lang.MissingPropertyException: No such property: USERNAME for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:23)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:17)
    at WorkflowScript.run(WorkflowScript:5)
    at ___cps.transform___(Native Method)
    ...

我缺少什么?

2个回答

45

您可以在General SCM步骤中使用代码片段生成器。这将显示熟悉的Subversion配置选项,并像往常一样将凭据作为参数传递。

代码片段生成器将生成一个稍微有点丑陋的参数选择表示形式,类似于以下内容:

checkout([$class: 'SubversionSCM', 
          additionalCredentials: [], 
          excludedCommitMessages: '', 
          excludedRegions: '', 
          excludedRevprop: '', 
          excludedUsers: '', 
          filterChangelog: false, 
          ignoreDirPropChanges: false, 
          includedRegions: '', 
          locations: [[credentialsId: '34761a89-1402-47d7-96e2-aec22ffdc50b', 
                       depthOption: 'infinity', 
                       ignoreExternalsOption: true, 
                       local: 'cable_branch', 
                       remote: "https://trac.nci.org.au/svn/cable/branches/$SVN_BRANCH"]], 
          workspaceUpdater: [$class: 'UpdateUpdater']])

请注意,remote 部分使用双引号,这样变量 $SVN_BRANCH 才能被正确替换。


嗯...看起来这个应该可以工作,但是$SVN_BRANCH(它是一个构建参数)没有扩展,所以我还没有成功地让它工作。一旦我解决了这个问题// - naught101
好的,当我使用 remote: 'https://trac.nci.org.au/svn/cable/branches/' + SVN_BRANCH 时,它确实有效。谢谢! - naught101
4
正如我在帖子末尾提到的,您需要在Groovy中使用“双引号”来扩展字符串中的变量。 - OltzU
这里的 credentialsId 是什么凭证?用户名和密码吗? - red888
$SVN_BRANCH 技巧在多分支流水线中可能不起作用吗?我正在为此苦苦思索... - mgouin
显示剩余6条评论

23

仅为OltzU的答案添加一些屏幕截图:

步骤1:

输入图像描述

步骤2:

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接