اکشنهای جدید GitHub برای استقرار سریع و بهینه در App Platform
۲۳ اسفند ۱۴۰۳
مقدمه
ابزار GitHub Actions یکی از محبوبترین پلتفرمهای گیتهاب است که فرایند ساخت، تست و انتشار کد را بهصورت خودکار انجام میدهد. شناخت بیشتر گیتهاب برای توسعهدهندگان موضوع مهمی است که میتواند به بهروزشدن دانستهها و مهارتشان کمک کند. در این مقاله از بلاگ لیارا قصد داریم نسخه بهبودیافته GitHub Actions برای App Platform را معرفی کنیم. این نسخه جدید با بهبود قابلیت افزونهپذیری، تمامی نیازهای استقرار اپلیکیشنها را برطرف کرده و انعطافپذیری بیشتری برای توسعهدهندگان فراهم میآورد.
آنچه در این مقاله میخوانید:
- گیتهاب مناسب همه فرایندها
- استقرار اپلیکیشن از GitHub
- استقرار اپلیکیشن از ایمیج درون GitHub Action
- پیشنمایش Pull Request
- جمع بندی
- سوالات متداول

گیتهاب مناسب همه فرایندها
اکشن جدید استقرار، قلب سیستم GitHub Actions است. این اکشن به شما اجازه میدهد اپلیکیشنهای موجود را بهروزرسانی کنید، اما امکانات بیشتری نیز دارد. با این اکشن، میتوانید مخزن گیتهاب خود را بهعنوان منبع اصلی در سبک GitOps تنظیم کنید. همچنین میتوانید فایل AppSpec
را به مخزن گیتهاب خود اضافه کرده و کل فرآیند استقرار را از طریق GitHub Actions مدیریت کنید.
فایل AppSpec
یک فایل پیکربندی است که برای مدیریت فرآیند استقرار اپلیکیشنها استفاده میشود. این فایل معمولاً در فرآیندهای CI/CD (یکپارچگی و استقرار مداوم) و در پلتفرمهای ابری مانند App Platform به کار میرود. در این فایل، اطلاعاتی مانند نسخههای اپلیکیشن، پیکربندی محیطها و تنظیمات استقرار ذکر میشود.
در حقیقت، فایل AppSpec
به سیستم استقرار GitHub Actions میگوید که چگونه و کجا اپلیکیشن باید استقرار یابد و چه مراحلی باید طی شود. این فایل به شما کمک میکند تا فرآیند استقرار را بهطور خودکار و بدون نیاز به تنظیمات دستی انجام دهید.
استقرار اپلیکیشن از GitHub
برای استقرار یک اپلیکیشن بهطور کامل از طریق GitHub بدون نیاز به ساخت آن بهطور جداگانه، کافی است که فایل App Spec
مربوطه را به مخزن گیتهاب اضافه کنید (اکشن بهطور پیشفرض از .do/app.yaml
استفاده میکند) و یک اکشن مشابه زیر را تنظیم کنید. این کار باعث میشود که هر بار که یک کامیت جدید به شاخه اصلی (main) ارسال میشود، اپلیکیشن مجدداً استقرار یابد (توجه داشته باشید که گزینه deploy_on_push
باید در فایل App Spec غیرفعال باشد). هرگونه تغییر در خود فایل App Spec نیز بهطور خودکار اعمال خواهد شد.
در کد زیر، یک تصویر داکر از مخزن گیتهاب ساخته میشود.
name: Update App
on:
push:
branches: [main]
permissions:
contents: read
jobs:
deploy-app:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Deploy the app
uses: digitalocean/app_action/deploy@v2
with:
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
استقرار اپلیکیشن از ایمیج درون GitHub Action
حالا اگر یک استفاده پیچیدهتر داشته باشید، این اکشن اپلیکیشن را از یک Dockerfile در مخزن گیتهاب میسازد، اما این فرآیند ساخت، بخشی از مراحل ساخت App Platform نیست. یعنی شما در داخل اکشن GitHub خودتان ساخت تصویر داکر را انجام میدهید، نه اینکه این کار توسط App Platform انجام شود.
توجه داشته باشید که image digest بهعنوان یک متغیر محیطی با نام SAMPLE_DIGEST
ارائه شده است. برای استفاده از این متغیر در فایل App Spec، باید از نماد ${SAMPLE_DIGEST}
استفاده کنید.
همانطور که در کد زیر مشاهده میکنید، این GitHub Action برای ساخت، ارسال و استقرار یک تصویر داکر طراحی شده است.
name: Build, Push and Deploy a Docker Image
on:
push:
branches: [main]
permissions:
contents: read
packages: write
jobs:
build-push-deploy-image:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@v3.3.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
id: push
uses: docker/build-push-action@v6.5.0
with:
context: .
push: true
tags: ghcr.io/${{ github.repository }}:latest
- name: Deploy the app
uses: digitalocean/app_action/deploy@v2
env:
SAMPLE_DIGEST: ${{ steps.push.outputs.digest }}
with:
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
در آخر، توجه داشته باشید که image digest بهعنوان متغیر محیطی SAMPLE_DIGEST
ارائه شده است. برای استفاده از آن در فایل App Spec، باید از نماد ${SAMPLE_DIGEST}
به صورت زیر استفاده کنید:
name: sample
services:
- name: sample
image:
registry_type: GHCR
registry: YOUR_ORG
repository: YOUR_REPO
digest: ${SAMPLE_DIGEST}
پیشنمایش Pull Request
در آخر، پیشنمایشهای pull request نمونهای عالی از قدرت خودکارسازی هستند. این ویژگی به شما اجازه میدهد برای هر pull request یک اپلیکیشن جدید راه بیاندازید و لینک اپلیکیشن لاگهای ساخت و استقرار را برای نویسنده pull request نشان دهید. با اینکار از ادغام کدی که ممکن است، اپلیکیشن را خراب کند، جلوگیری خواهد شد.
اکنون با اکشن جدید استقرار، ایجاد چنین یکپارچگیای در مخزن شما بسیار ساده میشود. این اکشن دارای حالت ویژهای به نام PR-preview-mode
است که برای هر pull request یک نام منحصر به فرد برای اپلیکیشن ایجاد میکند، منابعی که ممکن است باعث تداخل شوند را از فایل app spec
حذف میکند (مثل دامنهها و هشدارها)، و تمام ارجاعات به گیتهاب را به شاخه مربوط به PR بهروزرسانی میکند.
در کنار اکشن جدید استقرار، یک اکشن جدید برای حذف اپلیکیشنها هم اضافه شده است که به شما این امکان را میدهد که اپلیکیشنها را مجددا حذف کنید. معمولاً این کار زمانی انجام میشود که یک pull request بسته یا ادغام (merge) میشود تا منابع غیرضروری حذف شوند.

