Indonesian (Bahasa Indonesia) translation by Arief Syahrir (you can also view the original English article)
Dulu ada waktu ketika pengembang PHP harus menggunakan deployment tool yang diarahkan ke aplikasi web umum. Anda dapat melihat ini dalam Johannes Schickling tutorial tentang cara penggunaan aplikasi Laravel dengan Capistrano, misalnya. Ini adalah tool Ruby, dan Anda perlu untuk menulis kode Ruby. tool ini mendapatkan pekerjaan tapi terbatas integrasi dengan aplikasi PHP. Hal ini dapat mengakibatkan hacky solusi untuk beberapa skenario.
Tapi saat ini, kita diberkati dengan beberapa tool deploymen yang ditulis dalam bahasa kami yang memungkinkan integrasi yang lebih dalam. Salah satu tool ini adalah Rocketeer, tool yang mengambil inspirasi dari Capistrano dan Framework Laravel.
Rocketeer adalah tool modern yang membawa pendekatan besar untuk kebutuhan deployment. Itu adalah untuk menjalankan tugas dan mengelola aplikasi Anda di lingkungan yang berbeda dan server. Selain itu, ini juga memiliki beberapa magic di dalamnya, seperti menginstal dependensi composer jika mendeteksi composer.json
file. Anda mendapatkan waras default dan otomatisasi tugas umum untuk aplikasi PHP modern. Dan Anda memiliki kemampuan untuk menyesuaikan dan memperpanjang segala sesuatu.
Anda bisa menggambarkannya sebagai SSH task runner yang berjalan di client-side. Perintah menjalankan pada server melalui koneksi SSH. Jika Anda menggunakan shared hosting provider dengan hanya akses FTP, Anda beruntung, sayangnya. Apa yang Anda butuhkan juga adalah remote repositori yang mana tool dapat mengambil kode Anda. Ada dukungan untuk Git dan SVN secara default. Perlu dukungan untuk sistem kontrol versi lain? Menulis implementasi Anda sendiri dengan interface yang disediakan.
Instalasi
Anda dapat menginstal Rocketeer dalam dua cara yang berbeda. Entah Anda men-download phar file dan membuat executable atau Anda menginstalnya melalui composer. Saya seorang pendukung yang kedua. Setelah itu sebagai dependency memungkinkan instalasi mudah ketika kloning repositori. Hal ini dapat menguntungkan siapapun kloning repositori untuk mendapatkan mereka up and running.
Menginstal dengan Composer:
1 |
$ composer require anahkiasen/rocketeer --dev |
Saya tidak menyarankan bahwa Anda menginstalnya secara global. Menjaganya agar tetap pada tingkat repositori akan memastikan bahwa setiap orang yang mendeploy adalah menjalankan versi yang sama. Apa yang saya sarankan adalah bahwa Anda menambahkan vedndor/bin
ke PATH Anda. Maka Anda dapat menggunakan biner dengan mengetikkan rocketeer
root proyek Anda.
Ignition
Mari kita mulai! Pertama Anda bootstrap direktori dan file untuk konfigurasi. Anda melakukan ini dengan menjalankan rocketeer igniter
di root dari proyek Anda.
Ketika aplikasi Anda ignite, tool menciptakan .rocketeer
folder dalam proyek Anda. Isi direktori akan terlihat seperti ini:
1 |
| .rocketeer |
2 |
| -- config.php |
3 |
| -- hooks.php |
4 |
| -- paths.php |
5 |
| -- remote.php |
6 |
| -- scm.php |
7 |
| -- stages.php |
8 |
| -- strategies.php |
Berikut adalah semua file konfigurasi Anda perlu mulai mengatur deployment Anda. Setiap kali saya merujuk pada file konfigurasi dari sini di luar, ada di .rocketeer/
direktori.
Struktur Folder Remote
Hal ini penting untuk memahami bagaimana Rocketeer mengelola struktur folder di sisi server, karena itu sedikit berbeda dengan setup yang biasa. Menggunakan beberapa direktori untuk mengelola aspek-aspek tertentu dari deplomeny, sehingga dapat efektif dalam apa yang dilakukannya. Anda menentukan path ke mana Anda ingin deploy aplikasi pada server Anda, dan tool akan mengurus sisanya. Folder itu akan terlihat seperti ini, jika Anda memiliki /var/www/app
sebagai direktori aplikasi Anda.
1 |
| /var/www/app |
2 |
| | -- current => /var/www/app/releases/20160103183754 |
3 |
| | -- releases |
4 |
| | | -- 20160101161243 |
5 |
| | | |-- uploads => /var/www/app/shared/uploads |
6 |
| | | -- 20160103183754 |
7 |
| | | |-- uploads => /var/www/app/shared/uploads |
8 |
| | -- shared |
9 |
| | | -- uploads |
Folder yang paling penting adalah current
, yang menunjuk ke rilis terbaru Anda. Itulah dimana root dokumen server web Anda harus ditetapkan. Jadi apa yang terjadi bila Anda deploy?
- Tool menciptakan time-stamped folder dalam direktori
releases
. - Menyelesaikan semua tugas-tugas untuk membuat sebuah siap rilis.
- Update link simbolik
current
untuk rilis terbaru.
Proses ini membuat penggunaan transparan kepada pengguna. Beralih antara rilis hampir instan, biasanya disebut sebagai atom deployment.
Beberapa data harus terus-menerus ada diantara deployment Hal ini dapat upload file, sesi pengguna dan log, misalnya. File-file atau folder pergi ke direktori shared
. Tool menciptakan link simbolik dalam setiap rilis untuk yang Anda telah mengkonfigurasi.
Event
Event drive tool, dan semua strategi dan tugas-tugas dijalankan before dan after event ketika mereka berjalan. Mereka juga menyediakan event khusus halt ketika tugas yang gagal. Ini bisa menjadi contoh dependencies.halt
, atau deploy.halt
untuk umum kegagalan. Hal ini memungkinkan kita untuk menghubungkan ke proses di mana kita perlu.
event default yang terjadi selama penggunaan adalah:
-
deploy.before:
Sebelum sesuatu terjadi. -
create-release.before:
sebelum menciptakan direktori rilis baru. -
create-release.after:
Setelah membuat direktori rilis baru. -
dependencies.before:
sebelum menginstal atau memperbarui dependensi. -
dependencies.after:
Setelah menginstal atau memperbarui dependensi. Mungkin membuat yakin bahwa binari dalam folder vendor eksekusi. -
test.before:
sebelum menjalankan tes. -
test.after:
Setelah menjalankan tes. -
migrate.before:
sebelum menjalankan migrasi database. Mungkin Anda ingin melakukan backup database Anda? -
migrate.after:
Setelah menjalankan migrasi database. -
deploy.before-symlink:
sebelum symlinking rilis sebagai rilis kami saat ini. -
deploy.after:
selesai. Anda dapat memberitahu orang bahwa segala sesuatu adalah halus berlayar atau sebaliknya.
Kami juga dapat membuat kita sendiri event yang kita dapat jalankan dan mendengarkan. Untuk sekarang, kita akan tetap dengan event-event ini disediakan bagi kita. Mereka akan cukup bagi kita sekarang.
Task
Di jantung Rocketeer, kita menemukan konsep yang disebut task. Sebagian dari apa yang terjadi di belakang adalah task pokok. Definisi task bisa menjadi serangkaian instruksi untuk melakukan sebagai langkah dalam deployment. Jika kita melihat beberapa class yang menyediakan tool, kita bisa merasakan umum dari apa itu task: class seperti Deploy
, Setup
, Migrate
, Rollback
dan Dependencies
. Bila Anda menggunakan, menempatkan perintah itu sendiri adalah task dengan sub-task.
Jenis Task
Ini adalah dimana Anda akan mulai untuk melihat bagaimana terintegrasi tool dengan PHP, karena Anda akan menulis task dalam bahasa. Anda dapat membuat tugas-tugas Anda sendiri dalam tiga cara berbeda:
Perintah Arbitrary terminal. Ini adalah satu-kalimat yang Anda ingin menjalankan pada server Anda. Dapat bermanfaat untuk banyak hal, seperti menjalankan gulp build---production
misalnya.
Closures. Jika Anda memerlukan sedikit lebih fleksibilitas atau kompleksitas, Anda dapat menulis task sebagai closure (fungsi anonim). Mengatakan Anda ingin menghasilkan dokumentasi API selama penggunaan.
1 |
function($task) { |
2 |
return $task->runForCurrentRelease('apigen generate source src destination api'); |
3 |
}
|
Classes. Untuk tugas-tugas yang lebih kompleks, Anda harus menggunakan pilihan untuk membuat class untuk task. Anda membuat class dan extend Rocketeer\Abstracts\AbstractTask.
Kemudian Anda harus memberikan setidaknya Deskripsi dan metode execute().
Berikut adalah contoh yang benar-benar berguna hanya untuk menunjukkan struktur class task:
1 |
namespace MyDeployableApp\Deploy\Tasks; |
2 |
|
3 |
class HelloWorld extends \Rocketeer\Abstracts\AbstractTask |
4 |
{
|
5 |
/**
|
6 |
* Description of the Task
|
7 |
*
|
8 |
* @var string
|
9 |
*/
|
10 |
protected $description = 'Says hello to the world'; |
11 |
|
12 |
/**
|
13 |
* Executes the Task
|
14 |
*
|
15 |
* @return void
|
16 |
*/
|
17 |
public function execute() { |
18 |
$this->explainer->line('Hello world!'); |
19 |
|
20 |
return true; |
21 |
}
|
22 |
}
|
Catatan bahwa Anda harus mendaftarkan task class anda sendiri. Entah Anda melakukannya melalui hooks.php
file dan menambahkannya ke array custom
...
1 |
'custom' => array('MyDeployableApp\Deploy\Tasks\HelloWorld',), |
... atau Anda dapat melakukan ini melalui facade:
1 |
Rocketeer::add('MyDeployableApp\Deploy\Tasks\HelloWorld'); |
Setelah Anda mendaftar, Anda dapat menjalankannya:
1 |
$ rocketeer hello:world |
2 |
staging/0 | HelloWorld (Says hello to the world) |
3 |
staging/0 |=> Hello world! |
4 |
Execution time: 0.004s |
Menentukan Task
Kami membahas event pertama karena kita menghubungkan tugas di mana kita perlu mereka dalam proses. Anda dapat melakukan ini dalam beberapa cara. Pergi dengan tempat yang Anda sukai dan yang memenuhi persyaratan untuk tingkat kompleksitas.
Cara termudah untuk menentukan task Anda adalah dalam hooks.php
file. Ini menyediakan dua array untuk ini, menentukan task eksekusi sebelum atau sesudah event tertentu.
1 |
'before' => [ |
2 |
'setup' => [], |
3 |
'deploy' => ['hello:world'], |
4 |
'cleanup' => [], |
5 |
],
|
Strategies
Anda dapat memberitahu sudah bahwa task yang diberikan cukup generik. Ambil Dependencies
, misalnya. Apa jenis dependensi yang kita bicarakan dan manajer paket yang mana?
Ini adalah dimana strategies datang ke dalam bermain. Strategi adalah spesifik pelaksanaan task, seperti menjalankan tes dengan Behat atau menggunakan Gulp untuk membangun front-end. Task memiliki strategi default dengan pilihan untuk menjalankan strategi lain melalui CLI. Kita bisa daftar strategi yang tersedia seperti ini:
1 |
$ rocketeer strategies |
2 |
+--------------+----------------+-----------------------------------------------------------------------+ |
3 |
| Strategy | Implementation | Description | |
4 |
+--------------+----------------+-----------------------------------------------------------------------+ |
5 |
| check | Php | Checks if the server is ready to receive a PHP application | |
6 |
| check | Ruby | Checks if the server is ready to receive a Ruby application | |
7 |
| check | Node | Checks if the server is ready to receive a Node application | |
8 |
| deploy | Clone | Clones a fresh instance of the repository by SCM | |
9 |
| deploy | Copy | Copies the previously cloned instance of the repository and update it | |
10 |
| deploy | Sync | Uses rsync to create or update a release from the local files | |
11 |
| test | Phpunit | Run the tests with PHPUnit | |
12 |
| migrate | Artisan | Migrates your database with Laravel's Artisan CLI | |
13 |
| dependencies | Composer | Installs dependencies with Composer | |
14 |
| dependencies | Bundler | Installs dependencies with Bundler | |
15 |
| dependencies | Npm | Installs dependencies with NPM | |
16 |
| dependencies | Bower | Installs dependencies with Bower | |
17 |
| dependencies | Polyglot | Runs all of the above package managers if necessary | |
18 |
+--------------+----------------+-----------------------------------------------------------------------+ |
19 |
Menciptakan Strategy Anda sendiri
Mengatakan Anda lakukan BDD dengan Behat untuk aplikasi Anda daripada TDD. Kemudian Anda ingin menjalankan tes Anda dengan Behat daripada PHPUnit. Karena ini test runner, sudah ada namespace strategy untuk itu, tapi tidak ada implementasi. Membuat direktori .rocketeer/strategies/
dan tempatkan BehatStrategy.php baru
Anda di sana.
1 |
namespace MyDeployableApp\Deploy\Strategies; |
2 |
|
3 |
use Rocketeer\Abstracts\Strategies\AbstractStrategy;use Rocketeer\Interfaces\Strategies\TestStrategyInterface; |
4 |
|
5 |
class BehatStrategy extends AbstractStrategy implements TestStrategyInterface |
6 |
{
|
7 |
public function test() { |
8 |
return $this->binary('vendor/bin/behat')->runForCurrentRelease(); |
9 |
}
|
10 |
}
|
Sekarang Anda dapat mengganti strategi tes implementasi baru di strategies.php.
1 |
'test' => 'Behat', |
Connection & Stage
Tidak masalah jika Anda memiliki infrastruktur di tempat atau memilikinya dalam pikiran. Tidak masalah jika aplikasi Anda deploy banyak environment di seluruh banyak server. Rocketeer akan berada di sana untuk Anda. Anda bahkan dapat memiliki banyak lokasi yang berbeda-beda pada server yang sama. Ini adalah dimana istilah connection dan stage masuk.
Connection adalah server dimana Anda deploy aplikasi Anda. Hal ini sering disebut environment, dan produksi dan staging adalah contoh ini. Mengkonfigurasi koneksi ini sangat mudah dalam tool. Entah Anda melakukannya melalui array yang bersarang atau dengan menjaga file terpisah untuk setiap connection. Setiap connection juga dapat memiliki beberapa server di dalamnya.
Tahap adalah seperti koneksi dalam koneksi, semacam "connectionception". Anda dapat mengatur staging dan production environment yang pada sebuah single servier dengan menggunakan stage. Jadi daripada memiliki dua connection terpisah, Anda memiliki satu connection dengan dua stage di dalamnya.
Plugin
Sebuah fitur yang bagus adalah bahwa kita dapat menambah proses kami menggunakan plugin. Ada beberapa yang resmi untuk integrasi dengan Laravel, Slack, HipChat, dan Campfire. Lalu ada beberapa, tapi tidak banyak, pada Packagist. Menginstal plugin adalah tugas yang mudah melalui CLI:
1 |
$ rocketeer plugin:install rocketeers/rocketeer-slack |
Meskipun ada sejumlah terbatas plugin, itu meninggalkan ruang untuk mengembangkan plugin nantinya. Ini bercerita tentang sebuah filosofi yang baik. Dan mengapa tidak mengembangkan satu Anda sendiri?
Mengatur Deployment
Untuk mendapatkan aplikasi Anda berjalaan, Anda perlu beberapa konfigurasi dasar. Anda perlu untuk memberitahu Rocketeer dimana untuk mencari aplikasi Anda dan mana harus menggunakan itu. Mari kita mulai dengan menetapkan nama aplikasi dan mengkonfigurasi server produksi di config.php
.
1 |
'application_name' => 'my-deployable-app', |
2 |
|
3 |
// [...]
|
4 |
|
5 |
'connections' => [ |
6 |
'staging' => [ |
7 |
'host' => 'staging.my-deployable-app.com', |
8 |
'username' => '', |
9 |
'password' => '', |
10 |
'key' => '/Users/niklas/.ssh/id_rsa', |
11 |
'keyphrase' => '', |
12 |
'agent' => '', |
13 |
'db_role' => true, |
14 |
],
|
15 |
'production' => [ |
16 |
'host' => |
17 |
'www.my-deployable-app.com', |
18 |
'username' => '', |
19 |
'password' => '', |
20 |
'key' => '/Users/niklas/.ssh/id_rsa', |
21 |
'keyphrase' => '', |
22 |
'agent' => '', |
23 |
'db_role' => true, |
24 |
],
|
25 |
],
|
Anda sekarang memiliki nama aplikasi dan server untuk deploy aplikasi Anda. Konfigurasi ini menggunakan otentikasi kunci SSH, tetapi Anda dapat terhubung dengan username dan password juga. Untuk mendapatkan diminta untuk username dan password, set 'key' => ''
. Alat akan menyimpan kredensial pada komputer lokal Anda dan menggunakannya setiap waktu di kemudian hari. Saya tidak menyarankan pengaturan username dan password di file konfigurasi, karena Anda tidak ingin kredensial di commit ke repositori Anda.
Apa yang sekarang harus Anda lakukan adalah mengubah default koneksi yang Anda dikirimkan. Memiliki default untuk produksi tidak ideal. Anda tidak ingin untuk deploy ke produksi oleh kecelakaan. Jadi pada file yang sama, mencari key default
dan mengubah nilai ke staging
.
1 |
'default' => ['staging'], |
Nama aplikasi itu sendiri tidak begitu penting. Tapi jika Anda tidak menetapkan folder untuk menyebarkan ke, itu akan menggunakan ini sebagai nama folder dalam direktori root. Secara default, root diatur ke /home/www.
Dengan nama aplikasi ini, itu akan deploy ke /home/ www/my-deployable-app.
Jika Anda ingin mengubah direktori root Anda, Anda dapat mengubah ini di remote.php.
1 |
// Deploys to /var/www/my-deployable-app/
|
2 |
'root_directory' => '/var/www/', |
Pada file yang sama, Anda memiliki kemampuan untuk mengganti nama aplikasi dan menentukan direktori untuk aplikasi Anda.
1 |
// Deploys to /var/www/tutsplus-tutorial
|
2 |
'app_directory' => 'tutsplus-tutorial', |
3 |
Sekarang Anda harus menerima pada akhir deployment, tetapi Anda juga perlu untuk mendirikan lokasi kode Anda sehingga ia dapat diambil. Anda melakukan ini dengan mengatur repositori remote Anda di scm.php.
Secara default menggunakan Git, tapi itu juga memiliki dukungan untuk SVN. Anda mengatakan itu alamat repositori kami dan pasokan kredensial jika diperlukan. Saya sarankan Anda menggunakan otentikasi kunci SSH di sini juga, dan meninggalkan username dan password kosong.
1 |
'repository' => 'git@github.com:owner/name.git', |
2 |
'username' => '', |
3 |
'password' => '', |
4 |
'branch' => 'master', |
Karena Anda menambahkan koneksi ke server produksi, Anda ingin deploy ke master branch.
Connection & Stage konfigurasi tertentu
Dalam kebanyakan kasus, Anda tidak ingin pilihan konfigurasi yang sama untuk semua connection atau stage. Katakanlah, misalnya, Anda ingin deploy branch lain di staging environment. Rocketeer memungkinkan Anda untuk mengganti nilai konfigurasi connection dan stage dengan config.php.
Untuk deploy branch disebut staging pada stagin connection, Anda dapat melakukan ini:
1 |
'on' => [ |
2 |
'connections' => [ |
3 |
'staging' => [ |
4 |
'scm' => [ |
5 |
'branch' => 'staging', |
6 |
]
|
7 |
]
|
8 |
],
|
9 |
],
|
Menggunakan array yang bersarang untuk menimpa nilai-nilai konfigurasi. Di bawah key staging
, menemukan key yang sesuai dalam file yang ingin Anda ubah. Dalam hal ini adalah branch
di scm.php.
Deploy, Mengangkat!!
Sekarang Anda memiliki semua diatur untuk membuat deployment yang sukses. Anda belum bertemu kebutuhan Anda untuk deployment yang lengkap, tapi itu sudah cukup untuk mendapatkan aplikasi kloning ke server Anda dan disajikan ke pengguna akhir. Pertama, Anda bisa menjalankan strategi check untuk melihat jika server Anda memenuhi persyaratan.
1 |
$ rocketeer check |
Jika semuanya baik-baik saja, Anda dapat deploy dengan menjalankan:
1 |
$ rocketeer deploy |
Karena ini adalah deployment pertama, Rocketeer akan memastikan semuanya secara normal. Alat menciptakan direktori dibutuhkan dan bahwa aplikasi kita akan hidup di dalamnya. Jika semuanya halus berlayar, Anda harus membangun lengkap aplikasi Anda di server.
Jika Anda mengubah default connection ke staging di bagian sebelumnya, itu akan selalu deploiy ke staging. Bahwa adalah, tentu saja, kecuali jika Anda mengatakan itu untuk deploy ke tempat lain. Bila Anda ingin deploy pada koneksi yang berbeda atau lebih dari satu, Anda menggunakan --on
.
1 |
# Deploy to production |
2 |
$ rocketeer deploy --on="production" |
3 |
|
4 |
# Deploy to staging and production |
5 |
$ rocketeer deploy --on="staging,production" |
Ingin melihat apa yang akan terjadi pada server Anda setelah Anda menekan tombol? Menggunakan flag--pretend
untuk membiarkan tool yang memberitahu Anda apa yang akan menjalankan pada server.
1 |
$ rocketeer deploy --pretend |
Houston, kami punya masalah. Kita membutuhkan sebuah rollback untuk kembali.
Sayangnya, kita perlu mengurus deployment yang merusak fungsi atau mendatangkan malapetaka dalam infrastruktur. Maka Anda perlu untuk membuat sebuah rollback untuk kembali ke rilis terbaru Anda. Untungnya itu adalah sebuah operasi sederhana-hanya jalankan perintah berikut:
1 |
$ rocketeer rollback |
Karena ini menyimpan sejumlah membangun, melakukan sebuah rollback untuk kembali itu cepat. Mengubah link simbolik dari current
untuk rilis sebelumnya.
Shared direktori
Pengaturan direktori bersama sederhana-hanya menambahkannya ke array shared
ditemukan di remote.php.
Rocketeer akan membuat dan link folder ini untuk Anda dalam setelah deployment. path tertentu harus relatif ke folder root Anda.
1 |
'shared' => [ |
2 |
'storage/logs', |
3 |
'storage/sessions', |
4 |
'storage/uploads', |
5 |
'.env', |
6 |
],
|
Direktori yang bisa ditulisi
Shared directory juga akan memerlukan server web untuk dapat menulis kepada mereka. Menulis log, sesi, atau upload file sering adalah tugas yang dilakukan oleh aplikasi. Ini yang Anda tambahkan ke array permissions.files
di remote.php.
1 |
'permissions' => [ |
2 |
'files' => [ |
3 |
'storage/sessions', |
4 |
'storage/logs', |
5 |
'storage/uploads', |
6 |
],
|
7 |
// [...]
|
8 |
],
|
Menginstal atau Update dependensi
Menginstal atau memperbarui dependensi adalah sesuatu yang Anda butuhkan jika aplikasi yang bergantung pada jenis dependensi. Tool ini dilengkapi dengan dukungan untuk manajer paket yang paling populer. Mengkonfigurasi apa pun ini tidak diperlukan jika Anda memiliki pengaturan default untuk mereka. Ini akan mendeteksi dan menginstal atau memperbarui dependensi untuk Composer, Npm, Bower dan Bundler. Strategi default untuk dependencies
diatur ke Polyglot
. Ini adalah alat yang cara mendeteksi dan menginstal dependensi untuk manajer paket berbeda.
Tetapi Katakanlah bahwa Anda ingin menginstal semua dependensi pada staging, dan menggunakan tool --no-dev
flag secara default. Mungkin Anda ingin menginstal PHPUnit untuk menjalankan tes, yang merupakan developm,ent dependency. Di strategies.php
, Anda dapat menemukan key composer
, yang menceritakan tool bagaimana untuk mengeksekusi composer. Anda kemudian dapat mengganti ini dalam config.php
:
1 |
use Rocketeer\Binaries\PackageManagers\Composer; |
2 |
|
3 |
// [...]
|
4 |
|
5 |
'on' => [ |
6 |
// [...]
|
7 |
'connections' => [ |
8 |
'staging' => [ |
9 |
'strategies' => [ |
10 |
'composer' => [ |
11 |
'install' => function (Composer $composer, $task) { |
12 |
return $composer->install([], ['--no-interaction' => null, '--prefer-dist' => null]); |
13 |
}
|
14 |
],
|
15 |
],
|
16 |
]
|
17 |
],
|
18 |
],
|
Migrasi database
Migrasi database adalah sering sesuatu yang ingin Anda lakukan bila Anda memiliki sebuah rilis lengkap, sesaat sebelum symlink ke current. Apa alat yang Anda gunakan, Anda dapat memberitahu untuk menjalankan sebelum deploy.before-symlink.
hook ini bukanlah yang biasa, tapi hook internal. Anda kemudian harus mendaftarkannya tempat lain daripada hooks.php.
Anda dapat ini melakukan ini di events.php
, yang Anda dapat membuat jika belum ada.
1 |
use Rocketeer\Facades\Rocketeer; |
2 |
|
3 |
// Laravel
|
4 |
Rocketeer::addTaskListeners('deploy', 'before-symlink', function ($task) { |
5 |
$task->runForCurrentRelease('php artisan migrate'); |
6 |
});
|
7 |
|
8 |
// Symfony2
|
9 |
Rocketeer::addTaskListeners('deploy', 'before-symlink', function ($task) { |
10 |
$task->runForCurrentRelease('php app/console doctrine:migrations:migrate'); |
11 |
});
|
12 |
|
13 |
// Stand-alone Doctrine
|
14 |
Rocketeer::addTaskListeners('deploy', 'before-symlink', function ($task) { |
15 |
$task->runForCurrentRelease('doctrine migrations:migrate --no-interaction'); |
16 |
});
|
Menjalankan tes
Menjalankan tes dalam proses deployment adalah cara yang bagus untuk memastikan bahwa tidak ada kode yang rusak atau tes slip melalui celah-celah. Secara default, tool menggunakan PHPUnit, dan Anda dapat menghubungkan runner tes untuk menjalankan setelah dependensi yang diinstal atau diperbarui.
1 |
'after' => [ |
2 |
'setup' => [], |
3 |
'deploy' => [], |
4 |
'dependencies' => ['test'], |
5 |
'cleanup' => [], |
6 |
],
|
Kita harus sekarang melihat mengeksekusi PHPUnit pada penggunaan masing-masing, dan dalam hal apapun gagal tes ini akan di batalkan. Pastikan Anda melihat output dari itu, tidak mungkin ada masalah dengan menemukan biner PHPUnit atau suite tes Anda.
1 |
staging/0 |---- Test (Run the tests on the server and displays the output) fired by dependencies.after |
2 |
staging/0 |------ Test/Phpunit (Run the tests with PHPUnit) |
3 |
$ cd /var/www/my-deployable-app/releases/20160129220251$ /var/www/my-deployable-app/releases/20160129220251/vendor/bin/phpunit --stop-on-failure |
4 |
[deploy@staging.mydeployableapp.com] (staging) PHPUnit 4.8.21 by Sebastian Bergmann and contributors. |
5 |
[deploy@staging.mydeployableapp.com] (staging) |
6 |
[deploy@staging.mydeployableapp.com] (staging) . |
7 |
[deploy@staging.mydeployableapp.com] (staging) Time: 4.79 seconds, Memory: 6.00Mb |
8 |
[deploy@staging.mydeployableapp.com] (staging) OK (1 test, 1 assertion) |
9 |
[deploy@staging.mydeployableapp.com] (staging)staging/0 |=====> Tests passed successfully |
Tool front-End
Sering aplikasi kami yang tidak hanya back-end, kecuali mereka sebuah REST API misalnya. Menjalankan tool untuk ujung front end adalah tugas biasa dengan tool seperti Grunt, Gulp atau Webpack. Membuat ini bagian dari proses deployment kami ada pengujian daripada menggunakan hook untuk menjalankan perintah seperti:
1 |
'after' => [ |
2 |
'setup' => [], |
3 |
'deploy' => [], |
4 |
'dependencies' => ['gulp build'], |
5 |
'cleanup' => [], |
6 |
],
|
Sebuah front end sering mengandalkan dependensi juga, jadi menjalankan tool setelah menginstal atau memperbarui mereka.
Tips & Trik
Menjalankan update
Jika Anda tidak ingin untuk membuat rilis baru ketika Anda deploy, Anda memiliki pilihan untuk menjalankan update. Berhati-hati ketika melakukan hal ini karena Anda tidak akan mampu rollback ke versi sebelumnya, hanya rilis sebelumnya. Tapi ada cara yang mudah dan cepat untuk memperbarui aplikasi Anda dengan perubahan terbaru dengan:
1 |
$ rocketeer update |
Local Task
Kadang-kadang hal ini dapat menyenangkan untuk menjalankan tugas di local environment. Katakanlah Anda ingin menjalankan pemeriksaan PHPCS atau membangun static asset dan meng-upload ke server, menghilangkan kebutuhan binari tertentu pada server. Jika Anda membuat sebuah class task, Anda dapat menetapkan variabel protected
$local ke true
.
1 |
class MyTask extends Rocketeer\Abstracts\AbstractTask |
2 |
{
|
3 |
protected $local = true; |
4 |
|
5 |
// [...]
|
6 |
}
|
Kesimpulan
Proses deployment adalah bagian penting dari aplikasi lifecycle. Tool seperti Rocketeer memungkinkan Anda dengan mudah membuat ini bukan masalah yang rumit. Hal ini terutama berlaku ketika menggunakannya untuk aplikasi PHP karena hal tersebut terintegrasi dengan baik dengan itu.
Menulis sebuah tutorial pengantar untuk Rocketeer ternyata menjadi tugas yang sulit. Alat ini begitu fleksibel bahwa menggambar garis di mana untuk menghentikan tidak mudah. Saya berharap saya mendapat di kemungkinan dalam menggunakan tool ini dan bagaimana hal ini dapat menguntungkan Anda dan aplikasi Anda. Jika Anda ingin menggali lebih dalam, saya sarankan membaca dokumentasi lengkap. Ada lebih banyak tool apa yang dapat saya membahas dalam artikel ini.