Automasi ujian, integrasi berterusan, dan penghantaran berterusan agak meluas dalam komuniti sekarang. Ini membawa pelbagai perkhidmatan yang cuba membuat proses lebih menyeronokkan dan kurang menggembirakan pemaju, sehingga mereka dapat memberi tumpuan kepada penyampaian perisian dan bukannya membina/mengkonfigurasi alat untuk melakukannya. Salah satu daripada perkhidmatan tersebut adalah semaphoreci.
Dalam artikel ini, kami akan menutup cara menggunakan skrip dan alat kami sendiri untuk meneruskan proses penempatan selepas ujian yang berjaya.
kami akan menggunakan Semaphoreci untuk penghantaran berterusan dan penyebaran untuk menolak kod kami ke pelayan pengeluaran DigitalOcean. Jika anda tidak biasa dengan Deployer, kami mengesyorkan anda menyemak pengenalan ini.
Aplikasi Demo
cara kerja Deployer adalah dengan kami mendefinisikan pelayan, dan kemudian membuat tugas yang mengendalikan proses mengerahkan aplikasi kepada pelayan tersebut. Skrip penyebaran.php kami kelihatan seperti ini:
Anda harus membaca artikel Deployer jika anda ingin mengetahui lebih lanjut mengenai skrip khusus ini. Langkah seterusnya adalah untuk menubuhkan projek semaphoreci. Sila baca artikel kursus Crash jika anda tidak pernah mencuba semaphoreci sebelum ini, dan lakukan itu.
<span><span><?php </span></span><span> </span><span><span>require_once "recipe/common.php"; </span></span><span> </span><span><span>set('ssh_type', 'native'); </span></span><span><span>set('default_stage', 'staging'); </span></span><span><span>env('deploy_path', '/var/www'); </span></span><span><span>env('composer_options', 'install --no-dev --prefer-dist --optimize-autoloader --no-progress --no-interaction'); </span></span><span><span>set('copy_dirs', [ </span></span><span> <span>'app/commands', </span></span><span> <span>'app/config', </span></span><span> <span>'app/controllers', </span></span><span> <span>'app/database', </span></span><span> <span>'app/lang', </span></span><span> <span>'app/models', </span></span><span> <span>'app/src', </span></span><span> <span>'app/start', </span></span><span> <span>'app/tests', </span></span><span> <span>'app/views', </span></span><span> <span>'app/filters.php', </span></span><span> <span>'app/routes.php', </span></span><span> <span>'bootstrap', </span></span><span> <span>'public', </span></span><span> <span>'composer.json', </span></span><span> <span>'composer.lock', </span></span><span> <span>'artisan', </span></span><span> <span>'.env', </span></span><span><span>]); </span></span><span> </span><span><span>set('shared_dirs', [ </span></span><span> <span>'app/storage/cache', </span></span><span> <span>'app/storage/logs', </span></span><span> <span>'app/storage/meta', </span></span><span> <span>'app/storage/sessions', </span></span><span> <span>'app/storage/views', </span></span><span><span>]); </span></span><span><span>set('writable_dirs', get('shared_dirs')); </span></span><span><span>set('http_user', 'www-data'); </span></span><span> </span><span><span>server('digitalocean', '174.138.78.215') </span></span><span> <span>->identityFile() </span></span><span> <span>->user('root') </span></span><span> <span>->stage('staging'); </span></span><span> </span><span><span>task('deploy:upload', function() { </span></span><span> <span>$files = get('copy_dirs'); </span></span><span> <span>$releasePath = env('release_path'); </span></span><span> </span><span> <span>foreach ($files as $file) </span></span><span> <span>{ </span></span><span> <span>upload($file, "<span><span>{$releasePath}</span>/<span>{$file}</span>"</span>); </span></span><span> <span>} </span></span><span><span>}); </span></span><span> </span><span><span>task('deploy:staging', [ </span></span><span> <span>'deploy:prepare', </span></span><span> <span>'deploy:release', </span></span><span> <span>'deploy:upload', </span></span><span> <span>'deploy:shared', </span></span><span> <span>'deploy:writable', </span></span><span> <span>'deploy:symlink', </span></span><span> <span>'deploy:vendors', </span></span><span> <span>'current',// print current release number </span></span><span><span>])->desc('Deploy application to staging.'); </span></span><span> </span><span><span>after('deploy:staging', 'success'); </span></span>
Untuk mengkonfigurasi strategi penempatan, kita perlu pergi ke halaman projek dan klik disediakan penempatan.
Selepas memilih penggunaan automatik, Semaphoreci akan memberi kita keupayaan untuk menentukan arahan penempatan. Perbezaan antara manual dan automatik, adalah bahawa penggunaan automatik dicetuskan selepas setiap ujian yang berjaya, sementara manual akan membolehkan kita menggunakan apa -apa komit yang berjaya.
kita boleh memilih untuk memasukkan deployer.phar dalam repo kami sebagai fail phar atau memerlukannya menggunakan komposer. Sama ada cara, arahan akan sama.
Kunci akan tersedia di bawah ~/.ssh/id_rsa, jadi identitifile () boleh ditinggalkan pada lalai.
tolak untuk menggunakan
Sekarang bahawa segala -galanya ditubuhkan, kita perlu melakukan beberapa perubahan kepada repositori untuk mencetuskan proses integrasi dan penempatan.
<span><span><?php </span></span><span> </span><span><span>require_once "recipe/common.php"; </span></span><span> </span><span><span>set('ssh_type', 'native'); </span></span><span><span>set('default_stage', 'staging'); </span></span><span><span>env('deploy_path', '/var/www'); </span></span><span><span>env('composer_options', 'install --no-dev --prefer-dist --optimize-autoloader --no-progress --no-interaction'); </span></span><span><span>set('copy_dirs', [ </span></span><span> <span>'app/commands', </span></span><span> <span>'app/config', </span></span><span> <span>'app/controllers', </span></span><span> <span>'app/database', </span></span><span> <span>'app/lang', </span></span><span> <span>'app/models', </span></span><span> <span>'app/src', </span></span><span> <span>'app/start', </span></span><span> <span>'app/tests', </span></span><span> <span>'app/views', </span></span><span> <span>'app/filters.php', </span></span><span> <span>'app/routes.php', </span></span><span> <span>'bootstrap', </span></span><span> <span>'public', </span></span><span> <span>'composer.json', </span></span><span> <span>'composer.lock', </span></span><span> <span>'artisan', </span></span><span> <span>'.env', </span></span><span><span>]); </span></span><span> </span><span><span>set('shared_dirs', [ </span></span><span> <span>'app/storage/cache', </span></span><span> <span>'app/storage/logs', </span></span><span> <span>'app/storage/meta', </span></span><span> <span>'app/storage/sessions', </span></span><span> <span>'app/storage/views', </span></span><span><span>]); </span></span><span><span>set('writable_dirs', get('shared_dirs')); </span></span><span><span>set('http_user', 'www-data'); </span></span><span> </span><span><span>server('digitalocean', '174.138.78.215') </span></span><span> <span>->identityFile() </span></span><span> <span>->user('root') </span></span><span> <span>->stage('staging'); </span></span><span> </span><span><span>task('deploy:upload', function() { </span></span><span> <span>$files = get('copy_dirs'); </span></span><span> <span>$releasePath = env('release_path'); </span></span><span> </span><span> <span>foreach ($files as $file) </span></span><span> <span>{ </span></span><span> <span>upload($file, "<span><span>{$releasePath}</span>/<span>{$file}</span>"</span>); </span></span><span> <span>} </span></span><span><span>}); </span></span><span> </span><span><span>task('deploy:staging', [ </span></span><span> <span>'deploy:prepare', </span></span><span> <span>'deploy:release', </span></span><span> <span>'deploy:upload', </span></span><span> <span>'deploy:shared', </span></span><span> <span>'deploy:writable', </span></span><span> <span>'deploy:symlink', </span></span><span> <span>'deploy:vendors', </span></span><span> <span>'current',// print current release number </span></span><span><span>])->desc('Deploy application to staging.'); </span></span><span> </span><span><span>after('deploy:staging', 'success'); </span></span>
Nota: Satu lagi helah kemas yang disediakan semaphoreci adalah sshing ke pelayan binaan untuk melihat apa yang salah.
Alat Penyebaran Lain
Proses yang sama yang kami gunakan di sini boleh digunakan untuk mana -mana alat penempatan lain. Sebagai contoh, Laravel Envoy mungkin dikonfigurasikan seperti ini:
Dan dalam langkah perintah penempatan, kami akan memasang dan menjalankan utusan:
Kesimpulan
// Edit something <span>git add . </span><span>git commit -am "Updated deploy" </span><span>git push origin master </span>
alat CI/CD adalah peningkatan yang hebat untuk aliran kerja pemaju, dan pastinya membantu pasukan mengintegrasikan kod baru ke dalam sistem pengeluaran. Semaphoreci adalah pilihan yang hebat yang saya cadangkan untuk mudah digunakan antara muka dan sokongan yang indah. Sekiranya anda mempunyai komen atau pertanyaan, sila hantarkannya di bawah!
Mengkonfigurasi Laravel untuk CI/CD melibatkan menubuhkan persekitaran ujian anda, menulis ujian untuk permohonan anda, menyediakan proses binaan anda, dan menubuhkan proses penempatan anda. Anda boleh menggunakan PHPUnit untuk ujian, komposer untuk menguruskan kebergantungan, dan alat seperti Envoy Laravel atau Deployer untuk mengautomasikan tugas penempatan. Anda juga perlu memilih platform CI/CD, seperti Semaphoreci atau Gitlab CI/CD, dan konfigurasikannya untuk menjalankan ujian anda, membina aplikasi anda, dan menggunakan aplikasi anda.
Bagaimana saya boleh menggunakan penyebaran untuk penyebaran Laravel? -Kop Kotak untuk Laravel. Untuk menggunakan Deployer untuk penggunaan Laravel, anda perlu memasangnya dalam projek anda menggunakan komposer. Kemudian, anda boleh membuat fail Deploy.php dalam direktori root projek anda dan tentukan tugas penempatan anda dalam fail ini. Sebaik sahaja tugas anda ditakrifkan, anda boleh menjalankannya menggunakan perintah DEP yang digunakan. mempunyai beberapa perbezaan. Envoy menggunakan sintaks bilah untuk menentukan tugas, sementara Deployer menggunakan sintaks PHP. Envoy lebih spesifik Laravel, sementara Deployer memberikan sokongan untuk banyak rangka kerja yang berbeza. Envoy lebih mudah dan mudah digunakan, tetapi Deployer menawarkan ciri-ciri yang lebih canggih, seperti penyebaran sifar-downtime, penyebaran atom, dan penyebaran selari.
Ya, anda boleh menggunakan kedua -dua Envoy dan Deployer Laravel dalam projek yang sama. Walau bagaimanapun, biasanya tidak perlu menggunakan kedua -dua alat, kerana mereka berfungsi dengan tujuan yang sama. Anda boleh memilih yang paling sesuai dengan keperluan anda. Jika anda lebih suka alat yang lebih mudah dengan sintaks bilah, anda boleh memilih utusan. Jika anda lebih suka alat yang lebih maju dengan sokongan untuk pelbagai rangka kerja yang berbeza, anda boleh memilih Deployer.Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan Envoy Laravel atau Deployer dengan Semaphoreci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!