2012-10-09 18 views
1

我正在嘗試爲我們的應用程序設置構建服務器。在執行強制構建時,我想使用參數來確定要構建的內容。下面我有設置,將工作DEV主要是因爲if語句這是一個設置的片段。無論我選擇QA還是UAT,它總是假的。有沒有人試圖用cruisecontrol.net做到這一點?我擡頭一看,發現使用CCNET版本1.8.2中的條件參數來更改svn位置

<cb:define name="ParametersTemplate"> 
    <parameters> 
     <selectParameter> 
     <name>Target</name> 
     <display>Target to Build</display> 
     <description>Which target do you want to build?</description> 
     <default>DEV</default> 
     <allowedValues> 
      <value name="DEV">DEV</value> 
      <value name="QA">QA</value> 
      <value name="UAT">UAT</value> 
     </allowedValues> 
     </selectParameter> 
     <textParameter> 
     <name>Branch</name> 
     <display>Branch Name:</display> 
     <description>Name of the branch you want to build?</description> 
     <default>_DEV</default> 
     <minimum>8</minimum> 
     <maximum>255</maximum> 
     <required>true</required> 
     </textParameter> 
    </parameters> 
    </cb:define> 

<cb:define name="ProjectTemplate"> 
    <workingDirectory>$(WorkingDir)\$(ProjectName)</workingDirectory> 
    <artifactDirectory>$(ArtifactsDir)\$(ProjectName)</artifactDirectory> 
    <sourcecontrol type="svn" cleanCopy="true"> 
     <workingDirectory>$(WorkingDir)\$(ProjectName)</workingDirectory> 
     <cb:if expr="$[Branch] == 'QA' || $[Branch] == 'UAT'"> 
     <trunkUrl>$(SVNLocation)/$(ProjectSvnReleaseLocation)/$[Branch]</trunkUrl> 
     </cb:if> 
     <cb:else> 
     <trunkUrl>$(SVNLocation)/$(ProjectSvnDevLocation)</trunkUrl>    
     </cb:else> 
     <cb:SVNCredentials/> 
    </sourcecontrol> 
    <labeller type="svnRevisionLabeller"> 
     <cb:LabelCommon /> 
     <cb:if expr="'$[Branch]'=='QA' || '$[Branch]'=='UAT'"> 
     <url>$(SVNLocation)/$(ProjectSvnReleaseLocation)/$[Branch]</url> 
     </cb:if> 
     <cb:else> 
     <url>$(SVNLocation)/$(ProjectSvnDevLocation)</url> 
     </cb:else> 
     <cb:SVNCredentials/> 
    </labeller> 
    <tasks> 
     <nant> 
     <targetList> 
      <target>$(ProjectName)</target> 
     </targetList> 
     <cb:NantCommon /> 
     </nant> 
    </tasks> 
    <cb:ParametersTemplate/> 
    </cb:define> 

的一件事是替代變量,但我不知道我究竟是如何可以利用他們在這樣的設置。

任何援助將不勝感激。

回答

1

在我的愚見,這是不是一個好主意,試圖改變這樣的svn網址。即使你讓它工作,其他各種事情也可能會破裂。我會選擇三個不同的項目,使用一個通用模板來共享剩下的配置。

+1

我最終只是分裂出兩個不同的項目組一個用於_DEV和一個用於UAT/QA 。也許將來我會試着讓它更像我想的那樣工作。 – Mike

2

在第一cb:if表達左邊的變量需要用單引號包圍,就像你在第二cb:if表達做,像這樣:

<cb:if expr="'$[Branch]' == 'QA' || '$[Branch]' == 'UAT'"> 
    <trunkUrl>$(SVNLocation)/$(ProjectSvnReleaseLocation)/$[Branch]</trunkUrl> 
    </cb:if> 
    <cb:else> 
    <trunkUrl>$(SVNLocation)/$(ProjectSvnDevLocation)</trunkUrl>    
    </cb:else> 
1

你是混淆兩個概念在這裏。 cb:if是預處理器的一部分,在解析配置時使用,在任何項目運行之前。運行項目時

http://www.cruisecontrolnet.org/projects/ccnet/wiki/Conditional_Task

http://www.cruisecontrolnet.org/projects/ccnet/wiki/Compare_Values_Condition

這將工作,裏面: 如果你想根據一個動態值的價值採取行動,你應該使用有條件的任務與比較值條件一個任務。 但是,對於您的情況,這將無濟於事,因爲您想要更改源控制塊內的值,但不以您希望的方式支持該值。 你可以做什麼,雖然是有分支的名稱作爲參數的值:

http://www.cruisecontrolnet.org/projects/ccnet/wiki/SelectParameter