svn - 使用 Jenkins 管道中的凭据检查 SVN?

标签 svn jenkins groovy 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"
    }
}

但是失败了

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)
    ...

我错过了什么?

最佳答案

您可以使用代码段生成器来执行常规 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 - 使用 Jenkins 管道中的凭据检查 SVN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881132/

相关文章:

svn - 删除分支后可以查看 svn 分支历史记录吗?

python - 如何将 passenv 添加到 tox.ini 而不编辑文件,而是通过在代理后面的 Jenkins 中的 virtualenv shell nature 脚本中运行 tox (python)

java - Jenkins 中的集成测试

javascript - 如何从JavaScript访问Grails对象的Arraylist

svn - 通过 SVN 下载小文件快,大文件慢

svn - Netbeans 6.9/7.0 Subversion Checkout 不起作用?

svn - TortoiseSVN 在哪里存储其设置(例如,全局忽略模式)?

jenkins - 执行 shell 命令框后,Jenkins 中的工作目录是什么?

jenkins - 将Docker镜像推送到Jenkinsfile中的注册表时出错

Groovy 2.5 Java 10 和 Sparkjava