Saya memulai proyek baru di PHP dan saya ingin mendapatkan umpan balik dari pengembang lain tentang strategi pilihan mereka untuk penerapan PHP. Saya ingin mengotomatiskan hal-hal sedikit sehingga setelah perubahan dilakukan, mereka dapat dengan cepat dimigrasikan ke server pengembangan atau produksi.
Saya memiliki pengalaman dengan penggunaan menggunakan Capistrano dengan Ruby serta beberapa skrip shell dasar.
Sebelum saya menyelam sendiri, akan lebih baik untuk mendengar bagaimana orang lain mendekati ini dalam proyek mereka.
Informasi lebih lanjut
Saat ini pengembang bekerja pada instalasi lokal situs dan melakukan perubahan pada repositori subversi. Penerapan awal dilakukan dengan mengekspor rilis yang ditandai dari svn dan mengunggahnya ke server.
Perubahan tambahan biasanya dilakukan sedikit demi sedikit dengan mengunggah file yang diubah secara manual.
sumber
Jawaban:
Untuk PHP, SVN dengan skrip build Phing adalah caranya. Phing mirip dengan ANT tetapi ditulis dalam PHP, yang membuatnya lebih mudah bagi pengembang PHP untuk memodifikasi untuk kebutuhan mereka.
Rutin penyebaran kami adalah sebagai berikut:
Ada juga phpUnderControl , yang merupakan server Integrasi Berkelanjutan. Saya tidak merasa sangat berguna untuk proyek web untuk jujur.
sumber
Saat ini saya sedang menggunakan PHP menggunakan Git . Hanya produksi git push yang diperlukan untuk memperbarui server produksi saya dengan salinan terbaru dari Git. Sangat mudah dan cepat karena Git cukup pintar untuk hanya mengirim diff dan bukan keseluruhan proyek lagi. Ini juga membantu menyimpan salinan repositori yang berlebihan pada server web jika terjadi kegagalan perangkat keras pada saya (meskipun saya juga mendorong agar GitHub aman).
sumber
Kami menggunakan Webistrano , antarmuka web untuk Capistrano, dan sangat senang dengannya.
Webistrano memungkinkan penyebaran multi-tahap, multi-lingkungan dari SVN, GIT dan lainnya. Ini memiliki dukungan rollback bawaan, dukungan untuk peran server terpisah seperti web, db, aplikasi, dll., Dan disebarkan secara paralel. Ini memungkinkan Anda untuk mengesampingkan parameter konfigurasi pada berbagai tingkatan, seperti per tahap, dan mencatat hasil setiap penyebaran, secara opsional mengirimkannya.
Meskipun Capistrano dan Webistrano adalah aplikasi Ruby, sintaksis dari 'resep' penyebaran mudah dan cukup kuat untuk dipahami oleh setiap programmer PHP. Awalnya Capistrano dibangun untuk proyek-proyek Ruby on Rails, tetapi dengan mudah mengakomodasi proyek-proyek PHP.
Setelah dikonfigurasi itu bahkan cukup mudah untuk digunakan oleh non-programmer, seperti penguji menggunakan versi pementasan.
Untuk menyediakan kemungkinan penyebaran tercepat, kami menginstal metode fast_remote_cache , yang memperbarui cache copy pekerjaan svn pada server jarak jauh, dan kemudian menghubungkan hasil.
sumber
Saya menggunakan Apache Ant untuk digunakan ke target yang berbeda (dev, QA dan live). Ant dirancang untuk bekerja untuk penyebaran Java, tetapi memberikan solusi kasus umum yang cukup berguna untuk menyebarkan file sewenang-wenang.
Sintaks file build.xml cukup mudah dipelajari - Anda menentukan target berbeda dan dependensinya yang dijalankan saat Anda memanggil program semut di baris perintah.
Sebagai contoh, saya memiliki target untuk dev, QA dan live, yang masing-masing tergantung pada target cvsbuild yang memeriksa revisi head terbaru dari server CVS kami, menyalin file yang sesuai ke direktori build (menggunakan tag fileset), dan kemudian rsyncs direktori build ke server yang sesuai. Ada beberapa kebiasaan untuk dipelajari, dan kurva belajarnya tidak sepenuhnya rata, tetapi saya telah melakukannya dengan cara ini selama bertahun-tahun tanpa kesulitan jadi saya akan merekomendasikannya untuk situasi Anda, meskipun saya ingin tahu apa jawaban lain yang saya Akan lihat di utas ini.
sumber
Saya melakukan hal-hal secara manual menggunakan Git. Satu repositori untuk pengembangan, yang akan dikirim
git push --mirror
ke repo publik, dan server langsung adalah repo ketiga yang ditarik dari situ. Bagian ini saya kira sama dengan pengaturan Anda sendiri.Perbedaan besar adalah bahwa saya menggunakan cabang untuk hampir setiap perubahan yang saya kerjakan (saya punya sekitar 5 sekarang), dan cenderung untuk bolak-balik di antara mereka. Cabang utama tidak bisa diubah secara langsung kecuali untuk menggabungkan cabang lainnya.
Saya menjalankan server langsung dari cabang master, dan ketika saya selesai dengan cabang lain dan siap untuk menggabungkannya, balikkan server ke cabang itu untuk sementara waktu. Jika rusak, mengembalikannya ke master membutuhkan beberapa detik. Jika berhasil, itu akan digabungkan menjadi master dan kode langsung diperbarui. Saya kira analogi ini dalam SVN akan memiliki dua copy pekerjaan dan menunjuk ke yang hidup melalui symlink.
sumber
Saya tahu Phing telah disebutkan beberapa kali sekarang, tapi saya sudah beruntung dengan phpUnderControl . Bagi kami, kami
sumber
alternatif untuk skrip penempatan buatan sendiri adalah dengan menggunakan platform-as-a-service yang mengabstraksi banyak hal yang cocok untuk Anda. PaaS biasanya akan menawarkan alat penyebaran kode sendiri, serta penskalaan, toleransi kesalahan (mis. Tidak turun ketika perangkat keras gagal), dan biasanya alat yang bagus untuk memantau, memeriksa log dll. Ada juga manfaat penerapan ke diketahui konfigurasi yang baik yang akan terus diperbarui dari waktu ke waktu (satu sakit kepala kurang untuk Anda).
PaaS yang saya sarankan adalah dotCloud , selain PHP ( lihat quickstart PHP mereka ) juga dapat menggunakan MySQL, MongoDB dan sejumlah layanan tambahan. Ini juga memiliki barang bagus seperti penerapan zero-downtime, rollback instan, dukungan penuh untuk SSL dan websocket, dll. Dan ada tingkatan gratis yang selalu menyenangkan :)
Tentu saja saya sedikit bias karena saya bekerja di sana! Opsi lain yang patut dicoba selain dotCloud adalah Pagodabox dan Orchestra (sekarang bagian dari Engine Yard).
Semoga ini membantu!
Salomo
sumber
Bahwa Anda secara otomatis dan buta mengambil perubahan dari repositori ke server produksi terdengar berbahaya. Bagaimana jika kode yang Anda komit mengandung bug regresi, sehingga aplikasi produksi Anda menjadi glitchy?
Tetapi, jika Anda menginginkan sistem Integrasi Berkelanjutan untuk PHP, saya kira Phing adalah pilihan terbaik untuk PHP. Saya belum mengujinya sendiri, karena saya melakukan hal-hal dengan cara manual misalnya scp.
sumber
Saya jauh terlambat ke pesta, tetapi saya pikir saya akan membagikan metode kami. Kami menggunakan Phing dengan Phingistrano , yang menyediakan fungsionalitas seperti Capistrano untuk Phing melalui file build yang dibangun sebelumnya. Ini sangat keren, tetapi hanya berfungsi jika Anda menggunakan Git saat ini.
sumber
Saya memiliki salinan kantor cabang rilis SVN di server. Memperbarui situs (ketika tidak ada perubahan skema) semudah mengeluarkan perintah pembaruan SVN. Saya bahkan tidak perlu membuat situs offline.
sumber
Phing mungkin merupakan taruhan terbaik Anda, jika Anda tahan terhadap file konfigurasi xml. Kerangka kerja Symfony memiliki port rake (pake) sendiri, yang bekerja cukup baik, tetapi agak erat digabungkan dengan bagian lain dari Symfony (Meskipun Anda mungkin bisa memisahkannya).
Pilihan lain adalah menggunakan Capistrano. Jelas itu tidak berintegrasi juga dengan PHP, seperti halnya dengan Ruby, tetapi Anda masih dapat menggunakannya untuk banyak hal.
Terakhir, Anda selalu dapat menulis skrip shell. Sejauh ini, itulah yang telah saya lakukan.
sumber
http://controltier.org/wiki/Main_Page
kita akan menggunakannya untuk penyebaran & pemeliharaan multi-server.
sumber
Satu tahun terlambat tetapi ... Dalam kasus saya, penyebaran tidak otomatis. Saya merasa berbahaya untuk menyebarkan kode dan menjalankan skrip migrasi basis data secara otomatis.
Sebagai gantinya, kait subversi hanya digunakan untuk menyebarkan ke server pengujian / staging. Kode digunakan untuk produksi pada akhir iterasi, setelah menjalankan tes dan memastikan semuanya akan berhasil. Untuk penyebaran itu sendiri, saya menggunakan Makefile custom-made yang menggunakan rsync untuk mentransfer file. Makefile juga dapat menjalankan skrip migrasi di server jarak jauh, menghentikan sementara / melanjutkan web dan server basis data.
sumber
Pada pekerjaan saya sendiri dan tim saya telah mengembangkan pengganti berorientasi Phing untuk penyebaran capistrano dan kami juga telah memasukkan beberapa barang yang tersedia dalam phing seperti pengujian PHPUnit, phpcs dan PHPDocumentor. Kami telah membuatnya menjadi repo git yang dapat ditambahkan ke proyek sebagai submodule di git dan ia bekerja dengan sangat baik. Saya telah melampirkannya ke beberapa proyek dan cukup modular sehingga mudah untuk membuatnya bekerja dengan proyek apa pun di salah satu dari beberapa lingkungan kami (pementasan, pengujian, produksi, dll ...).
Dengan skrip build phing Anda dapat menjalankannya dari baris perintah secara manual, dan saya juga telah berhasil mengotomatiskan rutinitas build / deploy dengan Hudson dan sekarang Jenkins ci.
Saya tidak dapat memposting tautan apa pun sekarang karena repo belum terbuka untuk umum, tetapi saya telah diberitahu bahwa kami akan segera membuka sumbernya, jadi jangan ragu untuk menghubungi saya jika Anda tertarik atau jika Anda memiliki pertanyaan tentang mengotomatiskan penyebaran Anda dengan phing dan git.
sumber
Saya kira cara penyebaran SVN tidak terlalu baik. Karena:
Anda perlu membuka akses SVN untuk seluruh dunia
memiliki banyak .svn di server web produksi
Saya pikir Phing untuk menghasilkan cabang + menggabungkan semua js / css + ganti stage config + ssh upload ke semua server www adalah cara yang lebih baik.
ssh ke 10 server www dan svn up juga merupakan masalah.
sumber