Saya seorang pengembang tunggal sebagian besar waktu saya, mengerjakan sejumlah besar, terutama proyek berbasis PHP. Saya ingin memprofesionalkan dan mengotomatiskan bagaimana perubahan pada basis kode ditangani, dan membuat proses Integrasi Berkelanjutan yang memungkinkan transisi untuk bekerja dalam tim dimungkinkan tanpa harus membuat perubahan mendasar.
Apa yang saya lakukan saat ini adalah, saya memiliki lingkungan pengujian lokal untuk setiap proyek; Saya menggunakan SVN untuk setiap proyek; perubahan diuji secara lokal, dan kemudian ditransfer ke versi on-line, biasanya melalui FTP. Dokumentasi API dihasilkan secara manual dari kode sumber; Tes unit adalah sesuatu yang saya lakukan secara perlahan, dan itu belum menjadi bagian dari rutinitas harian saya.
"Build cycle" yang saya bayangkan akan melakukan hal berikut:
Changeet diperiksa ke dalam SVN setelah diuji secara lokal.
Saya memulai proses pembangunan. Revisi KEPALA SVN diperiksa, dimodifikasi jika perlu, dan siap untuk diunggah.
Dokumentasi API dihasilkan secara otomatis - jika saya belum mengaturnya secara detail, menggunakan templat default, memindai seluruh basis kode.
Revisi baru dikerahkan ke lokasi remote melalui FTP (Termasuk beberapa direktori penggantian nama, chmodding, mengimpor database, dan sejenisnya.) Ini adalah sesuatu yang saya sudah seperti phing untuk sangat banyak, tapi aku terbuka untuk alternatif tentu saja.
Tes unit yang berada di lokasi yang telah ditentukan dijalankan. Saya diberitahu tentang kegagalan atau keberhasilan mereka menggunakan E-Mail, RSS atau (lebih disukai) output HTML yang dapat saya ambil dan masukkan ke dalam halaman web.
(opsional) file teks "changelog" pengguna akhir di lokasi yang ditentukan akan diperbarui dengan bagian pesan komit yang telah ditentukan sebelumnya ("Sekarang mungkin untuk memfilter baik" foo "dan" bar "pada saat yang sama. waktu) Pesan ini tidak harus identik dengan pesan komit SVN, yang mungkin mengandung lebih banyak informasi internal.
Hal-hal seperti metrik kode, pengecekan gaya kode, dan sebagainya bukan fokus utama saya saat ini, tetapi dalam jangka panjang, mereka pasti akan melakukannya. Solusi yang membawa ini out-of-the-box sangat ramah dipandang.
Saya mencari
Umpan balik dan pengalaman dari orang-orang yang berada atau berada dalam situasi yang sama, dan telah berhasil menerapkan solusi untuk ini
Terutama, tutorial langkah demi langkah yang baik dan langkah-langkah tentang cara mengatur ini
Solusi yang menyediakan otomatisasi sebanyak mungkin , misalnya dengan membuat kerangka API, menguji kasus dan sebagainya untuk setiap proyek baru.
dan juga
- Rekomendasi produk . Yang saya tahu sejauh ini adalah phing / semut untuk membangun, dan phpUnderControl atau Hudson untuk bagian pelaporan. Saya suka semuanya sejauh yang saya bisa lihat, tapi tentu saja saya tidak punya pengalaman mendetail dengan mereka.
Saya dibanjiri pekerjaan, jadi saya memiliki kecenderungan kuat terhadap solusi sederhana. Di sisi lain, jika fitur hilang, saya akan menangis karena terlalu terbatas. :) Solusi point-and-click dipersilahkan juga. Saya juga merekomendasikan produk komersial yang dapat bekerja dengan proyek PHP.
Pengaturan saya
Saya bekerja pada Windows secara lokal (7, tepatnya) dan sebagian besar proyek klien dijalankan pada LAMP stack, seringkali pada shared hosting (= tidak ada SSH jarak jauh). Saya mencari solusi yang dapat saya jalankan di lingkungan saya sendiri. Saya siap mengatur VM Linux untuk ini, tidak ada masalah. Solusi yang dihosting menarik bagi saya hanya jika mereka menyediakan semua aspek yang dijelaskan, atau cukup fleksibel untuk berinteraksi dengan bagian lain dari proses.
Bounty saya menerima jawaban yang saya rasa akan memberi saya jarak tempuh paling besar. Ada banyak masukan bagus di sini, saya berharap saya bisa menerima lebih dari satu jawaban. Terimakasih semuanya!
Istilah yang Anda cari adalah "integrasi berkelanjutan."
Berikut adalah contoh seseorang yang menggunakan GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
CruiseControl (yang merupakan server CI), dapat menggunakan Hosted SVN / GIT sebagai sumber. Jadi Anda bahkan dapat menggunakannya dengan GitHub atau Beanstalk atau yang lainnya.
Kemudian Anda dapat mengintegrasikannya dengan jenis perangkat lunak berikut:
Anda juga dapat mencoba CI yang dihosting ini: http://www.php-ci.net/hosting/create-project
Perlu diingat, bahwa alat-alat itu membutuhkan dukungan khusus jika Anda mengintegrasikannya sendiri.
Sudahkah Anda juga memikirkan manajemen proyek dan manajemen tambalan?
Anda dapat menggunakan Redmine untuk manajemen proyek. Ini memiliki dukungan integrasi terus menerus yang terintegrasi, tetapi hanya sebagai sisi klien (bukan sebagai server CI).
Coba gunakan SVN / GIT / etc yang di-host. solusi, karena mereka akan menutupi cadangan Anda dan menjaga server mereka berjalan, sehingga Anda dapat fokus pada pengembangan.
Untuk tutorial tentang cara mengatur Hudson, lihat: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
sumber
Saya menggunakan server integrasi berkelanjutan Atlassian dari Bambu untuk proyek PHP utama saya (bersama dengan produk mereka yang lain seperti fisheye (penjelajahan repositori), jira (pelacak masalah) dan semanggi (cakupan kode)).
Ini mendukung SVN dan sekarang mendukung Git dan memiliki antarmuka pengguna yang hebat. Ini tersedia untuk linux, windows dan mac dan dapat menjalankan standalone pada server tomcat sendiri yang sangat bagus untuk orang-orang (seperti saya) yang tidak suka menghabiskan waktu berhari-hari untuk mengatur alat mereka). Meskipun mungkin terlihat mahal, sebagai pengembang sendiri saya membeli lisensi starter kit untuk $ 10 ($ 10 oleh perangkat lunak). Ini bagus untuk tim kecil dan layak untuk dilihat.
sumber
PHPTesting PHPCI Ini bagus, server integrasi berkelanjutan yang dibangun di php.
Plus, ini gratis dan open source. :)
ini memiliki sejumlah plugin ..
PHPCI termasuk plugin integrasi untuk:
sumber
Saya sebagian besar admin sistem tetapi kadang-kadang saya kode PHP juga. Sebagai proyek sampingan saya membuat beberapa skrip yang akan membuatnya sederhana dan tidak menyakitkan untuk membuat lingkungan PHP CI yang penuh sesak menggunakan Jenkins. Itu juga menjalankan proyek sampel untuk Anda sehingga Anda dapat melihat bagaimana setiap langkah pembangunan dikonfigurasi.
Jika Anda ingin mencobanya, Anda hanya perlu akses kotak dan shell Debian / Ubuntu.
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
Perbarui Untuk menambahkan beberapa konten ke jawaban saya:
Anda cukup mengatur CI Jenkins untuk PHP menggunakan Ansible. Karena v1.4 mendukung peran yang dapat Anda unduh dari situs komunitas galaxy.ansibleworks.com mereka dan itu akan sangat membantu Anda. Ini disebut jenkins-php .
sumber
Saya sarankan menggunakan Jenkins http://jenkins-ci.org/ gratis dan bersifat open source.
Ini cukup mudah untuk setup, bekerja pada berbagai platform dan terintegrasi dengan baik dengan alat integrasi berkelanjutan lainnya seperti SonarQube (+ SQUALE) untuk mengukur utang teknis dan Thucydides untuk pengujian otomasi.
Saya akan sangat menyarankan menggunakan GIT atau GIT Hub untuk kontrol versi daripada SVN. Dari sudut pandang saya, ini hanya sistem kontrol versi yang lebih baik yang akan membantu Anda meningkatkan upaya pengembangan Anda nanti.
Karena Anda bekerja sebagian besar dengan proyek PHP, ada beberapa alat lain yang dapat Anda gunakan.
PHPUnit - Untuk pengujian unit
PHP CodeSniffer - Periksa standar pengkodean
PHP Depend - Menunjukkan dependensi kode PHP Anda
XDEBUG - Untuk pengujian kinerja
Semua alat ini dan dipicu dengan pekerjaan Jenkins dan membantu dengan kualitas dan kinerja kode Anda.
Semoga Sukses dan Selamat Menikmati!
sumber
Saya tidak menggunakan banyak produk, atau bahkan jenis produk yang Anda gunakan, tetapi saya akan memberi Anda pengalaman saya.
Saya menjalankan lingkungan TEST bersamaan dengan lingkungan PROD saya. Saya tidak punya pengujian lokal sendiri. Jika terlalu sulit untuk mendapatkan soemthing menjadi lingkungan TEST nyata, maka saya memperbaiki proses pembuatan saya. Saya tidak melihat gunanya menguji secara lokal, karena lingkungannya berbeda. UPDATE: Satu-satunya hal yang saya lakukan secara lokal adalah menjalankan "php -l" sebelum saya mengunggah apa pun. Menghentikan kesalahan bodoh.
Proses build bekerja dengan apa pun yang ada di ruang kerja saat ini, yang mencakup kode yang tidak dikomit. Ini bukan secangkir teh untuk semua orang, tapi aku akan sering ke TEST. Semuanya berkomitmen sebelum pergi ke PROD.
Bagian dari proses pembuatan saya (mirip dengan Anda) membuat dua file META. Satu berisi 100 perubahan terakhir (biasanya) dan juga memberi saya nomor daftar perubahan saat ini. Menunjukkan kepada saya perubahan apa yang diinstal. Yang lainnya berisi CLIENTSPEC (dalam istilah Perforce) yang menunjukkan kepada saya cabang apa yang digunakan dalam pembangunan ini. Bersama-sama ini memberi saya bangunan yang dapat direproduksi.
Saya tidak membangun langsung ke lingkungan target, tetapi ke area pementasan di server. Saya menggunakan SSH jadi ini masuk akal. Ini memberi saya beberapa keuntungan. Paling penting itu menghindari sekarat setengah jalan melalui unggahan besar. Ini juga memberi saya tempat untuk menyimpan file META, dan semua file build secara otomatis diarsipkan (jadi saya bisa langsung kembali ke build apa saja). Script juga mencatat pembaruan (jadi ada entri dalam aliran log dan saya bisa melihat pra dan pasca) dan menendang semua daemon (saya menggunakan daemontools jadi "svc -t"). Semua ini lebih baik pada mesin target.
Satu masalah lain adalah perubahan DB. Saya menyimpan skrip master skema DB, yang saya perbarui setiap kali skema berubah. Setiap perubahan juga masuk ke skrip changes.sql, yang diunggah bersama build ke area pementasan. Skrip dijalankan sebagai bagian dari skrip instal.
sumber
Saya baru-baru ini memulai proses yang sama, dan saya menggunakan Beanstalk untuk svn hosting.
Ada dua fitur bagus di akun berbayar (mulai dari $ 15 saya pikir):
Saya yakin ada server svn lain yang di-host atau self-hosting dengan dua fitur ini, tetapi beanstalk adalah salah satu yang saya punya pengalaman dan berfungsi sangat, sangat baik
Ada juga API, yang saya bayangkan dapat digunakan untuk mengintegrasikan penyebaran lebih lanjut ke proses Anda.
sumber
Pertimbangkan fazend.com , platform CI yang dihosting gratis, yang mengotomatiskan konfigurasi dan prosedur pemasangan. Anda tidak perlu mengatur kontrol versi, pelacakan bug, server CI, lingkungan pengujian, dll. Semuanya dilakukan sesuai permintaan.
sumber