Bagaimana cara menerapkan aplikasi saya secara otomatis setelah git push (GitHub dan node.js)?
92
Saya memiliki aplikasi saya (node.js) yang diterapkan di VPS (linux). Saya menggunakan git hub sebagai repositori. Bagaimana cara menerapkan aplikasi secara otomatis, di git push?
Hai terima kasih banyak Apa yang mencegah Bob menjalankan skrip penerapan saya?
Lanjutan
16
@Advanced 1 mungkin izin skrip, flag eksekusi ... 2 menambahkan tag penutup di PHP adalah praktik yang buruk.
Pawel Dubiel
3
@Advanced Satu teknik untuk memastikan Bob tidak mengeksekusi skrip Anda adalah dengan memastikan bahwa permintaan POST berasal dari server Github. Lihat header HTTP yang mereka kirim saat membuat permintaan. Anda juga dapat membuat URL 'rahasia' yang tidak dapat ditebak.
@ Arius2038 Pernah mendengar tentang "Anda belajar sesuatu yang baru setiap hari"? nah ini adalah "sesuatu yang baru" saya hari ini. Terima kasih telah berbagi!
Purefan
23
Ada beberapa penyebutan Git hooks sebagai jawaban / komentar, yang telah berhasil untuk saya di masa lalu .. jadi inilah resep saya jika orang lain membutuhkan lebih spesifik.
Saya menggunakan kombinasi git post-accept hook dan node-supervisor untuk menyelesaikan penerapan otomatis sederhana (dengan asumsi Anda menggunakan repositori jarak jauh git pada mesin itu).
Ini bagus, namun satu hal yang harus diperhatikan adalah jika Anda menambahkan npm baru ke aplikasi lokal Anda, Anda harus melakukan instalasi npm untuk modul itu di server juga. Jika tidak, Anda mungkin memiliki aplikasi yang mogok.
k00k
2
Tidak .. Modul node apa pun yang menjadi tempat bergantung aplikasi lokal saya diinstal di sub direktori node_modules dari proyek saya, yang merupakan repo GIT lokal saya, maka ketika saya menambahkan, melakukan, lalu mendorong ke server jarak jauh mereka juga akan disalin.
Wes Johnson
8
Benar, tetapi artinya adalah jika salah satu modul tersebut memiliki kode yang telah dikompilasi (seperti mhash misalnya), itu mungkin tidak berjalan di server lain yang memiliki OS dan / atau arsitektur berbeda. Menggunakan package.json untuk melacak dependensi Anda dan kemudian strategi penerapan yang dilakukan npm install -ldi server jarak jauh adalah cerdas. Ini tentu saja dapat digabungkan dengan metode Anda menggunakan kait pasca-terima.
k00k
1
dan Anda cukup menambahkan pohon kerja Git ke dalam perintah git checkout secara langsung: git --work-tree = / var / www / tree --git-dir = / var / repo / deploy.git checkout -f (daripada membuat variabel dan mengekspornya ke skrip Anda.
JasonB
Pertanyaannya adalah tentang Github.
Noah
18
Mungkin sangat terlambat untuk membalas di sini. Tetapi saya menemukan proyek ini di github dan tampaknya melakukan apa yang ingin Anda lakukan tetapi dengan cara yang jauh lebih bersih.
"Mungkin sangat terlambat untuk menjawab di sini." Tidak pernah terlalu terlambat. :) Anda benar-benar berkontribusi kepada seluruh komunitas (kebanyakan dari kami googler; wow, hanya melihat 20k tampilan itu!), Bukan satu orang yang mengajukan pertanyaan "beberapa waktu lalu". Waktu, dengan sendirinya, tidak relevan: selama teknologi yang dimaksud relevan, jawaban Anda juga akan demikian. (Terima kasih atas tipnya, BTW, memeriksanya ...)
Sz.
1
terima kasih atas perhatian Anda! ;) Ini bekerja dengan baik untuk saya pada waktu itu. Sekarang saya lebih suka menggunakan travis (travis-ci.org), (di mana pun saya bisa ) untuk penerapan otomatis. @lunakid
Saurabh Kumar
8
Dalam sebuah proyek yang sedang saya kembangkan, saya mengikuti pedoman yang tercakup dalam buku brilian Jez Humble "Pengiriman Berkelanjutan" (layak dibaca).
Ini berarti menciptakan pipa penyebaran menggunakan beberapa bentuk server integrasi berkesinambungan (saya menggunakan Thoughtworks edisi komunitas gratis Go ), yang bertanggung jawab untuk pertama memeriksa kode Anda untuk kualitas, kompleksitas dan menjalankan tes unit. Itu kemudian dapat mengikuti pipeline penerapan yang menghasilkan dorongan ke server produksi Anda.
Ini terdengar sangat rumit, tetapi tidak harus begitu, dan memang membuat seluruh proses penulisan kode dan itu membuat jalan produksi menjadi aman dan bebas khawatir (tidak ada hari rilis yang menakutkan!).
Saya menggunakan pipeline penerapan penuh untuk sistem langsung, dan versi yang dipotong untuk modul npm yang saya tulis, dan keduanya berbagi teknik penerapan 1-klik yang sama.
& 1 lagi untuk rekomendasi buku! Saya menemukan CI tidak untuk didekati dengan santai.
Merrick
yah, orang-orang mengajukan pertanyaan sederhana, Anda memberikan solusi lengkap :). Saya harus mengatakan ini berlebihan. Tetapi jika Anda sudah menggunakan pengiriman berkelanjutan, mungkin inilah rute yang harus ditempuh.
windmaomao
8
Saya baru saja menerbitkan solusi berbasis node untuk masalah Anda: node-cd
Ini terdiri dari aplikasi node sederhana yang berjalan di VPS Anda yang akan menerima Hooks pasca- terima Github dan menjalankan skrip yang Anda suka (misalnya skrip shell yang akan mematikan aplikasi Anda, git pull, dan memulai ulang).
+1 karena ini murni node.js, jadi poster tidak perlu menambahkan apa pun ke tumpukan mereka, atau menggunakan bahasa yang tidak mereka sukai. Juga, kode yang ditata dengan sangat baik
code_monk
3
Berikut implementasi nodeJS sederhana lainnya.
Ini adalah server node yang sangat sederhana yang berjalan pada nama host dan port yang Anda konfigurasikan dan dapat disiapkan untuk menangani posting GitHub yang menerima web hook. Dan tindakan pul / test / deploy yang sebenarnya dapat disesuaikan untuk melakukan apa pun yang Anda inginkan. Dalam implementasi saat ini, ini adalah perintah shell yang ditentukan secara inline dalam skrip server nodeJS. Dan ada skema keamanan berbasis secret_key yang sangat sederhana juga.
Ini pada dasarnya menggunakan file konfigurasi JSON untuk mendaftar repo mana yang Anda harapkan akan didorong, perintah mana yang ingin Anda jalankan saat menerapkan, dan direktori mana perintah harus dijalankan. Yang harus Anda lakukan adalah memodifikasi file konfigurasi sesuai keinginan Anda dan menjalankan naskah!
Selain itu, saya menggunakan Nginx sebagai proxy terbalik untuk meneruskan POST ini ke skrip saya. Anda dapat menemukan konfigurasi Nginx di repo Github yang sama di bawah folder 'nginx'.
jawaban PHP benar-benar sah menurut saya, tetapi jika Anda lebih suka Ruby, saya membuat blog solusinya. Itu sama saja dengan jawaban PHP, hanya dalam bahasa yang berbeda. Anda menggunakan web hook dan Anda memiliki skrip sederhana untuk mendengarkan permintaan HTTP yang relevan.
Saya telah membuat alat penerapan dasar saya sendiri yang secara otomatis akan menarik pembaruan baru dari repo - https://github.com/jesalg/SlimJim - Pada dasarnya alat ini mendengarkan github pasca-terima-kait dan menggunakan proxy untuk memicu perbarui skrip.
Saya adalah pendiri https://commando.io dan baru-baru ini kami mengumumkan integrasi dengan GitHub melalui sebuah layanan. Integrasi memungkinkan Anda menjalankan eksekusi di server saat Anda melakukan push ke repo GitHub. Ini adalah peluang sempurna untuk menjalankan skrip penerapan secara otomatis saat Anda memasukkan kode.
Eksekusi adalah skrip yang Anda tulis di dalam Commando.io yang dapat ditulis dalam bash, perl, python, ruby, go, atau node.js. Untuk membaca lebih lanjut, dan melihat contoh skrip eksekusi berjalan git pull, lihat pengumuman entri blog kami: http://blog.commando.io/run-executions-via-github-push/
Jawaban:
Contoh di PHP:
Arahkan ke github ke dalam repositori github Anda, tambahkan klik "Admin"
klik tab 'Service Hooks' => 'URL WebHook'
dan tambahkan
lalu buat git_test.php
Di build.sh Anda harus meletakkan perintah biasa untuk mengambil situs Anda dari github
sumber
Ada beberapa penyebutan Git hooks sebagai jawaban / komentar, yang telah berhasil untuk saya di masa lalu .. jadi inilah resep saya jika orang lain membutuhkan lebih spesifik.
Saya menggunakan kombinasi git post-accept hook dan node-supervisor untuk menyelesaikan penerapan otomatis sederhana (dengan asumsi Anda menggunakan repositori jarak jauh git pada mesin itu).
Siapkan Hook Pasca-Terima Anda
Di repositori Anda:
sudo vi hooks/post-receive
Dan itu akan terlihat seperti:
Setel izin file:
chmod +x hooks/post-receive
Git akan menyegarkan file di direktori aplikasi Anda setelah didorong ke repo.
Jalankan Node dengan Node-Supervisor
Anda harus menginstal Node-Supervisor di komputer Anda sebagai modul node global:
sudo npm install supervisor -g
Sekarang jalankan aplikasi node Anda dengan node-supervisor dan itu akan mengawasi perubahan pada file di direktori kerja Anda:
supervisor /home/path/to/your/www/server.js
(catatansupervisor
bukannode
).sumber
npm install -l
di server jarak jauh adalah cerdas. Ini tentu saja dapat digabungkan dengan metode Anda menggunakan kait pasca-terima.Mungkin sangat terlambat untuk membalas di sini. Tetapi saya menemukan proyek ini di github dan tampaknya melakukan apa yang ingin Anda lakukan tetapi dengan cara yang jauh lebih bersih.
https://github.com/logsol/Github-Auto-Deploy
Saksikan berikut ini. Akan juga tertarik untuk mengetahui pendapat orang lain tentang hal ini dalam hal komentar dan suara positif.
Cheers,
S
sumber
Dalam sebuah proyek yang sedang saya kembangkan, saya mengikuti pedoman yang tercakup dalam buku brilian Jez Humble "Pengiriman Berkelanjutan" (layak dibaca).
Ini berarti menciptakan pipa penyebaran menggunakan beberapa bentuk server integrasi berkesinambungan (saya menggunakan Thoughtworks edisi komunitas gratis Go ), yang bertanggung jawab untuk pertama memeriksa kode Anda untuk kualitas, kompleksitas dan menjalankan tes unit. Itu kemudian dapat mengikuti pipeline penerapan yang menghasilkan dorongan ke server produksi Anda.
Ini terdengar sangat rumit, tetapi tidak harus begitu, dan memang membuat seluruh proses penulisan kode dan itu membuat jalan produksi menjadi aman dan bebas khawatir (tidak ada hari rilis yang menakutkan!).
Saya menggunakan pipeline penerapan penuh untuk sistem langsung, dan versi yang dipotong untuk modul npm yang saya tulis, dan keduanya berbagi teknik penerapan 1-klik yang sama.
sumber
Saya baru saja menerbitkan solusi berbasis node untuk masalah Anda: node-cd
Ini terdiri dari aplikasi node sederhana yang berjalan di VPS Anda yang akan menerima Hooks pasca- terima Github dan menjalankan skrip yang Anda suka (misalnya skrip shell yang akan mematikan aplikasi Anda, git pull, dan memulai ulang).
sumber
Berikut implementasi nodeJS sederhana lainnya.
Ini adalah server node yang sangat sederhana yang berjalan pada nama host dan port yang Anda konfigurasikan dan dapat disiapkan untuk menangani posting GitHub yang menerima web hook. Dan tindakan pul / test / deploy yang sebenarnya dapat disesuaikan untuk melakukan apa pun yang Anda inginkan. Dalam implementasi saat ini, ini adalah perintah shell yang ditentukan secara inline dalam skrip server nodeJS. Dan ada skema keamanan berbasis secret_key yang sangat sederhana juga.
https://github.com/shyam-habarakada/rscds
Server pementasan saya sudah menginstal dan menjalankan node, jadi menulis ini cepat dan mudah.
sumber
Saya menemukan proyek untuk penerapan mudah menggunakan git.
git-play
Saya pikir itu cara yang tepat untuk Anda.
Saksikan berikut ini.
sumber
Jika Anda menginginkan solusi berbasis python / tornado, saya menulis skrip untuk menangani permintaan POST dari Layanan Webhook Github . Anda dapat menemukannya di https://github.com/Akobi/ops/tree/master/autodeploy
Ini pada dasarnya menggunakan file konfigurasi JSON untuk mendaftar repo mana yang Anda harapkan akan didorong, perintah mana yang ingin Anda jalankan saat menerapkan, dan direktori mana perintah harus dijalankan. Yang harus Anda lakukan adalah memodifikasi file konfigurasi sesuai keinginan Anda dan menjalankan naskah!
Selain itu, saya menggunakan Nginx sebagai proxy terbalik untuk meneruskan POST ini ke skrip saya. Anda dapat menemukan konfigurasi Nginx di repo Github yang sama di bawah folder 'nginx'.
Selamat mendorong!
sumber
jawaban PHP benar-benar sah menurut saya, tetapi jika Anda lebih suka Ruby, saya membuat blog solusinya. Itu sama saja dengan jawaban PHP, hanya dalam bahasa yang berbeda. Anda menggunakan web hook dan Anda memiliki skrip sederhana untuk mendengarkan permintaan HTTP yang relevan.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
sumber
Saya telah membuat alat penerapan dasar saya sendiri yang secara otomatis akan menarik pembaruan baru dari repo - https://github.com/jesalg/SlimJim - Pada dasarnya alat ini mendengarkan github pasca-terima-kait dan menggunakan proxy untuk memicu perbarui skrip.
sumber
Saya adalah pendiri https://commando.io dan baru-baru ini kami mengumumkan integrasi dengan GitHub melalui sebuah layanan. Integrasi memungkinkan Anda menjalankan eksekusi di server saat Anda melakukan push ke repo GitHub. Ini adalah peluang sempurna untuk menjalankan skrip penerapan secara otomatis saat Anda memasukkan kode.
Eksekusi adalah skrip yang Anda tulis di dalam Commando.io yang dapat ditulis dalam bash, perl, python, ruby, go, atau node.js. Untuk membaca lebih lanjut, dan melihat contoh skrip eksekusi berjalan
git pull
, lihat pengumuman entri blog kami: http://blog.commando.io/run-executions-via-github-push/sumber
Deepl.io tampaknya menjadi pesaing baru dan menjanjikan di ruang ini.
Fitur (diambil dari situsnya):
sumber
Perhatikan juga ada layanan gratis / murah di luar sana seperti REPOMAN.IO yang mengotomatiskan hampir semua ini untuk Anda.
sumber