2014-01-21 4 views
7

Wir erstellen Pakete für mehrere Bereitstellungsumgebungen mit TeamCity-Server und OctoPack. Das Problem besteht darin, dass der Tentacle-Agent die neueste Version des Pakets wählt, also das gleiche (neueste) Paket, das in allen Umgebungen bereitgestellt wird. Hier ist die Zusammenfassung unserer Einrichtung:Wie kann Octopus die Paketversion in mehreren Umgebungen bereitstellen?

  • Umgebungen DEV und STAGE;
  • Deployment zu DEV wird von Git "Dev" Zweig ausgelöst;
  • Deployment zu STAGE wird vom Git "Stage" -Abzweig ausgelöst;
  • OctoPack ist konfiguriert, Pakete zu generieren MyProduct.1.0.0.dev-% Build_counter% für DEV Build-Konfiguration;
  • OctoPack ist so konfiguriert, dass die Pakete MyProduct.1.0.0.% Build_counter% für die STAGE-Build-Konfiguration generiert werden.
  • TeamCity ist so konfiguriert, dass OctoPack-Artefakte (NuGet-Pakete) über seinen NuGet-Feed verfügbar gemacht werden;
  • Octopus-Projekt ist so konfiguriert, dass Pakete mit der NuGet-ID MyProduct aus dem TeamCity NuGet-Feed bereitgestellt werden.

Also, was passiert ist, dass seit DEV häufiger werden Builds, sie größer% build_counter% haben, und STAGE bekommen keine Chance auf einen Einsatz seiner eigenen Pakete zu bekommen - Octopus Tentakel preferes Pakete mit 1,0. 0.dev- * Suffix.

Dies muss ziemlich häufig Szenario sein, aber ich habe keinen einfachen Weg gefunden, es zu lösen.

+0

Ich denke, du meinst „Teamcity ist so konfiguriert, Pacakges zu erzeugen“ und nicht Octopus?Einige andere Tipps: Verwenden Sie eine andere Versionsnummer für STAGE und DEV (und MASTER), die es auf lange Sicht leichter machen wird. Zum Beispiel ist in unserem Entwickler die Versionsnummer 0.0.0.x, und in Master haben wir 1.0.0.x. Die korrekteste Version wäre, dass dev auf 2.0.0.x und master auf 1.0.0.x gesetzt wurde, und wenn dev bereit ist, freigegeben zu werden und mit dem Master-Master zusammengeführt zu werden, wird er auf 2.0.0.x und dev erhöht zu 3.0.0.x. Du kannst es dir so vorstellen, wie Dev die Zukunft ist und Meister ist, was jetzt in prod ist. –

Antwort

9

Es gibt einige Teile, die hier nicht dokumentiert sind: https://github.com/OctopusDeploy/Octopus-Tools. Aber wenn Sie https://github.com/OctopusDeploy/Octopus-Tools/blob/master/source/OctopusTools/Commands/CreateReleaseCommand.cs betrachten, ist es möglich, herauszufinden, was Sie tun können.

Ich denke, dass die Tools abwärtskompatibel ist, aber nicht 100% sicher darüber.

Wenn Sie die octo-Tools verwenden, von denen ich erwarte, dass Sie sie verwenden, können Sie die Option version (auch releasenumber now) angeben, um die Versionsnummer anzugeben. Wenn Sie nichts anderes angeben, wird das neueste Paket benötigt. Sie müssen also packageversion (jetzt auch defaultpackageversion) angeben, das für das Release verwendet werden soll.

Ich denke, das sollte es tun. Wenn nicht, was verwenden Sie, um das Release zu erstellen?

Beispiel von dem, was wir von unserer Teamcity verwenden, wenn octo-Tools, die wir für den Umwelt-Pfad auf den Build-Agenten hinzugefügt haben:

create-release --server=%conf.OctoServerApi% --project=%conf.OctoProject% --version=%env.OctopusPackageVersion% --deployto=%conf.OctoDeployEnv% --packageversion=%env.OctoPackPackageVersion% --apiKey=%conf.OctoApiKey% --waitfordeployment %conf.OctoExtraParams% 

UPDATE:

Die Dokumentation für 2.0 sind viel besser: http://docs.octopusdeploy.com/pages/viewpage.action?pageId=360596

+0

Danke Tomas, ich werde deine Vorschläge überprüfen und prüfen, ob sie unser Problem lösen. –

+0

Ja, das hat gut funktioniert, wie Sie vorgeschlagen haben! –

+0

Der Verweisverweis existiert nicht mehr. – jessehouwing

3

Inspiriert von Tomas Janssons Antwort, fügen Sie einfach folgende Zeile zu Zusätzliche Befehlszeilenargumente im OctopusDeploy: Build-Schritt (Teamcity v9) erstellen lassen Sie für mich gearbeitet:

--packageversion=%build.number% 
Verwandte Themen