2011-05-09 67 views
0

我目前正在編寫一個ANT腳本,其中將包含一些智能來檢查事情。我使用True Blue Software的SnapshotCM作爲我的版本控制,並使用CruiseControl作爲我每晚構建的框架。 基本上,我需要始終檢查在我的版本控制中找到的最新版本並執行命令。在這種情況下,這裏是一個例子:檢查版本控制中的最新版本

<project name="nightly_build" default="main" basedir="checkout"> 
    <target name="init"> 
     <property file="initial.properties"/> 
    </target> 
    <target name="main" depends="init"> 
      <!-- need some code to set variable --> 
      <!-- need some code to increment variable --> 
     <!-- need some code here to check for the latest version --> 
     <exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe"> 
      <arg line='-f -R "C:/Work/7.10.000_Tip/7.10.000_Tip_GUI_TEST/"'/> 
     </exec> 
    </target> 
</project> 

在上面的代碼中,我將加載「initial.properties」文件。 該算法應該是如下:

  1. 初始的特性文件

  2. 由1得到BUILD_NUMBER

  3. 增量BUILD_NUMBER負載(讓這個新的變量是X)

  4. 如果找到X,則X增加1(如果未找到則跳至6.)

  5. 如果X被發現,重複4(直到X無法找到)

  6. 其他使用<arg line ='-f -R "C:/..../7.10.100.X..../"'/>

的initial.properties文件中的版本號是如下:

Major_Version=7 
Minor_Version=10 
Project_Number=100 
Build_Number=036 
Product_Version=${Major_Version}.${Minor_Version}.${Project_Number}.${Build_Number} 

任何人都可以指導我嗎?

回答

1

Ant不是一種編程語言。這是一種依賴矩陣語言。

這意味着您不需要在Ant中指定執行順序。 Ant會計算它運行目標所需的順序。這也意味着Ant無法執行循環,甚至無法在設置屬性後更改其值。

有一些基於Ant的包。舊的待機是Antcontrib。 Antcontrib具有變量的概念,它們類似於可變屬性。它也有各種循環結構。但是,我不確定<foreach><for>任務是否會按照您的要求執行操作...

按順序搜索下一個內部版本號是您可以在shell腳本中執行的操作。事實上,我強烈推薦這一點。

我只使用Ant進行構建,並將我的CM功能保留在我的build.xml文件之外。相反,我依靠我的構建系統來完成與構建本身無關的所有事情。這包括檢出代碼,保存工件和編譯單元測試。這樣,如果我改變使用連續編譯系統或版本控制系統的方式,則不必修改我的build.xml文件。

+0

嗨,你的意思是我們可以在shell腳本中輕鬆搜索下一個版本號?但從我所知道的,我需要從版本控制軟件搜索我的內部版本號。並且這不能輕鬆完成imo – jeremychan 2011-05-10 01:38:44

+0

您可以在shell腳本中比在Ant中更容易地搜索內部版本號。 Ant沒有內置的方法提取內部版本號,我不知道SnapshotCM是否有Ant插件。最後,你可能會調用一個shell腳本。 – 2011-05-10 03:00:53