پیادهسازی CI/CD (ادغام مستمر/تحویل مستمر) با استفاده از GitHub یا GitLab یکی از بهترین روشها برای خودکارسازی فرآیندهای توسعه، تست و استقرار نرمافزار است. در اینجا به طور کامل مراحل راهاندازی CI/CD با GitHub و GitLab را توضیح میدهم.
توسعهدهندگان کد خود را به صورت مکرر در یک مخزن مشترک (مثلاً GitHub یا GitLab) ادغام میکنند.
پس از هر commit، یک pipeline اجرا میشود که شامل مراحلی مانند کامپایل کد، اجرای تستها و بررسی کیفیت کد است.
پس از موفقیتآمیز بودن مراحل CI، کد به صورت خودکار در محیطهای مختلف (تست، استیجینگ، تولید) استقرار مییابد.
یک مخزن (Repository) در GitHub ایجاد کنید.
یک فایل تنظیمات CI/CD با نام .github/workflows/ci-cd.yml
در مخزن خود ایجاد کنید.
مراحل CI/CD را در این فایل تعریف کنید.
name: Node.js CI/CD on: push: branches: - main pull_request: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Build project run: npm run build - name: Deploy to production if: github.ref == 'refs/heads/main' run: echo "Deploying to production..."
on
: مشخص میکند که pipeline در چه شرایطی اجرا شود (مثلاً push به branch اصلی).
jobs
: مراحل مختلف pipeline را تعریف میکند.
steps
: هر مرحله از pipeline را مشخص میکند (مثلاً نصب وابستگیها، اجرای تستها و استقرار).
راهاندازی CI/CD با GitLab CI/CD یکی از قدرتمندترین روشها برای خودکارسازی فرآیندهای توسعه، تست و استقرار نرمافزار است. GitLab بهطور پیشفرض یک سیستم CI/CD یکپارچه ارائه میدهد که به شما امکان میدهد pipelineهای خود را به راحتی تعریف و مدیریت کنید. در اینجا به طور کامل و با جزئیات بیشتر، مراحل راهاندازی CI/CD با GitLab را توضیح میدهم.
ایجاد مخزن (Repository) در GitLab:
اگر قبلاً مخزنی ندارید، یک مخزن جدید در GitLab ایجاد کنید.
کد پروژه خود را به این مخزن push کنید.
تعریف فایل .gitlab-ci.yml
:
این فایل تنظیمات pipelineهای CI/CD را تعریف میکند.
فایل باید در ریشه مخزن شما قرار گیرد.
اجرای خودکار Pipeline:
پس از هر push به مخزن، GitLab به طور خودکار pipeline را اجرا میکند.
.gitlab-ci.yml
فایل .gitlab-ci.yml
از بخشهای مختلفی تشکیل شده است که هر کدام وظیفه خاصی را انجام میدهند. در زیر یک مثال ساده و توضیحات آن آورده شده است:
stages: - test - build - deploy test: stage: test script: - echo "Installing dependencies..." - pip install -r requirements.txt - echo "Running tests..." - pytest build: stage: build script: - echo "Building the project..." - python setup.py build deploy: stage: deploy script: - echo "Deploying to production..." only: - main
stages
:
مراحل مختلف pipeline را تعریف میکند.
در این مثال، سه مرحله داریم: test
، build
و deploy
.
test
:
این job در مرحله test
اجرا میشود.
دستورات script
به ترتیب اجرا میشوند:
نصب وابستگیهای پروژه با pip install
.
اجرای تستها با pytest
.
build
:
این job در مرحله build
اجرا میشود.
پروژه با دستور python setup.py build
ساخته میشود.
deploy
:
این job در مرحله deploy
اجرا میشود.
فقط زمانی اجرا میشود که تغییرات روی branch main
باشند (only: main
).
میتوانید از Docker برای ایجاد محیطهای ایزوله و قابل تکرار استفاده کنید.
مثال:
image: python:3.8 stages: - test test: script: - pip install -r requirements.txt - pytest
برای افزایش سرعت pipeline، میتوانید از cache برای ذخیره وابستگیها استفاده کنید.
مثال:
cache: paths: - .cache/pip test: script: - pip install -r requirements.txt - pytest
میتوانید jobs را به صورت موازی اجرا کنید تا زمان اجرای pipeline کاهش یابد.
مثال:
stages: - test - build test: stage: test script: - echo "Running tests..." build: stage: build script: - echo "Building the project..."
میتوانید محیطهای مختلفی مانند staging
و production
تعریف کنید.
مثال:
deploy_staging: stage: deploy script: - echo "Deploying to staging..." environment: name: staging url: https://staging.example.com deploy_production: stage: deploy script: - echo "Deploying to production..." environment: name: production url: https://example.com only: - main
برای ذخیره اطلاعات حساس (مانند توکنها یا رمزهای عبور) از Variables استفاده کنید.
این متغیرها در تنظیمات پروژه (Settings > CI/CD > Variables
) تعریف میشوند.
مثال:
deploy: script: - echo "Deploying with API key $API_KEY"
پنل CI/CD در GitLab:
پس از هر push، میتوانید وضعیت pipeline را در بخش CI/CD > Pipelines مشاهده کنید.
هر job را میتوانید به صورت جداگانه بررسی و debug کنید.
لاگها (Logs):
برای هر job، لاگهای اجرا شده را میتوانید مشاهده کنید تا در صورت بروز خطا، مشکل را تشخیص دهید.
مستندات رسمی GitLab CI/CD:
آموزشهای ویدئویی:
YouTube (جستجوی “GitLab CI/CD Tutorial”).
دورههای آنلاین:
Udemy، Coursera، Pluralsight.
image: node:14 stages: - install - test - build - deploy cache: paths: - node_modules/ install: stage: install script: - echo "Installing dependencies..." - npm install test: stage: test script: - echo "Running tests..." - npm test build: stage: build script: - echo "Building the project..." - npm run build deploy: stage: deploy script: - echo "Deploying to production..." only: - main
تفاوتهای بین GitHub Actions و GitLab CI/CD از جنبههای مختلفی قابل بررسی است. هر دو ابزار قدرتمند و محبوب برای خودکارسازی فرآیندهای CI/CD هستند، اما ویژگیها، قابلیتها و نحوه عملکرد آنها متفاوت است. در اینجا به طور کامل و با جزئیات بیشتر، تفاوتهای این دو ابزار را توضیح میدهم.
رویکرد مبتنی بر رویداد (Event-Driven):
GitHub Actions بر اساس رویدادهایی مانند push
، pull_request
یا issue
فعال میشود.
شما میتوانید workflowها را برای رویدادهای خاص تعریف کنید.
اجرای Jobs:
هر workflow از چندین job تشکیل شده است که میتوانند به صورت موازی یا متوالی اجرا شوند.
راهاندازی سریع:
GitHub Actions بهطور پیشفرض با مخازن GitHub یکپارچه است و نیاز به تنظیمات اضافی ندارد.
رویکرد مبتنی بر Pipeline:
GitLab CI/CD بر اساس pipelineهایی کار میکند که مراحل مختلفی مانند build
، test
و deploy
دارند.
هر pipeline از چندین stage تشکیل شده است که هر stage میتواند شامل چندین job باشد.
اجرای Jobs:
Jobs در هر stage به صورت موازی اجرا میشوند، اما stages به صورت متوالی اجرا میگردند.
یکپارچهسازی کامل:
GitLab CI/CD بهطور کامل با GitLab یکپارچه است و امکانات پیشرفتهتری مانند محیطهای استقرار (Environments) ارائه میدهد.
Marketplace:
GitHub Actions دارای یک Marketplace است که در آن میتوانید actionهای از پیش ساخته شده را پیدا و استفاده کنید.
این actionها برای کارهای مختلف مانند تست، ساخت، استقرار و … آماده شدهاند.
Self-Hosted Runners:
میتوانید runnerهای خود را (مثلاً روی سرورهای داخلی) راهاندازی کنید تا jobs را اجرا کنند.
Matrices:
امکان اجرای jobs بر روی چندین سیستمعامل، نسخههای مختلف زبانهای برنامهنویسی و … با استفاده از ماتریسها.
Environments:
GitLab از محیطهای استقرار (مانند staging و production) پشتیبانی میکند و میتوانید تنظیمات خاص هر محیط را تعریف کنید.
Auto DevOps:
GitLab دارای قابلیت Auto DevOps است که به طور خودکار pipelineهای CI/CD را برای پروژههای شما ایجاد میکند.
Security Scanning:
GitLab ابزارهای اسکن امنیتی (مانند SAST، DAST) را بهطور یکپارچه ارائه میدهد.
Artifacts و Caching:
GitLab از ذخیرهسازی artifacts و cache بهصورت پیشرفته پشتیبانی میکند.
مخازن عمومی:
برای مخازن عمومی، GitHub Actions رایگان است.
مخازن خصوصی:
برای مخازن خصوصی، GitHub Actions دارای محدودیتهایی در اجرای رایگان است و پس از آن هزینههایی اعمال میشود.
Self-Hosted Runners:
استفاده از runnerهای خود میتواند هزینههای زیرساختی را کاهش دهد.
مخازن عمومی و خصوصی:
GitLab CI/CD برای مخازن عمومی و خصوصی در نسخه رایگان (Free tier) محدودیتهایی دارد.
نسخههای پولی:
GitLab نسخههای پولی (Premium، Ultimate) ارائه میدهد که امکانات پیشرفتهتری مانند امنیت، مدیریت انعطافپذیر و … را در اختیار شما قرار میدهد.
جامعه بزرگ:
GitHub دارای جامعه کاربری بسیار بزرگی است و منابع آموزشی زیادی در دسترس است.
پشتیبانی:
پشتیبانی برای کاربران رایگان محدود است، اما برای کاربران سازمانی پشتیبانی اختصاصی ارائه میشود.
جامعه فعال:
GitLab نیز دارای جامعه کاربری فعال و بزرگی است.
پشتیبانی:
GitLab برای کاربران سازمانی پشتیبانی اختصاصی ارائه میدهد و مستندات بسیار جامعی دارد.
ویژگی | GitHub Actions | GitLab CI/CD |
---|---|---|
یکپارچهسازی | با GitHub یکپارچه است | با GitLab یکپارچه است |
Marketplace | دارد (actionهای از پیش ساخته شده) | ندارد |
Environments | محدود | دارد (پشتیبانی پیشرفته) |
Auto DevOps | ندارد | دارد |
Security Scanning | محدود | دارد (SAST، DAST و …) |
Self-Hosted Runners | دارد | دارد |
قیمتگذاری | رایگان برای مخازن عمومی، محدود برای خصوصی | رایگان برای مخازن عمومی و خصوصی |
جامعه کاربری | بسیار بزرگ | بزرگ |
GitHub Actions:
اگر از GitHub استفاده میکنید و به دنبال یک راهحل ساده و سریع برای CI/CD هستید.
اگر به actionهای از پیش ساخته شده نیاز دارید.
اگر جامعه بزرگ و منابع آموزشی گسترده برای شما مهم است.
GitLab CI/CD:
اگر از GitLab استفاده میکنید و به دنبال یک راهحل یکپارچه و پیشرفته هستید.
اگر به قابلیتهایی مانند محیطهای استقرار، Auto DevOps و اسکن امنیتی نیاز دارید.
اگر به دنبال یک پلتفرم کامل برای مدیریت چرخه حیات نرمافزار (از توسعه تا استقرار) هستید.
میتوانید از Docker برای ایجاد محیطهای ایزوله و قابل تکرار استفاده کنید.
مثال در GitLab CI/CD:
image: python:3.8 stages: - test test: script: - pip install -r requirements.txt - pytest
میتوانید مراحل استقرار را برای محیطهای مختلف (تست، استیجینگ، تولید) تعریف کنید.
مثال در GitHub Actions:
deploy: needs: build runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' steps: - name: Deploy to production run: ./deploy.sh
برای ذخیره اطلاعات حساس (مانند توکنها یا رمزهای عبور) از Secrets استفاده کنید.
در GitHub: Settings > Secrets > New repository secret
.
در GitLab: Settings > CI/CD > Variables
.
دیدگاه بگذارید