شما با استفاده از این ابزارها، میتوانید اکشنی مانند زیر تصور کنید که برای هر pull request یک اپلیکیشن استقرار میدهد و پس از موفقیتآمیز بودن استقرار، یک کامنت به pull request اضافه میکند و لینک اپلیکیشن را در اختیار شما قرار میدهد. اگر استقرار با مشکل مواجه شود، یک لینک به لاگهای اکشن ارسال میکند. اکشن دوم همچنین تضمین میکند که اپلیکیشن مربوطه زمانی که pull request بسته یا ادغام میشود، حذف گردد.
کدی که در زیر مشاهده میکنید، یک اکشن برای استقرار پیشنمایش اپلیکیشن در App Platform است که پس از ارسال pull request به شاخه main، وضعیت استقرار را به کامنت اضافه میکند.
name: App Platform Preview
on:
pull_request:
branches: [main]
permissions:
contents: read
pull-requests: write
jobs:
test:
name: preview
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Deploy the app
id: deploy
uses: digitalocean/app_action/deploy@v2
with:
deploy_pr_preview: "true"
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
- uses: actions/github-script@v7
env:
BUILD_LOGS: ${{ steps.deploy.outputs.build_logs }}
DEPLOY_LOGS: ${{ steps.deploy.outputs.deploy_logs }}
with:
script: |
const { BUILD_LOGS, DEPLOY_LOGS } = process.env
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `:rocket: :rocket: :rocket: The app was successfully deployed at ${{ fromJson(steps.deploy.outputs.app).live_url }}.`
})
- uses: actions/github-script@v7
if: failure()
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `The app failed to be deployed. Logs can be found [here](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
## Logs
<details>
<summary>Build logs</summary>
\`\`\`
${BUILD_LOGS}
\`\`\`
</details>
<details>
<summary>Deploy logs</summary>
\`\`\`
${DEPLOY_LOGS}
\`\`\`
</details>`
})
در ادامه یک اکشن کد برای پیشنمایش اپلیکیشن در App Platform مشاهده میکنید.
name: Delete Preview
on:
pull_request:
types: [ closed ]
jobs:
closed:
runs-on: ubuntu-latest
steps:
- name: delete preview app
uses: digitalocean/app_action/delete@v2
with:
from_pr_preview: "true"
ignore_not_found: "true"
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
این کد، زمانی که یک pull request بسته میشود، اپلیکیشن پیشنمایش را حذف میکند.
جمع بندی
اکشنهای جدید GitHub برای استقرار در App Platform امکان استقرار سریع و بهینه اپلیکیشنها را فراهم میکنند. با استفاده از این اکشنها، میتوانید بهراحتی اپلیکیشنها را برای هر pull request مستقر کنید، پیشنمایشها را مشاهده کنید و در صورت نیاز، اپلیکیشنهای غیرضروری را حذف کنید. این ابزارها باعث بهبود فرآیند توسعه، تست و مدیریت منابع در App Platform میشوند.
سوالات متداول
1- Github Actions چیست و به چه دردی میخورد؟
Github Actions یک ابزار خودکارسازی است که توسط گیتهاب ارائه شده است. این ابزار بهشما بهت اجازه میدهد فرآیندهای توسعه، تست و دیپلوی کدها را خودکار کنید. با استفاده از فایلهای YAML میتوانید دستورات و وظایف خود را تعریف و بصورت خودکار کنید.
2- استفاده از Github Actions رایگان است؟
استفاده از GitHub Actions برای پروژههای عمومی و کوچک رایگان است، اما برای پروژههای بزرگ محدودیتهایی وجود دارد که میتوانید با توجه به پلنهای آن خریداری کنید.
3- میتوانم Github Actions رو با سرویسها و ابزارهای دیگه ادغام کنم؟
بله، Github Actions قابلیت ادغام با خیلی از سرویسها و ابزارهای خارجی مثل AWS، Azure، Slack و غیره را دارد.
4- میتوانم اکشنهای سفارشی خودم را بسازم؟
بله، این امکان وجود دارد.
5- Github Actions از چه سیستمعاملهایی پشتیبانی میکند؟
Github Actions از سیستمعاملهای مختلف مثل لینوکس، ویندوز و مک پشتیبانی میکند.
6- چطور میتوانم امنیت کدها را با Github Actions بهتر کنم؟
با استفاده از GitHub Actions، میتوانید امنیت کدهای خود را بهبود دهید. از طریق این پلتفرم، امکان اجرای تستهای امنیتی و اسکنهای آسیبپذیری به صورت خودکار فراهم میشود. شما میتوانید اکشنهایی تعریف کنید که بهطور دورهای کدهای شما را برای مشکلات امنیتی بررسی کرده و گزارشهای مربوط به آن را ارائه دهند.