AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos
Thema durchsuchen
Ansicht
Themen-Optionen

Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

Ein Thema von TiGü · begonnen am 15. Jan 2020 · letzter Beitrag vom 20. Jan 2020
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#1

Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 15. Jan 2020, 17:33
Hallo Schwarmintelligenz,

ich wollte mal euren Rat einholen und erfahren, wie das woanders gelöst wird.

Ich führe gerade in meiner neuen Firma einen Build-Prozess mit Jenkins ein. Die Delphi-Projekte baue ich über MSBUILD.
Historisch bedingt nutzen wir SVN als Versionsverwaltung (VisualSVN und als Clients TortoiseSVN) und zur Entwicklung z.Z. Delphi XE5.

Für mein Problem möchte ich drei Repositories vorstellen:

Im Folgenden nutze ich die absoluten Pfade auf einen normalen Entwickler-Rechner, damit man gedanklich leichter folgen kann:

In "C:\Projekte\FooBar 3.0\develop\_XE5" liegt ein Gruppenprojekt (FooBar_Group.groupproj).
Das beihaltet FooBar.dproj aus dem gleichen Unterordner und auch verschiedene DLL-Projekte aus "C:\Projekte\Tools".

Das Builden in Debug Win32 nach jedem Einchecken, um auf vergessene Units zu prüfen stellt kein Problem da (Jenkins pollt alle 5 Minuten auf Änderung).
Auch der Nightly Build der aktuellsten Sourcen in Release Win64 mit übersetzen per Sisulizer und das Packen des Setups stellt keine Hürde dar.

Interssant wirds jetzt erst, wenn man auf Zuruf einen reproduzierbaren Build von dem Stand vor z.B drei Wochen haben möchte.
Hier ist es im Moment so, dass nach dem bisher händischen Erstellen eines Releases die SVN-Revision des Hauptprogramms getaggt wird.
Sie lässt sich dann bspw. so im SVN finden: https://mycompanysvn/FooBar/tags/Freigaben/V3.0.004.0
Hier ist aber nur der Stand des Hauptprogramms zu finden, nicht das was unter Tools und Komponenten zu finden ist.

Wie ist der allgemein übliche Weg, um die Abhängigkeiten in Zeit (Datum, Uhrzeit) bzw. SVN-Revisionsnummer zwischen drei verschiedenen Repositories zu managen?

1. Mein erster Gedanke war, einen parametrierbaren Build zu erstellen, der sechs Eingabefelder hat.
Pro Repository ein für die SVN-URL und ein optionales String-Eingabefeld für die Revsionsnummer.
Da muss man aber ziemlich viel im SVN-Log nachgucken, was wann wie zusammmengehört und ist so bspw. für externe Abteilungen unbenutzbar.
Während ich den Zusammenhang zwischen SVN-Log, drei Repositories und SVN-Revisionsnummer von den Entwicklern verlangen kann, sieht es da beim Produktmanagment schon anders aus.
Wenn die einen bestimmten Versionsstand brauchen, sollte das für die Kollegen relativ straight forward sein, ohne groß Nachfragen zu müssen.

2. Dann kam noch die Idee auf, die Abhängigkeiten im Hauptprogramm als Textdatei/Batchdatei zu hinterlegen.
Diese wird während des Build-Prozesses ausgelesen und anhand der darin definierten Werte werden die Abhängigkeiten aufgelöst.
Also bspw. ist die SVN-Revisionsnummer für "Tools" und "Komponenten" im aktuellsten Fall -1, so dass diese Repositories auf den neusten Stand ausgecheckt werden.
Wenn man aber bspw. etwas baut mit dem oben erwähnten Tag "V3.0.004.0", dann muss derjenige Entwickler, der den Branch angelegt hat, die SVN-Revisionsnummern für "Tools" und "Komponenten" auf den damals definierten Stand setzen (SET Tools_SVN_Revision=8123; SET Komponenten_SVN_Revision=427).

Code:
svn checkout https://mycompanysvn/Tools/branches/R3951@8123
svn checkout https://mycompanysvn/Komponenten/branches/R051@427
Ich vermute und hoffe, es gibt noch andere Möglichkeiten und Wege, die mithilfe von SVN und Jenkins gelöst werden können.

Sollte irgendwas unklar sein in meiner Schilderung, bitte ich um Rückfragen.

