Trình tạo nhãn tùy chỉnh là bắt buộc cho việc này. Perforce là nhà cung cấp kiểm soát nguồn của chúng tôi và chúng tôi lấy được số phiên bản của chúng tôi từ đó. Mã này là như sau:
/// <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();
}
}
Phương pháp, GetLatestChangelist, là nơi bạn có lẽ sẽ chèn logic riêng của mình để nói chuyện với hệ thống kiểm soát phiên bản của bạn. Trong Perforce, ý tưởng về danh sách thay đổi cuối cùng là duy nhất. Số xây dựng của chúng tôi và cuối cùng là số phiên bản dựa trên đó.
Khi bạn xây dựng này (thành một dll lắp ráp), bạn sẽ phải móc nó vào ccnet. Bạn chỉ có thể thả assembly vào thư mục máy chủ (bên cạnh ccnet.exe).
Tiếp theo bạn sửa đổi tệp dự án ccnet của mình để sử dụng labeller này. Chúng tôi đã làm điều này với default labeller block. Một cái gì đó như sau:
<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>
Nếu bạn chỉ muốn số bản dựng hiển thị trong ccnet thì bạn đã hoàn thành và không thực sự cần phải làm gì khác. Tuy nhiên, bạn có thể truy cập nhãn trong tập lệnh NAnt nếu muốn bằng cách sử dụng thuộc tính đã được cung cấp CCNetLabel.
Hy vọng điều này sẽ giúp một số.Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào bằng cách đăng lên nhận xét.
Nguồn
2008-11-06 16:00:52
Để biên dịch điều này, tôi phải thêm tham chiếu đến ThoughtWorks.CruiseControl.Core.dll và NetReflector.dll (cả trong thư mục cài đặt CruiseControl.Net và sau đó thêm thông tin sau để nhập các không gian tên: sử dụng Exortech.NetReflector; sử dụng ThoughtWorks .CruiseControl.Core; – robaker
Điều khác tôi sẽ thêm là bạn chắc chắn rằng dll lắp ráp của bạn được đặt tên là "ccnet. *. Plugin.dll" trong đó * là bất kỳ tên nào bạn chọn cho trình cắm thêm của mình. – Ken