你能和哈德森一起做吗?

时间:2010-03-09 20:41:53

标签: continuous-integration hudson

我想创建一个hudson作业,它将id作为参数。并使用该id来计算svn-repo路径。

在我工作的地方,您为每个解决的问题都有一条svn路径。然后将所有问题合并到一个单独的svn路径中。

我想要做的是对部分问题进行静态代码分析。

所以我想可能有一个我用于每个问题的Ant build.xml,然后使用问题ID对作业进行参数化。

我试图实现这一点,但svn路径不会替换参数。

我尝试使用#issueId%issueId%${issueId}${env.issueId}但没有成功。

跳转错误如:

Location 'http://svn-path:8181/svn/devSet/issues/${env.chuid}' does not exist
Checking out a fresh workspace because C:\Documents and Settings\dnoseda\.hudson\jobs\test\workspace\${env.chuid} doesn't exist
Checking out http://svn-path:8181/svn/devSet/issues/${env.chuid}
ERROR: Failed to check out http://svn-path:8181/svn/devSet/issues/${env.chuid}
org.tmatesoft.svn.core.SVNException: svn: '/svn/!svn/bc/46190/devSet/issues/$%7Benv.chuid%7D' path not found: 404 Not Found (http://svn-path:8181)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
    at 

我认为我不能做我想做的事。

你知道如何设置正确的配置来实现这个目标吗?

感谢您的帮助。

修改 我要将此参数放在配置作业的部分是:

<scm class="hudson.scm.SubversionSCM">
<locations>
      <hudson.scm.SubversionSCM_-ModuleLocation>
        <remote>http://svn-path:8181/svn/devSet/issues/${env.issueid}</remote>
      </hudson.scm.SubversionSCM_-ModuleLocation>
    </locations>

新编辑:已解决

我的hudson版本是最后一个(1.349),但是svn插件的版本是1.11,是1.13的最后一个版本,它与${issueId}一起使用

感谢anwsers

3 个答案:

答案 0 :(得分:4)

来自hudson wiki

“该参数可用作环境参数。例如,shell($ FOO,%FOO%)或Ant($ {env.FOO})可以访问这些值。”

您的语法与wiki中的语法不匹配。

答案 1 :(得分:3)

我已经设置了一个成功执行参数替换的svn项目。语法确实是${issueId}所以我假设你做错了,或者使用的是非常旧的Hudson版本。你能用Hudson的版本和你正在使用的subversion插件更新问题吗?

<project> 
  <actions/> 
  <description></description> 
  <keepDependencies>false</keepDependencies> 
  <properties> 
    <hudson.model.ParametersDefinitionProperty> 
      <parameterDefinitions> 
        <hudson.model.StringParameterDefinition> 
          <name>issueId</name> 
          <description></description> 
          <defaultValue>none</defaultValue> 
        </hudson.model.StringParameterDefinition> 
      </parameterDefinitions> 
    </hudson.model.ParametersDefinitionProperty> 
  </properties> 
  <scm class="hudson.scm.SubversionSCM"> 
    <locations> 
      <hudson.scm.SubversionSCM_-ModuleLocation> 
        <remote>https://svn.dev.java.net/svn/hudson/trunk/${issueId}</remote> 
      </hudson.scm.SubversionSCM_-ModuleLocation> 
    </locations> 
    <useUpdate>true</useUpdate> 
    <excludedRegions></excludedRegions> 
    <excludedUsers></excludedUsers> 
    <excludedRevprop></excludedRevprop> 
  </scm> 
  <canRoam>true</canRoam> 
  <disabled>false</disabled> 
  <triggers class="vector"/> 
  <concurrentBuild>false</concurrentBuild> 
  <builders/> 
  <publishers/> 
  <buildWrappers/> 
</project>

这是构建输出。由于身份验证问题,检出失败,但参数已成功替换:

Started by user anonymous
Building on master
Checking out a fresh workspace because C:\hudson\jobs\test-svn\workspace\${issueId} doesn't exist
Checking out https://svn.dev.java.net/svn/hudson/trunk/www
ERROR: Failed to check out https://svn.dev.java.net/svn/hudson/trunk/www
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:168)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:534)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:273)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:261)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:516)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:98)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1001)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getLatestRevision(DAVRepository.java:178)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getRevisionNumber(SVNBasicClient.java:482)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.getLocations(SVNBasicClient.java:851)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:534)
    at org.tmatesoft.svn.core.wc.SVNUpdateClient.doCheckout(SVNUpdateClient.java:893)
    at org.tmatesoft.svn.core.wc.SVNUpdateClient.doCheckout(SVNUpdateClient.java:791)
    at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:615)
    at hudson.scm.SubversionSCM$CheckOutTask.invoke(SubversionSCM.java:541)
    at hudson.FilePath.act(FilePath.java:676)
    at hudson.FilePath.act(FilePath.java:660)
    at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:534)
    at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:482)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:898)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:400)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:349)
    at hudson.model.Run.run(Run.java:1106)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:93)
    at hudson.model.Executor.run(Executor.java:122)
Notifying upstream projects of job completion
Finished: FAILURE

答案 2 :(得分:2)

在这个comment中,提到他们使用$ {ISSUEID},这就是我建议的原因,但我看到的所有其他迹象都说这实际上并不起作用。

否则我建议不要在构建脚本步骤中使用SCM插件并执行SVN操作。这将允许您将参数用作env变量,如$ ISSUEID