CI/CD: test থেকে deployment pipeline
CI/CD Pipelines
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- CI এবং delivery/deployment আলাদা করা
- এক artifact পরিবেশে promote করা
- Laravel test, migration ও worker restart-এর ক্রম নির্ধারণ
সমস্যা দিয়ে শুরু
একটি hotfix developer-এর computer থেকে সরাসরি upload হলো। Missing dependency-তে app বন্ধ, কোন source deploy হয়েছে তা জানা যাচ্ছে না। Pipeline-এর কাজ প্রতিটি পরিবর্তন একই যাচাইয়ের মধ্য দিয়ে নেওয়া এবং traceable artifact তৈরি করা। কিন্তু green unit tests data migration নিরাপদ, production secret সঠিক বা rollback কার্যকর—সবকিছু একসঙ্গে প্রমাণ করে না।
সহজ করে বুঝি
Continuous Integration ছোট পরিবর্তন merge করার সময় build ও tests চালায়। Continuous Delivery verified artifact release করার উপযোগী রাখে; Continuous Deployment policy পেরোলেই automatic production release করে। Pipeline source commit থেকে dependency installation, static checks, tests, artifact build এবং staged rollout পর্যন্ত যায়। একই artifact promote করলে environment অনুযায়ী source পুনরায় build-এর অনিশ্চয়তা কমে। Secrets runtime-এ দিন।
পরিচিত একটি উপমা
কারখানায় প্রতিটি batch-এর inspection, serial number এবং delivery slip থাকে। একই পণ্য customer-এ পাঠানোর আগে অন্য কারখানায় নতুন recipe দিয়ে বানালে inspection evidence আর প্রযোজ্য থাকে না। Build একবার, promote বহুবার সেই ধারণা।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart LR C[Commit] --> T[PHP tests and checks] T --> B[Immutable build] B --> S[Staging smoke test] S --> P[Production rollout] P --> O[Observe and decide]
Commit থেকে test gate যায়, সফল হলে artifact তৈরি হয়। Staging-এর smoke test বাস্তব boot ও integration configuration পরীক্ষা করে। Production rollout শেষে error, latency এবং business outcome দেখা হয়। Failure মানে pipeline থামতে পারে বা rollback হতে পারে। Artifact identifier logs-এ থাকলে incident-এর সঙ্গে release মেলানো সহজ।
PHP ও Laravel-এ প্রয়োগ
Laravel application-এর tests/Feature/HealthTest.php-তে Pest example। Pest installed, standard /up route enabled ধরে নেওয়া হয়েছে। Pipeline-এ composer install locked dependency, php artisan test এবং staging smoke check থাকবে। এই test database schema বা payment provider-এর integration পরীক্ষা করে না।
test('application can boot its health route', function () {
$this->get('/up')->assertOk();
});
test('guest cannot open account page', function () {
$this->get('/account')->assertRedirect('/login');
});সুবিধা, সীমাবদ্ধতা ও trade-off
Pipeline consistent checks ও audit trail দেয়, তবে flaky test delivery আটকে দিতে পারে। সব check একসঙ্গে expensive হলে quick feedback কমে। Unit, integration এবং smoke test-এর responsibility আলাদা রাখুন। Production credential untrusted pull request runner-এ দেওয়া যায় না। Artifact signing, dependency review ও least-privilege deployment credential supply-chain risk কমাতে সাহায্য করে।
সাধারণ ভুল
- Test environment-এর .env production image-এ bake করা।
- প্রতিটি web replica startup-এ একসঙ্গে migration চালানো।
- Queue worker পুরোনো code চালাচ্ছে তা উপেক্ষা করা।
আরও একটু গভীরে
Backward-compatible migration controlled single step-এ চালান। নতুন code old schema কিংবা old worker new payload দেখতে পারে—এই overlap design করতে হয়। Queue worker graceful restart এবং failed job inspection plan রাখুন। Deployment success কেবল process exit code নয়; readiness, sample user journey এবং rollback decision window যুক্ত করুন। Secrets কখন log-এ print হচ্ছে তা pipeline review-এ দেখুন।
মনে রাখুন
CI/CD পরীক্ষিত, চিহ্নিত artifact পৌঁছায়; migration compatibility ও production observation release-এর অবিচ্ছেদ্য অংশ।
নিজে চেষ্টা করুন
একটি Laravel repository-র pipeline সাত ধাপে আঁকুন। কোন ধাপে read-only credential, কোন ধাপে deployment permission লাগবে লিখুন। Unit test green হলেও database migration fail হলে release কী করবে তার সিদ্ধান্ত দিন।
নিজের বোঝা যাচাই করুন
1. CI ও CD এক?
CI integration যাচাই করে। Delivery release-ready artifact রাখে; deployment সেই artifact environment-এ চালায়। নামের আড়ালে responsibility আলাদা রাখুন।
2. Build একবার কেন?
Staging-এ পরীক্ষিত exact artifact production-এ গেলে rebuild-এর variation কমে। Runtime config আলাদা থাকতে পারে।
3. Smoke test কী দেখে?
অল্প critical path বাস্তবে boot ও respond করছে কি না। এটি পূর্ণ regression বা load test-এর বিকল্প নয়।
4. সব replica migration চালাবে?
একসঙ্গে uncontrolled execution race আনতে পারে। Controlled migration step ও compatible schema transition ব্যবহার করুন।
5. Green pipeline মানেই release সফল?
না। Production traffic ও dependency আলাদা। Post-deploy observation এবং rollback criteria দরকার।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।