در این پست یک اجرای CI/CD Pipeline به زبان ساده خواهیم داشت.
قبل از ورود به بحث پایپ لاین یا همون خط لوله باید ببینیم CI/CD چیه و چیکار میکنه؟
تعریف CI یا Continuous Integration:
فرآیندی در چرخه توسعه نرم افزار است که تغییرات صورت گرفته در کد توسط توسعه دهندگان مختلف را در خط اصلی(mainline) پروژه ادغام می کند. این خط اصلی معمولا توسط یک منبع(repository) اشتراکی(shared) مدیریت و مورد دسترسی قرار می گیرد. اجرای این فرآیند باعث می شود همیشه یک منبع کد با کمترین انحراف(تفاوت) در دسترس باشد. هر ادغام می تواند توسط اجرای Build و Test مورد بررسی قرار گرفته تا تضمین کند کد ادغام شده قابل اطمینان است. اصولا اجرای تست بخشی از فرآیند CI نیست اما معمولا با آن پیاده سازی می شود.
تعریف CD یا Continuous Deployment/Delivery:
Continuous Deployment: فرآیندی بسیار نزدیک به فرآیند CI است که مراحل اجرای کد درون خط اصلی(mainline) و انتشار خودکار برنامه در محیط تست و تجاری را در صورت قبول شدن تمام تست های خودکار پیاده می کند. با وجود CD انتقال برنامه از محیط توسعه به محیط تست و سپس اجرا در محیط تجاری خیلی سریع انجام می شود.
Continuous Delivery: فرآیندی است که برنامه را برای اجرا در محیطهای مختلف، تست و آماده می کند. در این فرآیند تمام تست های خودکار صورت گرفته، تنظیمات لازم به برنامه Push می شود و برنامه آماده اجرا در محیط های مختلف(Prod, Canary) می شود.
Pipeline در CI/CD چیه؟
خوب در توضیحات بالا گفتم که CI و CD چی هستن و الان وقت اونه که این دو فرآیند به هم متصل بشن. چطوری متصل میشن؟ به کمک پیاده سازی Pipeline. به عبارتی پایپ لاین مجموعه فرآیندی هست که CI رو به CD میچسبونه و برنامه رو از منبع کد تا اجرا در محیط تجاری هدایت میکنه.
چطوری Pipeline پیاده سازی میشه؟
خط لوله با خوندن آخرین کامیت(Commit) روی منبع کد شروع میشه “عکس پست رو ببینید” و به مرحله CI میره و در صورت اوکی بودن به مرحله CD انتقال پیدا میکنه و کارای لازم برای تحویل یا استقرار برنامه صورت میگیره. موضوع CI چیزه جدیدی نیست و به سال 1991 بر میگرده که قطعا تو اون سالها چیزی به اسم Gitlab CI, Travis CI, Jenkins و… وجود نداشته، پس چطور پیاده میشده؟ در پست “تجربه مهاجرت به Docker و سرور جدید” گفتم که برای اجرای فرآیند دوآپس(DevOps) و نیاز به بروزرسانی برنامه ها یک پایپ لاین برای خودم راه اندازی کردم که اینجا معرفیش میکنم و میبینید پیاده سازی پایپ لاین چقدر ساده تر از اون چیزی هست که فکر می کنید.
به پست فرهنگ DevOps و واژه مهندس دوآپس هم ی نگاه بندازی بد نیست.
خوب کد زیر رو کپی کنید:
#!/bin/bash
# Copyright (c) 2020, Saeid Bostandoust
# [email protected]
# https://b9t.uk
# All rights reserved.
PIPELINE_PROJECT_NAME="YOUR-PROJECT-NAME"
if [[ ! -d "./$PIPELINE_PROJECT_NAME" ]]; then
git clone YOUR-GIT-ADDRESS
fi
git -C ./$PIPELINE_PROJECT_NAME pull > /dev/null
touch .lastcommit
PIPELINE_LAST_COMMIT=$(cat .lastcommit)
PIPELINE_REAL_COMMIT=$(git -C ./$PIPELINE_PROJECT_NAME rev-parse --short HEAD 2> /dev/null || echo 0)
if [[ "$PIPELINE_LAST_COMMIT" != "$PIPELINE_REAL_COMMIT" ]]; then
echo $PIPELINE_REAL_COMMIT > .lastcommit
# Write your code here.
fi
کافیه جای YOUR-PROJECT-NAME اسم ریپوزیتوری پروژه تون رو بذارید.
آدرس گیت رو جای YOUR-GIT-ADDRESS بذارید.
در قسمت “Write your code here” کدهای مربوط به CI/CD خودتون رو قرار بدید.
این کد چیکار میکنه؟
برای بار اول پروژه رو clone و مراحل CI/CD تون رو اجرا میکنه و در اجراهای بعدی آخرین تغییرات رو میگیره و اگر کامیت جدیدی صورت گرفته باشه فرآیند CI/CD اجرا میشه. بخش CI/CD نسبت به هر پروژه متفاوته برای همین کد خاصی رو مطرح نکردم. برای اجرای خودکار این کد میتونید از cron استفاده و در یک اینتروال زمانی مشخص اجراش کنید.
کد رو روی گیتهاب ببینید.
به همین سادگی و خوشمزگی CI/CD Pipeline رو ایجاد کردید.
نظرات، ایده ها و کامنت های باحالتون رو بنویسید.
همین الان تو دوره دوآپس شرکت کن.
موفق و پیروز باشید.
39
سلام وقتتون بخیر، من اگه بخوام فراهم سازی cicd رو بصورت عملی ارائه بدم سر کلاس درس، باید چه مطالبی رو بخونم و چه چیزایی رو ارائه بدم؟
سلام روی آپارات من سلام دوآپس رو دنبال کنید.