爲此需要自定義構建標籤。 Perforce是我們的源代碼管理提供商,我們從中得到我們的版本號。代碼如下:
/// <summary>
/// Gets the latest change list number from perforce, for ccnet to consume as a build label.
/// </summary>
[ReflectorType("p4labeller")]
public class PerforceLabeller : ILabeller
{
// perforce executable (optional)
[ReflectorProperty("executable", Required = false)]
public string P4Executable = "p4.exe";
// perforce port (i.e. myserver:1234)
[ReflectorProperty("port", Required = false)]
public string P4Port = String.Empty;
// perforce user
[ReflectorProperty("user", Required = false)]
public string P4User = String.Empty;
// perforce client
[ReflectorProperty("client", Required = false)]
public string P4Client = String.Empty;
// perforce view (i.e. //Dev/Code1/...)
[ReflectorProperty("view", Required = false)]
public string P4View = String.Empty;
// Returns latest change list
public string Generate(IIntegrationResult previousLabel)
{
return GetLatestChangelist();
}
// Stores latest change list into a label
public void Run(IIntegrationResult result)
{
result.Label = GetLatestChangelist();
}
// Gets the latest change list
public string GetLatestChangelist()
{
// Build the arguments to pass to p4 to get the latest changelist
string theArgs = "-p " + P4Port + " -u " + P4User + " -c " + P4Client + " changes -m 1 -s submitted " + P4View;
Log.Info(string.Format("Getting latest change from Perforce using --> " + theArgs));
// Execute p4
ProcessResult theProcessResult = new ProcessExecutor().Execute(new ProcessInfo(P4Executable, theArgs));
// Extract the changelist # from the result
Regex theRegex = new Regex(@"\s[0-9]+\s", RegexOptions.IgnoreCase);
Match theMatch = theRegex.Match(theProcessResult.StandardOutput);
return theMatch.Value.Trim();
}
}
的方法,GetLatestChangelist,在這裏你可能會插入自己的邏輯來談談你的版本控制系統。在Perforce中,最後一個更新列表是唯一的。我們的內部版本號以及最終的版本號都是基於此。
一旦你建立這個(進入程序集DLL),你必須將其掛接到ccnet。您可以將程序集放入服務器目錄(ccnet.exe旁邊)。
接下來您修改您的ccnet項目文件以使用此貼標機。我們用default labeller block做了這個。像下面這樣:
<project>
<labeller type="p4labeller">
<client>myclient</client>
<executable>p4.exe</executable>
<port>myserver:1234</port>
<user>myuser</user>
<view>//Code1/...</view>
</labeller>
<!-- Other project configuration to go here -->
</project>
如果你只是想內部版本號在CCNET然後大功告成露面,並不真正需要做別的。但是,如果您希望使用已提供的CCNetLabel屬性,則可以訪問NAnt腳本中的標籤。
希望這有助於一些。通過張貼評論來告訴我你是否有任何問題。
您沒有要分發的代碼嗎? – 2008-11-06 13:25:52
不,但它並不那麼困難。從net.sourceforge.cruisecontrol.LabelIncrementer繼承,遵循API文檔,將您的插件構建到jar中,然後將jar添加到CC config.xml。 – JesperE 2008-11-07 11:42:47