Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Teamcity, Umgebungsvariablen (https://www.delphipraxis.net/173184-teamcity-umgebungsvariablen.html)

sahimba 11. Feb 2013 15:50


Teamcity, Umgebungsvariablen
 
Hallo!

Ich möchte, während eines Builds, in einem Source file die Revisionsnummer einbinden. Mit Tortoise SVN ginge das mittels "keyword substitution" und $WCREV$ recht einfach (so mache ich das daheim). Hier verwenden wir TeamCity. Also habe ich dem MSBuild Skript folgendes hinzugefügt:

<Exec Command="PowerShell -file ReplaceBuildVcsNumber.ps1" WorkingDirectory="x:\TheFolder" ContinueOnError="false"/>

Das Powerscript selber:

$content = [System.Io.File]::ReadAllText('TheFileToChange')
$revnr = [System.Environment]::GetEnvironmentVariable("BUILD_VCS_NUMBER")
$content = $content.Replace('$build.vcs.number$', $revnr)
[System.Io.File]::WriteAllText('TheFileToChange', $content)

Leider funktioniert das nicht, die Umgebungvariable ist leer.

Also habe ich das Ganze geändert:

<Exec Command="PowerShell -file ReplaceBuildVcsNumber.ps1 -rev %build.vcs.number%" WorkingDirectory="x:\TheFolder" ContinueOnError="false"/>

param([string]$revnr = "rev")
$content = [System.Io.File]::ReadAllText('TheFileToChange')
$content = $content.Replace('$build.svn.number$', $revnr)
[System.Io.File]::WriteAllText('TheFileToChange', $content)

Funktioniert auch nicht.

Letzter Versuch:
<Exec Command="PowerShell -file ReplaceBuildVcsNumber.ps1 -rev %BUILD_VCS_NUMBER%" WorkingDirectory="x:\TheFolder" ContinueOnError="false"/>

Und auch das... funktioniert nicht.

Hat jemand den entscheidenden Hinweis?

Danke und Grüße!


PS: Crosspost http://devnet.jetbrains.com/thread/441776

[EDIT="Phoenix"]Titel korrigiert. Da hat ein c gefehlt :)[/EDIT]

Phoenix 11. Feb 2013 17:25

AW: Teamity, Umgebungsvariablen
 
Hi,

gehts hier um ein neueres Delphi- oder ein Visual Studio Projekt? Hintergrund der Frage: Neuere Delphi-Versionen basieren genauso wie Visual Studio auf MSBuild.

Wenn Du MSBuild als Buildsystem unten drunter hast würde ich nur im absoluten Notfall auf Powershell als integralen Bestandteil meines Build-Prozesses zurückgreifen. In MSBuild selber lässt sich fast alles viel sauberer abbilden. Das schöne ist, das das dann nämlich auch auf jeder Entwicklungsmaschine beim Bauen passiert und sich ein CI-Build somit nicht von einem lokalen Build unterscheidet.

Ein abweichender Build-Prozess auf einem Buildserver kann zu echt massiv schwer nachzuvollziehenden Fehlern führen. So ne tagelange Bugsuche weil sich das lokal nie reproduzieren lässt ist da noch das kleinsten Problemchen...

Was das Ersetzen der SVN-Revisionsnummer angeht, haben wir dazu ein passendes MSBuild-Toolset das nicht nur die SVN-Revision nimmt, sondern z.B. noch zusätzliche Informationen in die .exe schreiben kann wie z.B. ob es in der working copy nicht eingecheckte Changes gibt. Ich hab das ganze gerade nicht zur Hand, also wenn es bis morgen warten kann...

sx2008 11. Feb 2013 17:31

AW: Teamity, Umgebungsvariablen
 
Enviroment Variablen gibt es auf System- und Userebene.
Wenn du die Variablen in der Systemsteuerung -> System setzt solltest du dich abmelden und neu anmelden, weil laufende Prozesse die Änderung nicht mitkriegen.
Setzt man z.B. eine Variable in einer Batchdatei, dann bleibt dies in den Elternprozessen wirkungslos.
Läuft TeamCity als Service? Wenn ja unter welchem Useraccount?
Ein Service ist wieder ein eigener Prozess.
Änderungen an Enviroment Variablen in einem anderen Prozess wirken sich nicht auf den laufenden Service aus.

Phoenix 11. Feb 2013 17:36

