CI/CD با گره اپ
استقرار خودکار از GitHub Actions و GitLab CI، با بیلد روی گره یا ایمیج آماده.
راهنمای گره اپ
گره اپ را میتوان از هر سیستم CI/CD با CLI یا API عمومی مستقر کرد. فقط یک توکن خواندن-نوشتن لازم است که در پنل › SSH و API میسازید و بهعنوان secret با نام GEREH_TOKEN در مخزن ذخیره میکنید.
سه روش استقرار
| روش | مناسب برای | دستور |
|---|---|---|
| بیلد در گره | اپهای Git و ZIP | gereh deploy |
| ایمیج آماده | وقتی CI خودش ایمیج میسازد | gereh deploy --image ghcr.io/acme/api:SHA |
| Webhook | push ساده بدون CI | نشانی Webhook تب «تنظیمات» |
GitHub Actions
بیلد روی گره (ZIP یا Git)
name: deploy
on: { push: { branches: [main] } }
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npx @gereh/cli deploy --app my-shop -m "$GITHUB_SHA"
env: { GEREH_TOKEN: ${{ secrets.GEREH_TOKEN }} }ساخت ایمیج در CI و استقرار آن
اپ را با منبع «ایمیج Docker» بسازید، سپس:
name: release
on: { push: { tags: ["v*"] } }
jobs:
image:
runs-on: ubuntu-latest
permissions: { contents: read, packages: write }
steps:
- uses: actions/checkout@v4
- uses: docker/login-action@v3
with: { registry: ghcr.io, username: ${{ github.actor }}, password: ${{ secrets.GITHUB_TOKEN }} }
- uses: docker/build-push-action@v6
with: { push: true, tags: "ghcr.io/${{ github.repository }}:${{ github.ref_name }}" }
- run: npx @gereh/cli deploy --app my-api --image ghcr.io/${{ github.repository }}:${{ github.ref_name }}
env: { GEREH_TOKEN: ${{ secrets.GEREH_TOKEN }} }ایمیج باید عمومی باشد. CLI ایمیج جدید را روی اپ تنظیم میکند و تا فعال شدن نسخه جدید لاگ استقرار را نشان میدهد؛ اگر health check شکست بخورد، دستور با کد خطا تمام میشود و نسخه قبلی سرویس میدهد.
پیشنمایش برای Pull Request
on: pull_request
jobs:
preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx @gereh/cli deploy --app my-shop --preview --branch "$GITHUB_HEAD_REF"
env: { GEREH_TOKEN: ${{ secrets.GEREH_TOKEN }} }GitLab CI
متغیر GEREH_TOKEN را در Settings › CI/CD › Variables با گزینه Masked بگذارید.
stages: [deploy]
deploy:
stage: deploy
image: node:22-alpine
rules: [{ if: '$CI_COMMIT_BRANCH == "main"' }]
script:
- npx @gereh/cli deploy --app my-shop -m "$CI_COMMIT_SHORT_SHA"با رجیستری GitLab:
stages: [build, deploy]
build:
stage: build
image: docker:27
services: [docker:27-dind]
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
deploy:
stage: deploy
image: node:22-alpine
script:
- npx @gereh/cli deploy --app my-api --image "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"رجیستری پروژه باید عمومی باشد (Settings › General › Visibility › Container registry).
نکتهها
--no-cacheبیلد را بدون کش لایهها انجام میدهد (وقتی وابستگیها عوض شدهاند ولی lockfile نه).--detachمنتظر پایان استقرار نمیماند.- برای چند حساب (مثلاً staging و production) از پروفایل استفاده کنید:
gereh --profile staging deploy. - متغیرهای محیطی را از فایل وارد کنید:
gereh env import .env.production --secret. - برای اجرای migration پس از استقرار، «دستور انتشار» را در
gereh.jsonبنویسید تا پیش از ترافیک گرفتن نسخه جدید اجرا شود.