7️⃣ خودکارسازی Build و Test با GitHub Actions 🤖
توسعهی مدرن نرمافزار نیازمند pipelineهای خودکار است. شما نمیتوانید به استقرار دستی یا رد کردن تستهای خودکار متکی باشید. 🚫
یک pipeline خوب CI/CD تضمین میکند که هر تغییر در کد بهصورت یکسان build، test و deploy شود. این کار باگها را قبل از رسیدن به production شناسایی میکند و سرعت تحویل شما را افزایش میدهد. ⚡️
بدون pipeline مناسب CI/CD، زمان زیادی صرف کارهای دستی میکنید و ریسک خطای انسانی بهشدت افزایش پیدا میکند. ⏳
برای توسعهدهندگان NET. که از GitHub استفاده میکنند، GitHub Actions انتخاب طبیعی است. این ابزار بهصورت یکپارچه با ریپازیتوری شما کار میکند و هر چیزی که برای build و test اپلیکیشنهای NET. نیاز دارید را فراهم میکند. 🧩
یک فایل به نام github/workflows/ci.yml. در ریپازیتوری خود بسازید:
name: BUILD_AND_TEST
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: [ '10.0.x' ]
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ matrix.dotnet-version }}
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-build --no-restore --verbosity normal
- name: Build Docker image with Aspire
if: ${{ success() }}
run: |
dotnet tool install --global aspire.cli
aspire publish -o docker-compose-artifacts
docker compose -f docker-compose-artifacts/docker-compose.yaml build
این pipeline روی هر push به شاخهی main و روی هر pull request اجرا میشود. وابستگیها را restore میکند، solution را build میکند، تستها را اجرا میکند و با استفاده از Aspire یک Docker image میسازد. 🐳
ءAspire CLI یک فایل Docker Compose تولید میکند که شامل تمام سرویسها و وابستگیهای آنهاست. سپس pipeline ایمیجهای Docker را برای استقرار build میکند. 🏗
بهترین روشها برای CI/CD:
• Keep pipelines fast:
هدف زیر ۱۰ دقیقه برای CI builds باشد. ⏱️
• Run tests on every pull request:
مشکلات را قبل از merge شدن به main شناسایی کنید. 🔍
• Store secrets securely:
از GitHub Secrets برای دادههای حساس مثل API key و connection string استفاده کنید. هرگز secret را در ریپو commit نکنید. 🔐
• Fail fast:
اگر تستها fail شدند، pipeline را فوراً متوقف کنید. برای کد خراب Docker image نسازید. ❌
• Use caching:
پکیجهای NuGet و artifactهای build را cache کنید تا اجراهای بعدی سریعتر شوند. ⚡️
8️⃣ قالب پروژه برای شروع 🚀
راهاندازی یک پروژهی جدید NET. با مراحل بالا سخت نیست. اما چیزهای بسیار بیشتری وجود دارد که باید در پروژه تنظیم شوند، مثل:
• Code Structure: Clean Architecture / Vertical Slices / N-Layered
• Authentication و Authorization
• ASP .NET Core Identity
• JWT Claims و Refresh Token
• Logging
• Result Pattern
• Architecture Tests
• Unit Tests و Integration Tests
• ساختار endpointهای WebApi
• یکپارچهسازی با Jaeger و Seq
جمعبندی 🧠
شروع یک پروژهی جدید NET. با فونداسیون درست، در بلندمدت زمان ذخیره میکند و از ایجاد technical debt جلوگیری میکند.
این روشها خیلی سریع در طول عمر پروژه نتیجه میدهند. بهترین زمان برای تعریف استانداردهای کیفیت، ابتدای پروژه است. پروژهی بعدی NET. خود را با این هفت قدم شروع کنید تا نرمافزار بهتری را سریعتر بسازید. 🚀
امیدوارم این مقاله برایتان مفید بوده باشد👋
🔖هشتگها:
#DotNet #SoftwareEngineering
#OpenTelemetry #Aspire #DeveloperExperience