AW: Teamity, Umgebungsvariablen
 
Der TeamCity Build Agent sollte die Variable eigentlich selber setzen bevor der eigentliche Build gestartet wird...

Probier aber mal anstelle von BUILD_VCS_NUMBER den Wert aus BUILD_VCS_NUMBER_DEIN_VCS_ROOT_NAME wie hier beschrieben: http://confluence.jetbrains.com/disp...ned+Properties

sahimba 12. Feb 2013 09:07

AW: Teamcity, Umgebungsvariablen
 
Hallo und Danke für Eure Antworten.

Es geht um eine "neuere" Delphi-Version (2010), somit MSBuild. Den Einwand bzgl. der Nachteile eines auf dem Buildserver abweichenden Buildprozesses kann ich sehr gut nachvollziehen, kleinere Probleme gab es aufgrund dessen bereits, im Moment kann ich das aber leider nicht ändern - das Projekt ist über die Jahre gewachsen und manche Neustrukturierung steht an.

Ich werde dem Hinweis zu "BUILD_VCS_NUMBER_DEIN_VCS_ROOT_NAME" nochmal nachgehen, mir ist aber (noch) nicht wirklich klar, was der "simplified VCS root name" sein soll wenn bspw. das zu bauende Projekt unter "https://abc.de/svn/DasProjekt/branches/abc" eingecheckt ist: "DasProjekt_branches_abc"? Ich versuche mein "Glück" ;)

Grüße.

sahimba 12. Feb 2013 09:09

AW: Teamity, Umgebungsvariablen
 
Zitat:

Zitat von Phoenix (Beitrag 1202936)
Was das Ersetzen der SVN-Revisionsnummer angeht, haben wir dazu ein passendes MSBuild-Toolset das nicht nur die SVN-Revision nimmt, sondern z.B. noch zusätzliche Informationen in die .exe schreiben kann wie z.B. ob es in der working copy nicht eingecheckte Changes gibt. Ich hab das ganze gerade nicht zur Hand, also wenn es bis morgen warten kann...

Das wäre sicher interessant :-)

Grüße.

Phoenix 12. Feb 2013 10:35

AW: Teamcity, Umgebungsvariablen
 
Zitat:

Zitat von sahimba (Beitrag 1203040)
Ich werde dem Hinweis zu "BUILD_VCS_NUMBER_DEIN_VCS_ROOT_NAME" nochmal nachgehen, mir ist aber (noch) nicht wirklich klar, was der "simplified VCS root name" sein soll wenn bspw. das zu bauende Projekt unter "https://abc.de/svn/DasProjekt/branches/abc" eingecheckt ist: "DasProjekt_branches_abc"? Ich versuche mein "Glück" ;)

Da gehts um den VCS-Root-Namen im TeamCity.

Also wenn Du in Deinem TeamCity-Projekt rechts oben auf "Edit Configuration Settings" gehst, und dann rechts auf Punkt 2 -> "Version Control Settings", dann siehst Du ja oben die Tabelle mit einem oder schlimmstenfalls mehreren VCS-Roots ;-)

Der Name der dort in der Spalte "VCS Root" steht, das ist der VCS Root Name.
Und simplified ist er dann, wenn Du alle nicht alphanumerischen Zeichen durch underscores ersetzt.

sahimba 12. Feb 2013 10:42

AW: Teamcity, Umgebungsvariablen
 
Hab noch einen syntaktischen Fehler gefunden:

<Exec Command="PowerShell -file ReplaceBuildVcsNumber.ps1 -rev %BUILD_VCS_NUMBER%" WorkingDirectory="x:\TheFolder" ContinueOnError="false"/>

statt -rev %BUILD_VCS_NUMBER%
nun -rev $(BUILD_VCS_NUMBER)

Im Log sehe ich dann jetzt wenigstens, dass das richtig ausgewertet wird. Die Umgebungsvariable ist also korrekt gesetzt.

Nur das Powershellskript, das lokal funktioniert, scheint da irgendwo zu macken. Ja, man hat es weiter oben schon prophezeit dass derartiges passieren wird 8-)

sahimba 12. Feb 2013 10:44

AW: Teamcity, Umgebungsvariablen
 
PS: Ich weiß jetzt wenigstens, warum ich <werbung mode="on">Finalbuilder<werbung mode="off"> so sehr mag...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz