cruisecontrol.net ccnet-config

CruiseControl.NET: usando $(CCNetLabel) dentro del archivo ccnet.config



ccnet-config (8)

Al llamar a procesos externos como MSBuild, el control de crucero establece variables de entorno. Uno de los valores es CCNetLabel. mantiene el valor de la etiqueta de los proyectos actuales. Quiero usar los mismos valores en ccnet config, pero cuando intento ccnet config hay un problema. Obtuve el siguiente error:

[CCNet Server:ERROR] INTERNAL ERROR: Reference to unknown symbol CCNetLabel ---------- ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetLabel at ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment._GetConstantDef(String name) at ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment.eval_text_constant(String name) ..... ----------

De hecho, quiero agregar el CCNetLabel a otra variable, así que necesito acceder a la propiedad en ccnet.config.

¿Hay alguna forma diferente de hacer referencia a estas variables?


Creo que la respuesta de Darryl es el mejor enfoque para resolver este problema en CCNET 1.5. Solo dos comentarios sobre la respuesta:

  • Este es el enlace correcto a los documentos de ccnet sobre parámetros dinámicos .
  • Como puede leer en los documentos, hay un atajo para obtener solo el valor de la propiedad de integración que está buscando usando la sintaxis $[$Integration_Property] . En su caso, usar $[$CCNetLabel] funcionaría.

Intenté hacer esto también y acabé usando un script NANT, donde puedo acceder a CCNetLabel como un entorno variabl como:

<property name="version.build" value="${environment::get-variable(''CCNetLabel'')}"/>


Lo siguiente se puede usar en el archivo de configuración en ccnet versión 1.5 <cb: define buildversion = "$ [ $ CCNetLabel ]" />



No hay forma de acceder a estas variables de entorno dentro de la configuración de CCNET. Creo que casi cualquiera que configuró CCNET (incluyéndome a mí mismo) ha intentado hacerlo. Esta característica se ha solicitado con frecuencia, pero aún no se ha implementado.

Si desea acceder a CCNetWorkingDirectory o CCNetArtifactDirectory hay una solución alternativa:

<cb:define name="project.workingDirectory">c:/foo</cb:define> <cb:define name="project.artifactDirectory">c:/bar</cb:define> <project> <workingDirectory>$(project.workingDirectory)</workingDirectory> <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> ... </project>

Pero no conozco una solución para acceder a CCNetLabel . Lo siento, no tengo mejores noticias.


Resolví esto agregando una tarea msbuild en la sección del editor (incluida la CCNetLabel en la ruta)

<msbuild> <executable>c:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe</executable> <workingDirectory>C:/Path/WebApp</workingDirectory> <projectFile>WebApp.csproj</projectFile> <dynamicValues> <replacementValue property="buildArgs"> <format>/noconsolelogger /v:quiet /p:Configuration=Release /p:WebProjectOutputDir=c:/Publish/WebApp/{0}/ /p:OutDir=c:/Publish/WebApp/{0}/bin/</format> <parameters> <namedValue name="$CCNetLabel" value="Default" /> </parameters> </replacementValue> </dynamicValues> <targets>ResolveReferences;_CopyWebApplication</targets> <timeout>600</timeout> </msbuild>


Si usa la versión 1.5, entonces puede especificar directamente $ (CCNetLabel) en la tarea msbuild

<msbuild> <executable>C:/WINDOWS/Microsoft.NET/Framework/v3.5/MSBuild.exe</executable> <workingDirectory>C:/TestApp/WindowsFormsApplication1</workingDirectory> <projectFile>WindowsFormsApplication1.sln</projectFile> <buildArgs>/p:Configuration=Debug /p:Platform="Any Cpu" /p:AssemblyVersion=$(CCNetLabel) </buildArgs> <targets>build</targets> <logger>C:/Program Files/CruiseControl.NET/server/ThoughtWorks.CruiseControl.MsBuild.dll</logger> </msbuild>


Tuvimos la necesidad de hacer esto también, y descubrimos que podríamos usar Valores Dinámicos de Reemplazo , introducidos en CruiseControl.NET 1.5, para acceder a CCNetLabel desde ccnet.config.

Por ejemplo, el bloque dynamicValues en este fragmento:

<buildpublisher> <sourceDir>C:/ccnet_projects/Installer/bin/x86/Release</sourceDir> <dynamicValues> <replacementValue property="publishDir"> <format>C:/builds/installers/{0}/x86</format> <parameters> <namedValue name="$CCNetLabel" value="Default" /> </parameters> </replacementValue> </dynamicValues> <useLabelSubDirectory>false</useLabelSubDirectory> </buildpublisher>

Produce una ruta publishDir que contiene el valor CCNetLabel sobre la marcha:

<buildpublisher> <sourceDir>C:/ccnet_projects/Installer/bin/x86/Release</sourceDir> <publishDir>C:/builds/installers/1.0.2.120/x86</publishDir> <useLabelSubDirectory>false</useLabelSubDirectory> </buildpublisher>

(Tenga en cuenta que para este ejemplo en particular, useLabelSubDirectory se establece en falso para evitar agregar el CCNetLabel a la ruta publishDir ).