在Jenkins管道中使用凭据签出SVN?

nau*_*101 14 svn groovy jenkins jenkins-workflow

如何通过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"
    }
}
Run Code Online (Sandbox Code Playgroud)

但这失败了

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)
    ...
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Olt*_*tzU 30

您可以使用Snippet Generator for 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']])
Run Code Online (Sandbox Code Playgroud)

请注意,远程部分使用双引号,以便正确替换变量$ SVN_BRANCH.

  • 正如我在帖子末尾提到的,你需要使用"双引号"让Groovy在字符串中扩展变量. (4认同)

Rob*_*Qiu 19

只需为 OltzU 的回答添加一些屏幕截图:

第1步:

在此处输入图片说明

第2步:

在此处输入图片说明