Come anticipato in uno dei miei recenti post, vorrei parlare di alcune modifiche fatte sui sorgenti di CruiseControl.NET per adattarlo ad una nostra particolare esigenza: la possibilità di determinare la label da attribuire ad una build dopo che i sorgenti di un progetto sono stati scaricati e compilati sulla build-machine.
Non è mia intenzione spiegare l'architettura di CC.NET, servirebbe un libro intero, quindi vado al sodo.
La versione "ufficiale" di CC.NET esige che il contenuto di una label venga costruito all'inizio del processo di integrazione. Se si esamina la classe IntegrationRunner si nota il metodo RunIntegration:
public IIntegrationResult RunIntegration(BuildCondition buildCondition)
{
IIntegrationResult result = resultManager.StartNewIntegration(buildCondition);
IIntegrationResult lastResult = resultManager.LastIntegrationResult;
CreateDirectoryIfItDoesntExist(result.WorkingDirectory);
CreateDirectoryIfItDoesntExist(result.ArtifactDirectory);
result.MarkStartTime();
try
{
result.Modifications = GetModifications(lastResult, result);
if (result.ShouldRunBuild())
{
target.Activity = ProjectActivity.Building;
target.SourceControl.GetSource(result);
RunBuild(result);
}
}
catch (Exception ex)
{
Log.Error(ex);
result.ExceptionResult = ex;
}
result.MarkEndTime();
PostBuild(result);
return result;
}
Questo metodo è il cuore del sistema: si...