اطلاعیه شماره 26 : به اطلاع کلیه کاربران وبسایت پایتونی ها می رساند به علت تداخلات شدید و محدودیت ها موجود در اینترنت کشور سرور های پایتونی ها با اختلال رو به رو شده که همکاران واحد فنی در حال بررسی موضوع هستند تا هرچه سریعتر مشکل را مرتفع کنند، لطفا صبور باشید.

021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

آموزش CI/CD Pipeline Tools و AWS CodePipeline

Pipeline CI/CD چیست؟

CI/CD مخفف continuous integration/continuous deployment یکپارچه سازی مداوم/ استقرار مداوم است و به ایجاد Pipeline کدی اشاره دارد که در آن تغییرات کد متعهد، آزمایش و سپس بدون هیچ گونه تداخل دستی مستقر می شوند. اساساً، یک توسعه‌دهنده می‌تواند ویژگی جدیدی را به پایگاه کد خود اضافه کند و به‌روزرسانی‌ها را در یک فرآیند کارآمد و کارآمد انجام دهد.

 

چرا CI/CD مهم است؟

فرض کنید یک برنامه وب Django را در دستگاه محلی خود ایجاد کرده اید که آن را روی یک AWS Elastic Beanstalk نصب می کنید. اگر قبلا خودتان این کار را انجام داده اید یا این آموزش را دنبال کرده اید، احتمالاً می دانید که این یک روند کاملاً ساده است. هنگامی که AWS CLI راه اندازی شد و برنامه شما به پایان رسید، eb init را اجرا می کنید سپس eb deploy را برای راه اندازی اجرا می کنید. در صورت نیاز به ایجاد هر گونه تغییر، فایل های لازم را ویرایش کرده و مجددا eb deploy را اجرا کنید. با این حال، اگر برنامه شما در طول روز کاربران را جذب می کند، یک تغییر کد جدید ممکن است باعث ایجاد باگ شود و کاربران ممکن است خطای 404 یا 500 دریافت کنند. برای کاهش این مشکل، توسعه دهندگان یک خط لوله CI/CD راه اندازی می کنند که در آن هرگونه تغییر کد قبل از اضافه شدن خودکار به محیط تولید آزمایش می شود. این همچنین به توسعه دهندگان در استارت آپ های بزرگتر اجازه می دهد تا صدها تغییر را در روز بدون نیاز به بررسی دستی موارد مشابه ارسال کنند. خط لوله CI/CD به شما این امکان را می دهد که کد را سریعتر و مؤثرتر ارسال کنید – فرآیندی بسیار مهم برای مقیاس پذیری.

 

چه کسی از CI/CD استفاده می کند؟

هر شرکت نرم‌افزاری یا راه‌اندازی احتمالاً قبلاً یک خط لوله CI/CD راه‌اندازی کرده است. در واقع، هر موقعیت نرم افزاری جدید معمولاً نیازمند یک توسعه دهنده آینده نگر است تا نحوه استفاده از خط لوله کد را درک کند. فقط هر برگه “شغلی” را برای یک شرکت نرم افزاری خاص بررسی کنید و ببینید که آنها چه ابزارهای خط لوله را برای دانستن توصیه می کنند. ممکن است یکی از ابزارهای فهرست شده در زیر را مشاهده کنید.

 

برخی از ابزارهای متداول CI/CD چیست؟

  • رفیق
  • تراویس CI/CD
  • جنکینز
  • CircleCI
  • گیتلب
  • کدنویسی
  • AWS Codepipeline

 

با وجود همه ابزارهای مختلف، هر کدام تقریباً مشابه هستند. همه آنها شامل فشار دادن کد با استفاده از git به یک مخزن است که به یک ابزار CI/CD داده شده متصل است. سپس تغییرات مورد آزمایش قرار می گیرند و بدون نیاز به انجام هیچ کار اضافی مستقر می شوند. البته هر کدام ویژگی‌های منحصربه‌فردی دارند، اما از آنجایی که می‌خواهیم روی ElasticBeanstalk مستقر شویم و  دیگر موضوعات AWS را در اینجا پوشش داده‌ایم  ، به AWS Codepipeline پایبند هستیم . . هنگام انتخاب یک ابزار CI/CD ممکن است عواملی مانند قیمت، سهولت اجرا و حتی محبوبیت را در نظر بگیرید، زیرا توسعه دهندگان دیگر احتمالاً با نرم افزار آشنا هستند.

 

