これには、カスタム ビルド ラベラーが必要です。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 プロジェクト ファイルを変更して、このラベラーを利用します。これは、デフォルトのラベラー ブロックで行いました。次のようなもの:
<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 スクリプトでラベルにアクセスできます。
これが役立つことを願っています。ご不明な点がございましたら、コメントに投稿してお知らせください。