رفتن به محتوای اصلی

CI/CD با گره اپ

استقرار خودکار از GitHub Actions و GitLab CI، با بیلد روی گره یا ایمیج آماده.

راهنمای گره اپ

گره اپ را می‌توان از هر سیستم CI/CD با CLI یا API عمومی مستقر کرد. فقط یک توکن خواندن-نوشتن لازم است که در پنل › SSH و API می‌سازید و به‌عنوان secret با نام GEREH_TOKEN در مخزن ذخیره می‌کنید.

سه روش استقرار

روشمناسب برایدستور
بیلد در گرهاپ‌های Git و ZIPgereh deploy
ایمیج آمادهوقتی CI خودش ایمیج می‌سازدgereh deploy --image ghcr.io/acme/api:SHA
Webhookpush ساده بدون 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 بنویسید تا پیش از ترافیک گرفتن نسخه جدید اجرا شود.