Hudson subversion插件:参数化构建无法找到凭据

时间:2011-11-15 06:47:43

标签: svn continuous-integration hudson hudson-plugins

我尝试在Hudson中设置参数化构建。这是一个字符串参数,当我手动触发构建时将设置它。这是示例存储库URL svn://xxx/java/common/tags/${revision}

当我尝试使用$ revision = 1.0.0.0

进行构建时出现以下异常
error: failed to check out svn://xxx/java/common/tags/1.0.0.0
org.tmatesoft.svn.core.SVNCancelException: svn: No credential to try. Authentication failed
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:37)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:32)
    at org.tmatesoft.svn.core.internal.wc.DefaultSVNAuthenticationManager.getFirstAuthentication(DefaultSVNAuthenticationManager.java:219)
    at org.tmatesoft.svn.core.internal.io.svn.sasl.SVNSaslAuthenticator.createSaslClient(SVNSaslAuthenticator.java:304)
    at org.tmatesoft.svn.core.internal.io.svn.sasl.SVNSaslAuthenticator.authenticate(SVNSaslAuthenticator.java:91)
    at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.authenticate(SVNConnection.java:173)
    at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.authenticate(SVNRepositoryImpl.java:1265)
    at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.openConnection(SVNRepositoryImpl.java:1243)
    at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.getLatestRevision(SVNRepositoryImpl.java:168)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getRevisionNumber(SVNBasicClient.java:482)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getLocations(SVNBasicClient.java:873)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:534)
    at org.tmatesoft.svn.core.wc.SVNUpdateClient.doCheckout(SVNUpdateClient.java:901)

我已经为上面的存储库网址设置了用户名/密码。似乎Subversion插件无法获取凭据,因为动态生成了url。如果我将URL设置为静态URL并相应地设置用户名/密码,我可以检查项目。任何帮助将不胜感激。 THX。

哈德森版:2.1.0
Subversion插件版本:2.0.1

2 个答案:

答案 0 :(得分:1)

Thx mliebelt为您的快速反应。不知何故,我找到了解决方法。 这是我在hudson项目文件夹下找到的subversion.credentials。

您可以看到有一个哈希表将URL映射到凭证。 看看第三个条目。在运行时,当解析参数$ revision时,插件可能无法找到具有匹配键的凭证。 出于绝望,我添加了相同的凭证和“覆盖全局凭证”,并带有“是”标志。这是下面的第四个条目。它似乎做了伎俩。我想全局身份验证只根据主机名存储?

<?xml version='1.0' encoding='UTF-8'?>
<hudson.scm.PerJobCredentialStore>
  <credentials class="hashtable">
    <entry>
      <string>svn://xxx/java/common</string>
      <hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
        <userName>chiangs</userName>
        <password>MWNoaWFuZ3MyMw==</password>
      </hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
    </entry>
    <entry>
      <string>svn://xxx/java/common/trunk</string>
      <hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
        <userName>chiangs</userName>
        <password>MWNoaWFuZ3MyMw==</password>
      </hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
    </entry>
    <entry>
      <string>svn://xxx/java/common/tags/${revision}</string>
      <hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
        <userName>chiangs</userName>
        <password>MWNoaWFuZ3MyMw==</password>
      </hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential>
    </entry>
    <entry>
      <string>&lt;svn://xxx:3690&gt; 01f58c58-b008-11dd-a3df-af2b63c5a78d</string>
      <hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential reference="../../entry[2]/hudson.scm.SubversionSCM_-DescriptorImpl_-PasswordCredential"/>
    </entry>
  </credentials>
</hudson.scm.PerJobCredentialStore>

答案 1 :(得分:0)

我已经在我们的一个Hudson装置上进行了测试。我做了以下事情:

  1. 创建了一个新的哈德森工作。
  2. 将SVN URL复制到Ant项目,并用`$ {project}替换最后一段。

    之前:https://our.svn.com/svn/trunk/public/develop/build/ant/ant-simple

    现在是:https://our.svn.com/svn/trunk/public/develop/build/ant/${project}

  3. 然后我在构建中添加了一个参数:

    • 类型:字符串参数
    • 姓名:项目
    • 默认值:ant-simple
  4. 作为构建步骤,我使用目标clean定义了Ant。
  5. 配置对话框告诉我存储库中不存在SVN URL(其中包含${project})并提供更新凭据。 enter image description here
  6. 我没有Update credentials
  7. 当我现在开始构建时,它会询问参数(我不更改默认值),挂起几秒钟(使用消息pending - ???),然后构建正确。之所以这样做(我怀疑,但你可以证明这一点),是因为Hudson有可用的凭据缓存,如果可能的话。

    作为一种解决方法,您应该在没有参数的情况下启动一个构建作业(只需复制当前版本,并通过将URL设置为.../tags/1.0.0.0来删除参数)并构建一次。您必须在那里输入正确的凭据,现在参数化的构建现在可以正常工作。