آموزش CI/CD – AWS Codepipeline

نگران نباشید، استقرار خط لوله کد خود نباید آنقدرها دشوار باشد. می توان آن را به مراحل زیر تقسیم کرد: یک خط لوله ایجاد کنید، مشخص کنید کد منبع پروژه شما در کجا میزبانی می شود (به احتمال زیاد Github)، یک مرحله ساخت اضافه کنید تا آزمایش ها را در یک محیط ایزوله اجرا کنید، سپس جایی را که قرار است در آن مستقر کنید را انتخاب کنید. کد امیدواریم این کار را کمی ساده‌تر کنیم، ابتدا مراحل استقرار در ElasticBeanstalk را طی می‌کنیم. به این ترتیب از همان ابتدا می‌دانید که در کجا قرار است مستقر شویم.

1. برنامه جنگو خود را راه اندازی کنید و روی AWS ElasticBeanstalk مستقر کنید

اگر هرگز یک برنامه وب جنگو را در ElasticBeanstalk مستقر نکرده اید، در اینجا یک تفکیک مختصر آورده شده است. برای دستورالعمل‌های دقیق، شروع سریع جنگو و استقرار یک برنامه وب جنگو در AWS ElasticBeanstalk را بررسی کنید.

  • از خط فرمان/ترمینال، یک محیط مجازی ایجاد کنید:  python3 -m venv env(Mac)      py -m venv env(ویندوز)
  • فعال کردن محیط مجازی:  source bin/activate(Mac)    Scripts\activate(ویندوز)
  • سی دی وارد محیط مجازی شده و جنگو را نصب کنید: pip install Django
  • ایجاد یک پروژه جنگو جدید با: django-admin startproject mysite
  • سی دی را وارد mysite کنید و سرور را اجرا کنید: python3 manage.py runserver(Mac)      py manage.py runserver(ویندوز)

هنگام بازدید از http://127.0.0.1:8000 ، باید صفحه زیر را ببینید .

  • سپس، در فهرست پروژه mysite، وابستگی های خود را در یک فایل requierements.txt ذخیره کنید:  pip freeze > requirements.txt
  • سپس یک پوشه ebextensions ایجاد کنید:mkdir .ebextensions
  • در پوشه ebextensions فایلی به نام django.config با محتویات زیر ایجاد کنید:
option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: mysite/wsgi.py

 

  • عالی است، دو مرحله باقی مانده است، ایجاد یک مخزن git برای یک پروژه ما و استقرار در Elasticbeanstalk یا از طریق رابط خط فرمان AWS در مقاله لینک شده در بالا یا با آپلود پروژه فشرده ما در کنسول Elasticbeanstalk . صرف نظر از اینکه شما باید git initبرای مقداردهی اولیه یک مخزن خالی اجرا کنید. می‌توانید از این راهنما برای نصب git استفاده کنید: https://gist.github.com/derhuerst/1b15ff4652a867391f03 . همانطور که انتظار می رفت، برای ادامه به یک حساب Github نیاز دارید.
  • پس از راه اندازی مخزن خود، از github.com دیدن کنید و یک مخزن راه دور جدید ایجاد کنید که به مخزن محلی خود متصل خواهید شد. پس از ایجاد مخزن جدید در Github، با وارد کردن خط زیر در خط فرمان/ترمینال خود، جایی که git init را اجرا کردید، دو مخزن را به هم متصل کنید:  git remote add origin <remote_url>
  • <remote_url> آدرس را از مخزن راه دور تازه ایجاد شده خود جایگزین کنید:

  • سپس فایل های خود را اضافه و commit کنید و سپس به مخزن راه دور فشار دهید. پس از آن باید پروژه خود را در مخزن راه دور ببینید
    • git add .
    • git commit -m "first commit"
    • git push origin
  • بسیار خوب، شما آماده استقرار برنامه وب خود هستید. من قبلاً چند گزینه را در بالا لیست کرده ام تا بتوانید نحوه استقرار را از طریق AWS CLI یا AWS ElasticBeanstalk کنسول انتخاب کنید. به خاطر داشته باشید که اگر بخواهید از طریق AWS CLI استقرار کنید، آخرین commitی که انجام داده اید،  نه فایل های فعلی پروژه شما مستقر می شود. پس از استقرار، مراحل زیر را ادامه دهید.

