Używam Capistrano do wdrażania aplikacji RoR. Baza kodu znajduje się w repozytorium git, a rozgałęzianie jest szeroko stosowane w programowaniu. Capistrano używa deploy.rb
pliku dla swoich ustawień, z których jedną jest gałąź do wdrożenia.
Mój problem jest taki: powiedzmy, że tworzę nową gałąź A z mastera . Plik wdrażania będzie odnosił się do gałęzi głównej . I edycja że tak A może zostać wdrożony do środowiska testowego. Kończę pracę nad funkcją i łączę gałąź A w master . Ponieważ deploy.rb
plik A jest świeższe, to zostanie połączone i teraz deploy.rb
w głównej referencje Branża A . Czas ponownie edytować.
To dużo pozornie niepotrzebnej ręcznej edycji - parametr powinien zawsze pasować do nazwy aktualnej gałęzi. Co więcej, za każdym razem łatwo zapomnieć o edycji ustawień.
Jaki byłby najlepszy sposób na zautomatyzowanie tego procesu?
Edycja: okazuje się, że ktoś już zrobił dokładnie to, czego potrzebowałem :
Dziś rano miałem okazję wdrożyć gałąź repozytorium git na serwerze pomostowym, ale nie miałem pojęcia, jak to zrobić. Szybkie przeszukanie kodu źródłowego Capistrano ujawniło, że mogę użyć zestawu
:branch "branch_name"
w moim skrypcie wdrażania. Spróbowałem i zadziałało. Wtedy pomyślałem, że będę musiał dokonać podobnej zmiany we wszystkich moich oddziałach. Oczywiście jestem leniwym draniem i zastanawiałem się, czy nie ma lepszego sposobu.Jeśli nie jesteś zaznajomiony z git, wynikiem polecenia git branch jest lista gałęzi z gwiazdką oznaczającą to, które jest aktualnie pobrane na twoim lokalnym komputerze. Na przykład:
> git branch * drupal_authentication fragment_caching master
Pomyślałem więc, co jeśli po prostu przeanalizuję dane wyjściowe i poszukałem gałęzi oznaczonej jako bieżąca:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Teraz mogę wdrożyć bieżącą gałąź na moim komputerze lokalnym za pomocą pojedynczego, współużytkowanego skryptu wdrażania.
źródło
Odpowiedzi:
Działa to z Capistrano> = 3.1:
dodaj tę linię do
config/deploy.rb
:a następnie zadzwoń do capistrano z:
To rozwiązanie działa z Capistrano <3.1:
źródło
env
, ale ten pracował dla mnie po prostu za pomocą oddziałuUżywając Capistrano 3.1.0+, żadne z nich już nie działało. Zamiast tego, zgodnie z ich skomentowanymi instrukcjami:
Ale nie chcesz używać
ask
lub wyświetli się monit. Zamiast tego powinieneś użyćset
.HEAD
jest najwyższą gałęzią; „krawędź”, jak to się nazywa. Jeśli chcesz inny oddział, należy wymienićHEAD
z nazwy oddziału, npmaster
,staging
itpAby zakończyć przykładami, w programie
/config/deploy/production.rb
możesz dołączyć następujący wiersz:...lub
btw,
HEAD
jest ustawieniem domyślnym, więc nie ma potrzeby określania tego w pliku. Może być lepiej używany w/config/deploy/edge.rb
.W
/config/deploy/staging.rb
możesz dołączyć ten wiersz:...lub
Masz pomysł!
Mam nadzieję, że te przykłady pomogą przyszłym użytkownikom capistrano (^_^)
źródło
git rev-parse --abbrev-ref HEAD
służy do sprawdzenia, która gałąź jest włączona. uruchomionygit rev-parse --abbrev-ref staging
będzie (prawie) zawszestaging
. Możesz po prostu użyćset :branch, 'staging'
.Dzięki wielostopniowości jest to teraz:
Składnia poprzedniego postu nie działa w moim środowisku
źródło
-s branch=foo
ustawia gałąź zmiennej capistrano nafoo
po załadowaniu recepturMogę potwierdzić, że poniższe informacje nadal działają w Cap 3.11.0 13/10/18, a także Cap 2:
W pliku deploy.rb / stage.rb:
W wierszu poleceń:
Daje to domyślną gałąź (która może być inna dla różnych środowisk) i możliwość zmiany gałęzi, kiedy chcesz.
źródło
Alternatywnie możesz utworzyć strukturę z wiersza poleceń, w której masz domyślną gałąź i środowisko, a także możesz przekazać parametry do wywołania cap, które może obejmować środowisko i gałąź do użycia. Może to być gałąź, która jest jawnie przekazana lub możesz mieć parametr, który wskazywałby bieżącą gałąź zgodnie z opisem w podanym łączu.
Przykład kodu zapożyczony z tego miejsca
źródło
-s
, abyJeśli używasz capistrano-multistage , wystarczy biec
lub
bez dalszej edycji
deploy.rb
.źródło
branch=
, niebranch-
.To polecenie już nie będzie działać:
Wsparcie dla
-sS
flag zostało usunięte w Capistrano v3 +.Tutaj możesz przeczytać więcej na ten temat: link
Wspomniano o tym w kilku odpowiedziach, ale obecnie nie jest poprawne.
Co działa u mnie:
w
deploy.rb
pliku dodajnastępnie uruchomić:
Zwróć również uwagę, że aby pomyślnie uruchomić to polecenie, musisz być w gałęzi master.
źródło
To rozwiązanie powinno działać ze wszystkimi wersjami Capistrano.
Stosowanie:
źródło
Używam wersji 3.3.5 i mam to działające:
źródło
Ogólna odpowiedź:
Jeśli masz plik ustawień z zawartością modyfikowaną ze środowiska do środowiska, powinieneś utworzyć ten wiersz jako „szablon” (z ciągiem znaków reprezentującym nazwę zmiennej, np.
@BRANCH_NAME@
Lub@ENV_NAME@
).Wtedy miałbyś (wersjonowany) skrypt, który byłby w stanie odczytać plik konfiguracyjny i zastąpić
@BRANCH_NAME@
zmienną " " odpowiednią wartością wymaganą przez proces wdrażania.źródło
Dla użytkowników capistrano 3:
źródło
Metoda 1: Ustaw gałąź specyficzną dla etapu (np. Test, produkcja) do wdrożenia
Położyć
branch
konfigurację w plikach etapu zamiast w pliku „deploy.rb” i ustaw gałąź docelową dla tego etapu, z której ma zostać wdrożona.W przypadku aplikacji dwuetapowej z powiązaną nazwą oddziału
test
iproduction
konfiguracja będzie wyglądać następująco:Ta metoda umożliwia wdrożenie z gałęzi specyficznych dla etapu. Tak więc jedynym dodatkowym krokiem, który będzie wymagany, jest scalenie lub zmiana bazy najnowszego kodu z gałęzi podstawowej.
Metoda 2: Wdróż bezpośrednio z dowolnej gałęzi (za pomocą tagu)
Innym podejściem jest wdrożenie przy użyciu tagów. Aby wdrożyć za pomocą tagu, ustaw
branch
plik config. w „deploy.rb” w następujący sposób,Skonfiguruj CI tak, aby warunkowo wdrażał na różnych etapach, jeśli powiązany wzorzec tagu pasuje (np
/.*-test$/
.).Teraz wdrożenie można wykonać z dowolnej gałęzi,
Najpierw utwórz tag z dowolnej gałęzi,
git tag -a v0.1.0-test -m "Wersja 0.1.0-test"
I pchaj
git push origin v0.1.0-test
Uwaga: powyższe metody są oparte na Capistrano 3.
źródło
zwróci bieżącą gałąź, w której się znajdujesz.
Zawsze ustawiam
gpsh
zamiastgit push -u origin branch_name
źródło