کالبدشکافی خط لوله
یک خط لولهی خوب کسلکننده است. هیچ مرحلهای نباید شما را غافلگیر کند و هیچ مرحلهای نباید بیش از آنچه از نامش برمیآید انجام دهد.
چهار مرحله
خط لولهی پیشفرض ما چهار مرحله دارد: verify، build، stage و promote. سه مرحلهی نخست روی هر Merge Request اجرا میشوند؛ مرحلهی چهارم فقط روی شاخهی اصلی.
stages: [verify, build, stage, promote]
verify:
stage: verify
script:
- npm ci
- npm run lint
- npm test -- --coverage
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
build:
stage: build
script:
- docker build -t $IMAGE:$CI_COMMIT_SHA .
- trivy image --exit-code 1 --severity HIGH,CRITICAL $IMAGE:$CI_COMMIT_SHA
- cosign sign --yes $IMAGE:$CI_COMMIT_SHAتوجه کنید که trivy با --exit-code 1 اجرا میشود. اسکنی که نتیجهاش خط لوله را متوقف نمیکند، فقط یک گزارش تزئینی است.
چرا Digest و نه Tag
پس از ساخت، ایمیج با Digest ارجاع داده میشود، نه با Tag. Tag قابل جابهجایی است؛ Digest نیست. این تفاوت، تفاوت میان «میدانم چه چیزی در حال اجراست» و «حدس میزنم» است.
زمانبندی واقعی
اعداد زیر میانگین سی روز گذشته روی سرویسهای تحت مدیریت ماست:
| مرحله | میانه | صدک ۹۵ |
|---|---|---|
| verify | ۲ دقیقه | ۴ دقیقه |
| build | ۳ دقیقه | ۷ دقیقه |
| stage | ۱ دقیقه | ۲ دقیقه |
| promote | ۴ دقیقه | ۹ دقیقه |
اگر مرحلهی
verifyبیش از پنج دقیقه طول بکشد، توسعهدهندگان منتظر نمیمانند — کار دیگری را شروع میکنند و زمینه را از دست میدهند. سرعت خط لوله یک ویژگی محصول است، نه یک شاخص عملیاتی.
انتشار تدریجی
مرحلهی promote ترافیک را در چهار گام جابهجا میکند: پنج، بیستوپنج، پنجاه و صد درصد. میان هر گام، بودجهی خطا بررسی میشود و در صورت نقض، بازگشت خودکار انجام میگیرد.
mizban rollout status payments --watch
mizban rollout undo payments --to-revision 41