2. یک Codepipeline ایجاد کنید

حالا بیایید با ادغام CI/CD واقعی شروع کنیم. اگر قبلاً این کار را نکرده‌اید، به حساب AWS خود وارد شوید، سپس به AWS Codepipeline بروید و روی «ایجاد خط لوله» کلیک کنید. خط لوله خود را یک نام بگذارید. “نقش سرویس جدید” را انتخاب کرده و روی “بعدی” کلیک کنید.

 

3. مرحله منبع را اضافه کنید

در حال حاضر ما باید کد منبع پروژه آزمایشی خود را در Github میزبانی کنیم، بنابراین بیایید Github (نسخه 2) را انتخاب کنیم. نسخه 2 احراز هویت را به روشی امن تر مدیریت می کند در حالی که نسخه 1 از نشانه های OAuth استفاده می کند و دیگر طبق اسناد رسمی توصیه نمی شود . “Connect to Github” را انتخاب کنید و با نام گذاری اتصال خود و سپس نصب یک برنامه جدید Github، یک اتصال ایجاد کنید. از شما خواسته می شود مجوزها را تأیید کنید.

 

پس از ایجاد اتصال، در صورت موفقیت آمیز بودن، باید “آماده برای اتصال” را در کادر سبز رنگ مشاهده کنید. مخزن و نام شاخه ای را که می خواهید استفاده کنید انتخاب کنید. سپس به جای کلون کردن کل مخزن، «CodePipeline default» را انتخاب کنید و «Next» را بزنید.

4. افزودن مرحله ساخت

اکنون باید یک محیط ساخت را راه اندازی کنیم. اساساً، می‌توانیم AWS CodeBuild یا Jenkins را برای ساخت پروژه خود بر روی یک سرور جداگانه انتخاب کنیم تا آزمایش‌ها را در یک محیط ایزوله قبل از استقرار اجرا کنیم. در صورت ادامه، AWS CodeBuild را انتخاب کنید و روی کادر “ایجاد پروژه” کلیک کنید. یک پنجره جدید باز خواهد شد. به پروژه ساخت خود یک نام بدهید. برای تصویر محیط، “تصویر مدیریت شده”، برای سیستم عامل آمازون لینوکس 2، برای زمان اجرا استاندارد و برای نسخه تصویر، جدیدترین نسخه را انتخاب می کنیم. بقیه گزینه های پیکربندی را به همین صورت باقی می گذاریم.

پس از اتمام، باید کادر سبز رنگی را مشاهده کنید که نشان دهنده موفقیت ساخت بیلد شماست. متغیرهای محیطی باید اضافه شوند، با این حال، ما معمولاً از python-decouple برای تنظیم متغیرهای env در پروژه خود و اضافه کردن یک فایل .env به مخزن خصوصی استفاده می‌کنیم. بنابراین ما از این مرحله می گذریم. “Single build” را انتخاب کرده و “Next” را بزنید.

 

5. مرحله استقرار و بررسی را اضافه کنید:

(توجه: تصویر بالا با اولین باری که وارد این مرحله می‌شوید کمی متفاوت به نظر می‌رسد. این تصویر پس از راه‌اندازی خط لوله و سپس بازگشت به عقب و ویرایش این مرحله است.) از آنجایی که ما در ابتدا برنامه خود را در Elastic Beanstalk مستقر کردیم. مرحله، ما این گزینه را به عنوان ارائه دهنده استقرار خود انتخاب می کنیم. سپس اپلیکیشن و محیط مناسبی را که قبلا ساخته اید انتخاب کنید. روی «بعدی» کلیک کنید و همه گزینه‌هایی را که پیکربندی کرده‌ایم مرور کنید. این باید ایده بسیار خوبی از کل فرآیند به شما بدهد.

 

6. دوباره با یک BuildSpec مستقر کنید

در اینجا قسمت سرگرم کننده است. ابتدا یک buildspec.yml را به پوشه پروژه mysite اضافه کنید:

