1
votes

Having a SVN+SSH issue with setting up a parameterized build in Teamcity. My SVN layout is

VCSRoot << VCS Root configured to point here
    trunk
        deployment_module
    tags
        tag_name1
             deployment_module
        tag_name2
             deployment_module
        ... etc

I have one VCS root configured to the root specified above. My trunk build is working fine and is configured with the following checkout rule:

+:trunk/deployment_module => .

For the branches, I wanted to set up a build that takes a parameter: %RELEASE_TAG%. I could then use that parameter to modify the checkout rule and checkout the tagged versions. Voila! One build configuration, many tag builds!

However, it isn't working.

This is the current checkout rule I have for the parameterized tag build:

+:tags/%RELEASE_TAG%/deployment_module => .

This causes the following error when TC starts the build (say for example I supplied "1.5":

Failed to collect changes, error: Error collecting changes for VCS repository      '"My_Repo" {instance id=12, parent internal id=1, parent id=My_Repo, description: "svn: svn+ssh://my_user_id@svn_ip/svn/repo/"}'
Checkout rule: tags/1.5/deployment_module=>tags/1.5/deployment_module
tags/deployment_module=>tags/deployment_module
Path is invalid: 'svn+ssh://my_user_id@svn_ip/svn/repo/tags/deployment_module'@321: none

I'm no Teamcity expert, but it seems like there are two checkout rules running, one above the other. One contains and correctly imports my variable, then the one after discards it, and that's the one that is used in accessing SVN...

Would appreciate any help or ideas you guys might have.

Thanks!

1

1 Answers

2
votes

I've found a workaround, though it's not perfect, hopefully it can help others with this problem.

Instead of using a common VCS root with parameterized VCS rules, I made a seperate VCS root for tags.

The root URL was specified with a parameter as follows:

svn+ssh://my_user_id@svn_ip/svn/repo/tags/%RELEASE_TAG%

Then I set a VCS rule as:

+: deployment_module => .

This worked, and allowed checkout to complete successfully. Moving the parameter out of the rule and into a VCS root seems to be the key. A bit messy, but it works.