Saya menggunakan capistrano untuk menyebarkan aplikasi RoR. Basis kode ada dalam repositori git, dan percabangan banyak digunakan dalam pengembangan. Capistrano menggunakan deploy.rb
file untuk pengaturannya, salah satunya adalah cabang untuk digunakan.
Masalah saya adalah ini: katakanlah saya membuat cabang A baru dari master . File penerapan akan mereferensikan cabang master . Saya mengeditnya, sehingga A dapat digunakan untuk menguji lingkungan. Saya selesai mengerjakan fitur tersebut, dan menggabungkan cabang A menjadi master . Karena deploy.rb
file dari A lebih baru, itu akan digabungkan dan sekarang deploy.rb
dalam referensi cabang master A . Saatnya mengedit lagi.
Itu banyak dari pengeditan manual yang tampaknya tidak perlu - parameter harus selalu cocok dengan nama cabang saat ini. Selain itu, Anda dapat dengan mudah lupa mengedit pengaturan setiap saat.
Apa cara terbaik untuk mengotomatiskan proses ini?
Sunting: Ternyata seseorang telah melakukan apa yang saya butuhkan :
Pagi ini saya memiliki kesempatan untuk menerapkan cabang repositori git ke server pementasan tetapi tidak tahu caranya. Pencarian cepat melalui kode sumber capistrano mengungkapkan bahwa saya dapat menggunakan set
:branch "branch_name"
dalam skrip penerapan saya. Saya mencobanya dan berhasil. Saya kemudian berpikir bahwa saya perlu melakukan perubahan serupa di semua cabang saya. Tentu saja, saya orang yang malas dan bertanya-tanya apakah tidak ada cara yang lebih baik.Jika Anda tidak terbiasa dengan git, output dari perintah git branch adalah daftar cabang dengan tanda asterisk yang saat ini diperiksa di mesin lokal Anda. Sebagai contoh:
> git branch * drupal_authentication fragment_caching master
Jadi, saya pikir, bagaimana jika saya baru saja mem-parsing output dan mencari cabang yang ditandai sebagai saat ini:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Sekarang saya dapat menerapkan cabang apa pun yang ada di mesin lokal saya dari satu skrip penerapan bersama.
sumber
Jawaban:
Ini bekerja dengan Capistrano> = 3.1:
tambahkan baris ini ke
config/deploy.rb
:lalu panggil capistrano dengan:
Solusi ini bekerja dengan Capistrano <3.1:
sumber
env
, tetapi ini berfungsi untuk saya hanya menggunakan cabangMenggunakan Capistrano 3.1.0+, semua ini tidak berfungsi lagi untuk saya. Sebaliknya, menurut instruksi mereka yang berkomentar:
Tapi, Anda tidak ingin menggunakan
ask
atau itu akan meminta Anda. Sebaliknya Anda harus menggunakanset
.HEAD
adalah cabang paling atas; 'edge' seperti namanya. Jika Anda ingin cabang yang berbeda, gantiHEAD
dengan nama cabang Anda, misalnya:master
,staging
, dllUntuk menyimpulkan dengan contoh, di
/config/deploy/production.rb
, Anda mungkin menyertakan baris ini:...atau
btw,
HEAD
adalah pengaturan default, jadi tidak perlu benar-benar menyatakannya dalam file. Dapat digunakan lebih baik di a/config/deploy/edge.rb
.Di
/config/deploy/staging.rb
, Anda mungkin menyertakan baris ini:...atau
Anda mengerti!
Saya harap contoh-contoh ini membantu pengguna capistrano di masa depan (^_^)
sumber
git rev-parse --abbrev-ref HEAD
digunakan untuk mengetahui cabang HEAD berada. menjalankangit rev-parse --abbrev-ref staging
akan (hampir) selalu menghasilkanstaging
. Anda bisa menggunakanset :branch, 'staging'
.Dengan multistage, sekarang:
Sintaks posting sebelumnya tidak berfungsi di lingkungan saya
sumber
-s branch=foo
set cabang variabel capistranofoo
setelah resep dimuatSaya dapat mengonfirmasi bahwa di bawah ini masih berfungsi di Cap 3.11.0 13/10/18 serta Cap 2:
Di deploy.rb / stage.rb:
Di baris perintah:
Ini memberi Anda cabang default (yang bisa berbeda untuk lingkungan yang berbeda), dan kemampuan untuk mengubah cabang kapan pun Anda mau.
sumber
Sebagai alternatif, Anda dapat menyusunnya dari baris perintah di mana Anda memiliki cabang dan lingkungan default dan juga Anda dapat meneruskan parameter ke panggilan topi yang dapat mencakup lingkungan dan cabang yang akan digunakan. Ini bisa menjadi cabang yang diteruskan secara eksplisit atau Anda bisa memiliki parameter yang akan menunjukkan cabang saat ini seperti yang dijelaskan dalam tautan yang Anda daftarkan.
Contoh kode banyak dipinjam dari sini
sumber
-s
agar dapat mengambil cabang yang ditentukanJika Anda menggunakan capistrano-multistage , Anda hanya perlu menjalankan
atau
tanpa mengedit lebih lanjut ke Anda
deploy.rb
.sumber
branch=
tidakbranch-
.Perintah ini tidak akan berfungsi lagi:
Dukungan untuk
-sS
bendera telah dihapus di capistrano v3 +.Di sini Anda dapat membaca lebih lanjut tentang itu: tautan
Itu disebutkan dalam beberapa jawaban, tetapi saat ini tidak benar.
Apa yang berhasil untuk saya:
di
deploy.rb
add filelalu lari:
Juga harap perhatikan bahwa, untuk menjalankan perintah ini dengan sukses, Anda harus berada di cabang master.
sumber
Solusi ini harus bekerja dengan semua versi Capistrano.
Pemakaian:
sumber
Saya menggunakan versi 3.3.5 dan ini berfungsi:
sumber
Jawaban umum:
Jika Anda memiliki file pengaturan dengan konten yang dimodifikasi dari satu lingkungan ke lingkungan lainnya, Anda harus menjadikan baris itu sebagai "template" (dengan string yang mewakili nama variabel seperti
@BRANCH_NAME@
atau@ENV_NAME@
).Kemudian Anda akan memiliki skrip (berversi) yang dapat membaca file konfigurasi Anda, dan mengganti
@BRANCH_NAME@
variabel " " dengan nilai yang sesuai yang diperlukan oleh proses penerapan Anda.sumber
Untuk pengguna capistrano 3:
sumber
Metode 1: Tetapkan cabang khusus tahap (mis. Pengujian, produksi) untuk penerapan
Letakkan
branch
konfigurasi di file tahapan sebagai ganti 'deploy.rb' dan setel cabang target untuk tahap tersebut untuk diterapkan.Untuk aplikasi dua tahap dengan nama cabang terkait
test
danproduction
, konfigurasinya akan terlihat seperti ini,Metode ini memungkinkan untuk menyebarkan dari cabang khusus tahap. Jadi, hanya langkah tambahan yang diperlukan adalah menggabungkan atau mengubah basis kode terbaru dari cabang dasar.
Metode 2: Terapkan langsung dari cabang mana pun (menggunakan tag)
Pendekatan lain adalah menerapkan menggunakan tag. Untuk menerapkan menggunakan tag, setel
branch
konfigurasinya. di 'deploy.rb' sebagai berikut,Dan, konfigurasikan CI untuk menerapkan secara bersyarat ke tahapan yang berbeda jika pola tag terkait cocok (misalnya
/.*-test$/
).Sekarang, penerapan dapat dilakukan dari cabang mana pun,
Pertama, buat tag dari cabang mana saja,
git tag -a v0.1.0-test -m "Versi 0.1.0-test"
Dan, dorong
git push origin v0.1.0-test
Catatan: Metode di atas didasarkan pada Capistrano 3.
sumber
akan mengembalikan cabang Anda saat ini.
Saya selalu mengatur
gpsh
alih - alihgit push -u origin branch_name
sumber