version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.7
    commands:
      # Install dependencies needed for running tests
      - echo Installing dependencies
      - pip install -r requirements.txt

  build:
    commands:
      - echo Build started on `date`
      - echo Running tests
      - python3 manage.py test

  post_build:
    commands:
      - echo Build completed on `date`

artifacts:
  files:
    - '**/*'

 

در مرحله بعد، پروژه جنگو خود را با جایگزینی صفحه دیباگ با صفحه اصلی خود تغییر دهید. سپس تغییرات را اضافه، متعهد و فشار دهید. پس از فشار دادن تغییرات خود به شاخه اصلی، خط لوله کد شما شروع می شود! کد خود را در مراحل مختلف مشاهده خواهید کرد. از بازیابی از Github گرفته تا آزمایش در AWS CodeBuild و در نهایت، استقرار در محیط ElasticBeanstalk شما. اگر همه چیز با موفقیت پیش رفت، باید یک چک باکس سبز رنگ در کنار هر مرحله ببینید.

 

در غیر این صورت، در یکی از مراحل با خطا مواجه می شوید و باید با استفاده از گزارش های ارائه شده، اشکال زدایی کنید.

 

 

نتیجه

این خلاصه و آموزش CI/CD را به پایان می رساند. در نظرات به من اطلاع دهید که آیا باید نکات خاصی را گسترش دهم یا در مورد موضوعی کمی گیج شده اید. این آموزش برای یک پروژه جنگو ساده در نظر گرفته شده بود، بنابراین من در مورد نحوه مدیریت پایگاه داده های مختلف صحبت نکردم. به عنوان مثال، اگر از AWS RDS استفاده می کنید، ممکن است موارد زیر را در فایل settings.py خود داشته باشید:

DATABASES = {
     'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST'),
        'PORT': config('DB_PORT'),
        }
    }

 

این در واقع یک مشکل در مرحله AWS CodeBuild ایجاد می کند. محیط ساخت ما مجوز اتصال به پایگاه داده راه دور را ندارد. با این حال، چند راه حل وجود دارد.

  • یک VPC را در مرحله ساخت اضافه کنید تا اجازه دهید محیط ساخت شما به پایگاه داده RDS شما متصل شود.
  • دسترسی ممتاز را به پروژه ساخت خود اضافه کنید تا بتوانید از Docker برای ایجاد پایگاه داده در محیط ساخت استفاده کنید (من برای اتصال به کانتینر Docker با استفاده از localhost به عنوان میزبان مشکل داشتم)
  • (توصیه می شود) با پیروی از این راهنمای رسمی، یک پایگاه داده موقت بر اساس یک عکس فوری از پایگاه داده RDS خود ایجاد کنید: https://aws.amazon.com/blogs/devops/enhancing-automated-database-continuous-integration-with-aws-codebuild -and-amazon-rds-base-snapshot/
  • از sqlite در مرحله ساخت استفاده کنید و در هنگام استقرار به DB تولید بروید.

همچنین من هرگز به آنچه در آن فایل buildspec.yml رخ می دهد دست نزدم. ما دستوراتی را برای اجرا در مراحل خاصی از مرحله ساخت تعیین می کنیم تا وابستگی ها و تست های خود را تنظیم کنیم. اگر می‌خواهید چیزی را آزمایش کنید، py manage.py createapp mainبرای ایجاد یک برنامه برای پروژه خود اجرا کنید. در اینجا چند آزمایش برای بررسی اینکه آیا فایل robots.txt به درستی به سایت شما اضافه شده است آورده شده است. این برای اتصال پروژه جنگو به کنسول جستجوی Google مفید است .

from django.test import TestCase
from http import HTTPStatus

# Create your tests here.

class RobotsTxtTests(TestCase):
    def test_get(self):

        response = self.client.get("/robots.txt")
        self.assertEqual(response.status_code, HTTPStatus.OK)
        self.assertEqual(response["content-type"], "text/plain")
        lines = response.content.decode().splitlines()
        self.assertEqual(lines[0], "User-Agent: *")

    def test_post_disallowed(self):

        response = self.client.post("/robots.txt")
        self.assertEqual(response.status_code, HTTPStatus.METHOD_NOT_ALLOWED)

محمدرضا حسنی

224 مطلب منتشر شده

دانش آموخته رشته فناوری اطلاعات / موسس پایتونی ها

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

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

%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
6
%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3