Sto convertendo la nostra piattaforma CI da CruiseControl a Jenkins, e non riesco a capire qualcosa che sembra dovrebbe essere relativamente semplice a che fare (Disclaimer - io non sono CI o costruire esperto di automazione, ma questo è stato gettato in grembo e lo trovo interessante)Come dichiarare una variabile globale in Jenkins e usarla in un'attività MSBuild all'interno di ogni singolo progetto
In CruiseControl, sono in grado di dichiarare le variabili in questo modo:
<cb:define rootdir="J:\SOURCES\" />
<cb:define logdir="J:\SOURCES\buildlogs" />
<cb:define iisdir="J:\IIS\" />
<cb:define artifacts="artifacts\" />
Quindi utilizzarli come parte di un'attività MSBuild
<msbuild>
<executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<workingDirectory>$(rootdir)$(ProjectName)</workingDirectory>
<projectFile>$(ProjectName).sln</projectFile>
<buildArgs>/p:BuildDate="1";OutDir="$(iisdir)$(ProjectName)\bin\\";WebProjectOutputDir="$(iisdir)$(ProjectName)\\"</buildArgs>
<targets>Rebuild;$(ProjectName)</targets>
<timeout>180</timeout>
<logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
Se la directory principale o IIS cambia, può essere facilmente applicata a tutti i progetti contemporaneamente. Abbiamo circa 60 progetti di installazione, quindi fare questo progetto per progetto richiederebbe molto tempo. Migrazione questo per Jenkins, gli argomenti della riga di comando di MSBuild ora apparire così (campione parziale ma comprende ciò che è rilevante):
OutDir="J:\IIS\ProjectName\bin\\";WebProjectOutputDir="J:\IIS\ProjectName\\"
La directory IIS è difficile codificato. Ho bisogno che sia qualcosa di più:
OutDir="${IIS_DIR}\ProjectName\bin\\";WebProjectOutputDir="${ITEM_ROOTDIR}\ProjectName\\"
C'è un modo per farlo? Ho provato il plugin di configurazione affettare, che è utile, ma non va bene questa necessità da quello che vedo
Questo ha funzionato per me – TechDawg270