CruiseControl.net, msbuild,/p: OutputPath y CCNetArtifactDirectory
(3)
El CCNetArtifactDirectory se pasa a MSBuild de forma predeterminada, por lo que no debe preocuparse por ello. MSBuild colocará el resultado de compilación en la "ubicación del contenedor" relevante para el directorio de trabajo que ha especificado.
<executable>c:/WINDOWS/Microsoft.NET/Framework/v3.5/MSBuild.exe</executable>
<workingDirectory>C:/data/projects/FooSolution/</workingDirectory>
<projectFile>FooSolution.sln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs>
Por lo tanto, en el ejemplo anterior, su salida de compilación se colocará en C: / data / projects / FooSolution [ProjectName] / bin / Debug. Si desea exportar a una ubicación diferente, puede consultar la etiqueta en CCNET.
<publishers>
<xmllogger />
<buildpublisher>
<sourceDir>C:/data/projects/FooSolution/FooProject/bin/Debug</sourceDir>
<publishDir>C:/published/FooSolution/</publishDir>
<useLabelSubDirectory>false</useLabelSubDirectory>
</buildpublisher>
</publishers>
Esto le permitirá publicar su salida en una ubicación diferente.
Estoy intentando configurar CruiseControl.net por el momento. Hasta ahora funciona bien, pero tengo un problema con la tarea MSBuild.
De acuerdo con la Documentación , pasa CCNetArtifactDirectory a MSBuild. ¿Pero cómo lo uso?
Intenté esto:
<buildArgs>
/noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)/test
</buildArgs>
Pero eso no funciona. De hecho, mata el servicio con este error:
ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: referencia al símbolo desconocido CCNetArtifactDirectory
La documentación es bastante escasa, y Google y principalmente ofrece la modificación del archivo de proyecto .sln, que es lo que quiero evitar para poder construir este proyecto más adelante de forma manual. Realmente preferiría /p:OutputPath
.
Los parámetros como CCNetArtifactDirectory
se pasan a programas externos que usan variables de entorno. Están disponibles en el programa externo pero no están dentro de la configuración de CCNET
. Esto a menudo conduce a la confusión.
Puede usar una constante de preprocesador en su lugar:
<cb:define project.artifactDirectory="C:/foo">
<project>
<!-- [...] -->
<artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
<!-- [...] -->
<tasks>
<!-- [...] -->
<msbuild>
<!-- [...] -->
<buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)/test</buildArgs>
<!-- [...] -->
</msbuild>
<!-- [...] -->
</tasks>
<!-- [...] -->
</project>
Puede usar la variable del directorio de artefactos dentro del script MSBuild. Aquí hay un ejemplo de cómo estoy ejecutando FxCop en este momento desde mi script CC.Net MSBuild (este script es a lo que apunta CC.Net; también hay un objetivo "Build" en el script que incluye una tarea MSBuild contra el SLN). hacer la compilación real):
<Exec
Command=''FxCopCmd.exe /project:"$(MSBuildProjectDirectory)/FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)/ProjectName.FxCop.xml"''
WorkingDirectory="C:/Program Files/Microsoft FxCop 1.35"
ContinueOnError="true"
IgnoreExitCode="true"
/>