برنامه نویسی

استقرار پیش نمایش خودکار از GitHub به AWS در 10 دقیقه

استقرار پیش‌نمایش راهی برای چرخاندن محیط‌های موقت از شاخه‌ها یا کشیدن درخواست‌ها است. از آنها برای اجازه دادن به هم تیمی ها و مدیران محصول استفاده می شود تا قبل از ادغام تغییرات، کار شما را به صورت بصری بررسی کنند، بدون اینکه فقط به کد تکیه کنند.

3 راه برای دریافت پیش نمایش استقرار

برای استفاده از استقرار پیش نمایش در گردش کار توسعه خود، 3 راه حل دارید:

  • ارائه دهنده میزبانی شما، استقرارهای پیش نمایش را مرتب کرده است (مانند Heroku / Vercel / Render / Scalingo). راه اندازی آسان است، اما شما قفل فروشنده را دریافت می کنید، و برخی از ارائه دهندگان گران هستند.
  • شما یک SaaS شخص ثالث پیدا می کنید تا خدمات را برای شما ارائه دهد. اگر از فایل‌های تعریف سفارشی استفاده کنند، راه‌اندازی می‌تواند پیچیده باشد، هزینه‌بر است و کد شما اکنون در زیرساخت ارائه‌دهنده دیگر در خطر است.
  • شما راه حلی می سازید یا استفاده می کنید که به شخص ثالث متکی نیست. این می تواند یک اکشن GitHub، خط لوله جنکینز، اسکریپت نیمه خودکار و غیره باشد.

ایجاد یک راه حل سفارشی از نظر توسعه و نگهداری هزینه بر است، بنابراین امروز می خواهم در مورد PullPreview صحبت کنم، یک اکشن GitHub که راه اندازی پیش نمایش را بسیار آسان می کند.

PullPreview

PullPreview یک GitHub Action منبع باز است که دارای ویژگی های زیر است:

  • با هر برنامه ای که می تواند با Docker Compose بوت شود (یعنی همه) کار می کند.
  • را می توان با اعمال یک برچسب روی یک درخواست کشش فعال کرد.
  • کد را مستقیماً از GitHub روی AWS (Lightsail) مستقر می کند.
  • سرورها در حساب AWS خودتان راه اندازی می شوند.
  • دسترسی SSH به سرورها
  • در صورت تمایل می توانید از دامنه سفارشی خود استفاده کنید.
  • محیط ها در سراسر استقرار پایدار هستند.
  • به طور کامل در رابط کاربری GitHub ادغام شده است، نیازی به استفاده از برنامه دیگری نیست.

بیا شروع کنیم

اعتبارنامه AWS را به مخزن خود اضافه کنید

PullPreview برای استقرار سرورها به اعتبارنامه AWS نیاز دارد، بنابراین بیایید یک کاربر جدید ایجاد کنیم.

کاربر جدید AWS برای pullpreview ایجاد کنید

به دلایلی مبهم AWS یک خط‌مشی پیش‌فرض برای Lightsail ارائه نمی‌کند، بنابراین باید یک خط‌مشی جدید با محتوای زیر برای این کاربر ایجاد کنید:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lightsail:*",
            "Resource": "*"
        }
    ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خط مشی جدید IAM را برای کاربر pullpreview ایجاد کنید

سپس خط مشی جدید ایجاد شده را پیوست کنید و کاربر را ایجاد کنید:

خط مشی را پیوست کنید و کاربر ایجاد کنید

مرحله آخر بازیابی یک کلید دسترسی و کلید دسترسی مخفی برای آن کاربر جدید، و اعلام آن کلیدها در تنظیمات مخزن خود در GitHub، به عنوان مخزن جدید است.

اعتبارنامه ها را به عنوان اسرار مخزن اضافه کنید

برچسب، فایل گردش کار و نمونه برنامه Docker Compose

عمل PullPreview فقط برای درخواست‌های کششی که دارای برچسب خاصی هستند فعال می‌شود. به طور پیش فرض نام برچسب است pullpreview، پس بیایید آن را در مخزن GitHub خود ایجاد کنیم. از هر رنگی که دوست دارید استفاده کنید.

