Se requiere una etiquetadora de construcción personalizada para esto. Perforce es nuestro proveedor de control de fuente y derivamos nuestro número de versión de él. El código es el siguiente:
/// <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();
}
}
El método, GetLatestChangelist, es donde es probable que insertar su propia lógica de hablar con su sistema de control de versiones. En Perforce existe la idea de la última lista de cambios que es única. Nuestros números de compilación y, en última instancia, los números de versión se basan en eso.
Una vez que compile esto (en un dll de ensamblaje), tendrá que engancharlo en ccnet. Simplemente puede soltar el ensamblado en el directorio del servidor (al lado de ccnet.exe).
A continuación, modifique su archivo de proyecto ccnet para utilizar esta etiquetadora. Hicimos esto con el default labeller block. Algo así como lo siguiente:
<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>
Si acaba de querer que el número de compilación aparezca en CCNet luego que haya terminado y realmente no necesita hacer nada más. Sin embargo, puede acceder a la etiqueta en su secuencia de comandos NAnt si lo desea utilizando la propiedad CCNetLabel ya provista.
Espero que esto ayude a algunos.Avíseme si tiene alguna pregunta al publicar los comentarios.
Para compilar esto, tuve que agregar referencias a ThoughtWorks.CruiseControl.Core.dll y NetReflector.dll (ambos en la carpeta de instalación CruiseControl.Net y luego agregar lo siguiente para importar los espacios de nombres: usando Exortech.NetReflector; usando ThoughtWorks .CruiseControl.Core; – robaker
La otra cosa que agregaría es que se asegure de que su dll de ensamblado se llame "ccnet. *. Plugin.dll" donde * sea el nombre que elija para su complemento. – Ken