Wie ist eure "Best Practice", wie löst ihr das in eurem Build-Prozess?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 16. Jan 2020, 15:39
Der allgemein richtige Weg, um die Abhängigkeiten in Zeit (Datum, Uhrzeit) bzw. SVN-Revisionsnummer zwischen drei verschiedenen Repositories zu managen ist
a) Die Repos auf git umzustellen
b) die abhängigen Repos als Submodule einzubinden in die Repos wo man sie braucht.
(Alternativ kann man noch alle Projekte mit einem Paketmanager verwalten lassen.)

Was der allgemein übliche Weg ist kann ich dir leidern nicht sagen, da ich extrem wenige Firmen kenne die überhaupt solche Abhängigkeiten haben. Ich fürchte dass man allgemein üblich - wie leider auch bei uns - irgend so nen Murks macht wie du es vorschlägst. SCNR
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 16. Jan 2020, 15:53
Was der allgemein übliche Weg ist kann ich dir leidern nicht sagen, da ich extrem wenige Firmen kenne die überhaupt solche Abhängigkeiten haben. Ich fürchte dass man allgemein üblich - wie leider auch bei uns - irgend so nen Murks macht wie du es vorschlägst. SCNR
Würde es dir etwas ausmachen, jemanden Wissenden bei dir in der Firma zu fragen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#4

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 16. Jan 2020, 16:15
Wie wäre es denn, wenn man die jeweils verwendeten Tools- und Komponenten-Repoversionen bei einem Release des FooBar Hauptprogramms mit dem gleichen Tag "V3.0.004.0" markiert? Eventuell noch ergänzt um den Namen des Hauptprojekts, also "FooBar V3.0.004.0".
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 16. Jan 2020, 16:30
Wie wäre es denn, wenn man die jeweils verwendeten Tools- und Komponenten-Repoversionen bei einem Release des FooBar Hauptprogramms mit dem gleichen Tag "V3.0.004.0" markiert? Eventuell noch ergänzt um den Namen des Hauptprojekts, also "FooBar V3.0.004.0".
Angenommen, man würde das so machen:
Würde das vom SVN dann so aufgelöst werden, dass das zukünftige Beispiel "V3.0.005.0" mit den drei getaggten Repos:

...dann beim Auschecken von Jenkins in SVN über den parametrierten Build mit dem SVN-Tag "V3.0.005.0" alle drei Repos von diesem Versionsstand/Datum&Uhrzeit geholt werden?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#6

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 16. Jan 2020, 16:47
...dann beim Auschecken von Jenkins in SVN über den parametrierten Build mit dem SVN-Tag "V3.0.005.0" alle drei Repos von diesem Versionsstand/Datum&Uhrzeit geholt werden?
Ich bin jetzt nicht so fit in Jenkins, aber das sollte eigentlich möglich sein. Aktuell müsst ihr ja auch die URLs für die benötigten Repos festlegen. Ich denke schon, daß man bei Angabe des Revisions-Parameters diesen auf die anderen Repos anwenden kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.203 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 17. Jan 2020, 12:54
SVN Externals sind doch für genau sowas gedacht:
https://tortoisesvn.net/docs/release...externals.html

Wir haben unsere 3rdParty Libs in eigenen Repositories + halten das über Externals mit unserem Code in sync.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Build-Prozess mit Jenkins, SVN -> Builden alter Versionsstände von 3 Repos

  Alt 20. Jan 2020, 15:24
Das ist wohl so was ähnliches wie bei git die Submodule

Was der allgemein übliche Weg ist kann ich dir leidern nicht sagen, da ich extrem wenige Firmen kenne die überhaupt solche Abhängigkeiten haben. Ich fürchte dass man allgemein üblich - wie leider auch bei uns - irgend so nen Murks macht wie du es vorschlägst. SCNR
Würde es dir etwas ausmachen, jemanden Wissenden bei dir in der Firma zu fragen?
Derjenige ist heute wieder vom Urlaub zurück. Also: wir haben ein Hauptrepository und dazugehöriges Zeug, das in SVN-Repos ist.
Es gibt ein buildsystem und da gibt es eine SVHCheckout.bat. Diese ist im git-Haupt-Repo versioniert. In dieser Batch stehen die SVN-Checkout-Kommandos drin mit den jeweiligen branches.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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