برچسب pullpreview را در GitHub ایجاد کنید

حالا یک شاخه جدید ایجاد کنید و فایل های زیر را اضافه کنید:

(1) فایل گردش کار pullpreview:

# .github/workflows/pullpreview.yml
name: PullPreview
on:
  pull_request:
    types: [labeled, unlabeled, synchronize, closed, reopened]

jobs:
  deploy:
    permissions:
      contents: read # to fetch code (actions/checkout)
      deployments: write # to delete deployments
      pull-requests: write # to remove labels
      statuses: write # to create commit status
    name: deploy
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v2
    - uses: pullpreview/action@v5
      # see https://github.com/pullpreview/action/wiki/Inputs
      with:
        admins: your-github-username
        compose_files: docker-compose.pullpreview.yml
        ports: 80,443
        default_port: 443
      env:
        AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}"
        AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}"
        AWS_REGION: "us-east-1"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

(2) نمونه فایل docker-compose با پشتیبانی از SSL:

# docker-compose.pullpreview.yml
services:
  # easily set up SSL termination
  proxy:
    image: caddy:2
    restart: unless-stopped
    command: "caddy reverse-proxy --from '${PULLPREVIEW_URL}' --to web:4567"
    depends_on:
      - web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/data"

  # simple ruby web server for demo purposes, which connects to a postgres DB
  web:
    restart: unless-stopped
    depends_on:
      - db
    build:
      context: .
      dockerfile_inline: |
        FROM ruby:3.2
        RUN gem install sinatra pg puma
        CMD ruby -rsinatra -rpg -rpuma \
          -e'get("https://dev.to/"){ "Hey PullPreview user, here is the postgres version: #{PG.connect(ENV["PGURI"]).exec("SELECT VERSION()").getvalue(0,0)}" }'
        EXPOSE 4567
    environment:
      PGURI: "postgres://postgres:p4ssw0rd@db/postgres"
      APP_ENV: production

  db:
    restart: unless-stopped
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: p4ssw0rd
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بگذارید جادو شروع شود

حالا فایل های قبلی را commit کنید، شاخه جدید خود را فشار دهید و یک درخواست کشش را با آن باز کنید pullpreview برچسب اعمال شد GitHub شروع به اجرای کار PullPreview می کند و چند دقیقه بعد یک محیط پیش نمایش جدید راه اندازی می شود!

روابط عمومی را باز کنید و برچسب اضافه کنید

استقرار محیط زیست

محیط به کار گرفته شده است

دسترسی به محیط موقت

جلوتر رفتن

مراحل بعدی جایگزینی مثال خواهد بود docker-compose.ci.yml با فایل Docker Compose خود فایل کنید و ببینید آیا محیط نیز با موفقیت اجرا می شود یا خیر! ممکن است برای رسیدن به نقطه ای که محیط شما به طور کامل راه اندازی شده است به چند تلاش نیاز داشته باشید، اما به یاد داشته باشید که در صورت نیاز همیشه می توانید SSH را به سرور موقت وارد کنید!

نتیجه

ما فقط سطح کاری را که PullPreview می تواند انجام دهد خراشیده ایم. این واقعیت که به طور کامل در اکوسیستم GitHub و در حساب AWS شما اجرا می شود، امکان استفاده از موارد بسیار متنوعی را فراهم می کند:

  • محدودیت دسترسی از محدوده IP خاص
  • دامنه های سفارشی
  • انواع نمونه های مختلف
  • پشتیبانی از ثبت های docker خصوصی
  • پشتیبانی از چندین فایل نوشتن docker
  • پشتیبانی از چندین محیط پیش نمایش در هر درخواست کشش
  • پشتیبانی از داده های بذر
  • و غیره.

حتما باید به مستندات نگاهی بیندازید.

همچنین توجه داشته باشید که عملکرد PullPreview برای استفاده شخصی رایگان است، اما با مجوز تجاری (300 یورو در سال) برای مشاغل ارائه می شود. این تضمین می کند که عملکرد حفظ می شود و ویژگی های جدید اضافه می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا