Ich verwende capistrano, um eine RoR-Anwendung bereitzustellen. Die Codebasis befindet sich in einem Git-Repository, und Verzweigungen werden in der Entwicklung häufig verwendet. Capistrano verwendet deploy.rb
Dateien für seine Einstellungen. Eine davon ist der Zweig, von dem aus bereitgestellt werden soll.
Mein Problem ist folgendes: Nehmen wir an, ich erstelle einen neuen Zweig A vom Master . Die deploy Datei Referenz Master - Zweig. Ich bearbeite das, damit A für die Testumgebung bereitgestellt werden kann. Ich beende die Arbeit an der Funktion und füge Zweig A in Master zusammen . Da die deploy.rb
Datei von A frischer ist, wird es fusioniert und die jetzt deploy.rb
in Master - Zweig Referenzen A . Zeit zum erneuten Bearbeiten.
Das ist eine Menge scheinbar unnötiger manueller Bearbeitung - der Parameter sollte immer mit dem aktuellen Zweignamen übereinstimmen. Darüber hinaus kann man leicht vergessen, die Einstellungen jedes Mal zu bearbeiten.
Was wäre der beste Weg, um diesen Prozess zu automatisieren?
Bearbeiten: Es stellte sich heraus, dass jemand bereits genau das getan hatte, was ich brauchte :
Heute Morgen hatte ich Gelegenheit, einen Zweig eines Git-Repositorys auf einem Staging-Server bereitzustellen, hatte aber nicht die geringste Ahnung, wie. Eine schnelle Suche im Capistrano-Quellcode ergab, dass ich set
:branch "branch_name"
in meinem Bereitstellungsskript verwenden konnte. Ich habe es versucht und es hat funktioniert. Ich dachte dann, ich müsste eine ähnliche Änderung in allen meinen Filialen vornehmen. Natürlich bin ich ein Faulpelz und habe mich gefragt, ob es keinen besseren Weg gibt.Wenn Sie mit git nicht vertraut sind, ist die Ausgabe des Befehls git branch eine Liste von Zweigen mit einem Sternchen, das den aktuell auf Ihrem lokalen Computer ausgecheckten markiert. Beispielsweise:
> git branch * drupal_authentication fragment_caching master
Also dachte ich mir, was wäre, wenn ich nur die Ausgabe analysieren und nach dem als aktuell markierten Zweig suchen würde:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Jetzt kann ich jeden auf meinem lokalen Computer aktuellen Zweig über ein einziges freigegebenes Bereitstellungsskript bereitstellen.
quelle
Antworten:
Dies funktioniert mit Capistrano> = 3.1:
Fügen Sie diese Zeile hinzu zu
config/deploy.rb
:und dann capistrano anrufen mit:
Diese Lösung funktioniert mit Capistrano <3.1:
quelle
env
, aber dies funktionierte für mich nur mit einem ZweigMit Capistrano 3.1.0+ funktionierte nichts mehr für mich. Stattdessen gemäß ihren kommentierten Anweisungen:
Aber Sie möchten nicht verwenden,
ask
oder es wird Sie dazu auffordern . Stattdessen sollten Sie verwendenset
.HEAD
ist der oberste Zweig; 'Rand' wie es heißt. Wenn Sie einen anderen Zweig wollen, ersetzen SieHEAD
mit Ihrem Zweignamen, zum Beispiel:master
,staging
usw.Um mit Beispielen abzuschließen,
/config/deploy/production.rb
können Sie in diese Zeile einfügen:...oder
Übrigens
HEAD
ist dies die Standardeinstellung, sodass Sie dies nicht wirklich in der Datei angeben müssen. Könnte besser in a verwendet werden/config/deploy/edge.rb
.In
/config/deploy/staging.rb
können Sie diese Zeile einfügen:...oder
Du hast die Idee!
Ich hoffe, diese Beispiele helfen zukünftigen Benutzern von capistrano (^_^)
quelle
git rev-parse --abbrev-ref HEAD
wird verwendet, um herauszufinden, welcher Zweig HEAD aktiviert ist. Laufengit rev-parse --abbrev-ref staging
wird (fast) immer ausgegebenstaging
. Sie können einfach verwendenset :branch, 'staging'
.Mit mehrstufigen ist es eigentlich jetzt:
Die vorherige Post-Syntax funktioniert in meiner Umgebung nicht
quelle
-s branch=foo
setzt den capistrano variablen Zweig auf,foo
nachdem die Rezepte geladen wurdenIch kann bestätigen, dass das Folgende in Cap 3.11.0 13/10/18 sowie in Cap 2 weiterhin funktioniert:
In deploy.rb / stage.rb:
In der Befehlszeile:
Dies gibt Ihnen einen Standardzweig (der für verschiedene Umgebungen unterschiedlich sein kann) und die Möglichkeit, Zweige zu ändern, wenn Sie möchten.
quelle
Alternativ können Sie es über die Befehlszeile strukturieren, in der Sie einen Standardzweig und eine Standardumgebung haben, und Sie können Parameter an den Cap-Aufruf übergeben, die die Umgebung und den zu verwendenden Zweig enthalten können. Dies kann ein Zweig sein, der explizit übergeben wird, oder Sie können einen Parameter haben, der den aktuellen Zweig angibt, wie in dem von Ihnen aufgelisteten Link beschrieben.
Codebeispiel stark von hier entlehnt
quelle
-s
, damit es den angegebenen ZweigWenn Sie Capistrano-Multistage verwenden , müssen Sie nur ausführen
oder
ohne weitere bearbeitung an deinem
deploy.rb
.quelle
branch=
nicht seinbranch-
.Dieser Befehl funktioniert nicht mehr:
Die Unterstützung für
-sS
Flags wurde in capistrano v3 + entfernt.Hier können Sie mehr darüber lesen: Link
Es wurde in einigen Antworten erwähnt, ist aber derzeit nicht korrekt.
Was bei mir funktioniert:
in
deploy.rb
Datei hinzufügendann renne:
Beachten Sie außerdem, dass Sie sich im Hauptzweig befinden müssen, um diesen Befehl erfolgreich ausführen zu können.
quelle
Diese Lösung sollte mit allen Versionen von Capistrano funktionieren.
Verwendung:
quelle
Ich benutze Version 3.3.5 und ich habe diese Arbeit:
quelle
Allgemeine Antwort:
Wenn Sie eine Einstellungsdatei mit einem von Umgebung zu Umgebung geänderten Inhalt haben, sollten Sie diese Zeile als "Vorlage" erstellen (mit einer Zeichenfolge, die den Variablennamen wie
@BRANCH_NAME@
oder darstellt@ENV_NAME@
).Dann hätten Sie ein (versioniertes) Skript, das Ihre Konfigurationsdatei lesen und die
@BRANCH_NAME@
Variable " " durch den entsprechenden Wert ersetzen kann, der für Ihren Bereitstellungsprozess benötigt wird.quelle
Für Benutzer von capistrano 3:
quelle
Methode 1: Legen Sie den stufenspezifischen Zweig (z. B. Test, Produktion) für die Bereitstellung fest
branch
Fügen Sie die Konfiguration in Stufendateien anstelle von 'deploy.rb' ein und legen Sie den Zielzweig für diese Stufe fest, von dem aus bereitgestellt werden soll.Für eine zweistufige App mit dem zugehörigen Filialnamen
test
undproduction
sieht die Konfiguration folgendermaßen aus:Diese Methode ermöglicht die Bereitstellung von stufenspezifischen Zweigen. Der einzige zusätzliche Schritt, der erforderlich ist, besteht darin, den neuesten Code aus dem Basiszweig zusammenzuführen oder neu zu starten.
Methode 2: Direkt von jedem Zweig aus bereitstellen (mithilfe des Tags)
Ein anderer Ansatz ist die Bereitstellung mithilfe von Tags.
branch
Legen Sie die Konfiguration fest , um die Bereitstellung mithilfe des Tags durchzuführen . in 'deploy.rb' wie folgt:Konfigurieren Sie das CI so, dass es bedingt in verschiedenen Phasen bereitgestellt wird, wenn das zugehörige Tag-Muster übereinstimmt (z
/.*-test$/
. B. ).Jetzt kann eine Bereitstellung von jedem Zweig aus erfolgen.
Erstellen Sie zunächst ein Tag aus einem beliebigen Zweig.
Git-Tag -a v0.1.0-Test -m "Version 0.1.0-Test"
Und drücken
Git Push Origin v0.1.0-Test
Hinweis: Die oben genannten Methoden basieren auf Capistrano 3.
quelle
gibt den aktuellen Zweig zurück, in dem Sie sich genau befinden.
Ich setze immer das
gpsh
stattgit push -u origin branch_name
quelle