我尝试在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
答案 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><svn://xxx:3690> 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装置上进行了测试。我做了以下事情:
将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}
然后我在构建中添加了一个参数:
${project}
)并提供更新凭据。
Update credentials
。当我现在开始构建时,它会询问参数(我不更改默认值),挂起几秒钟(使用消息pending - ???
),然后构建正确。之所以这样做(我怀疑,但你可以证明这一点),是因为Hudson有可用的凭据缓存,如果可能的话。
作为一种解决方法,您应该在没有参数的情况下启动一个构建作业(只需复制当前版本,并通过将URL设置为.../tags/1.0.0.0
来删除参数)并构建一次。您必须在那里输入正确的凭据,现在参数化的构建现在可以正常工作。