حتما شده کد بزنید و پروژه آماده کنید بعد چند روز/ماه منتظر بمونید بهتون سرور بدن و سیستم ادمین محترم کانفیگش کنه، بعد کانفیگم میرسیم سر مسخره بازیای پروژه خودمون که ای باباع فلان چیز چرا آپدیت کردی کد من با ورژن فلان کار میکرد و...
یا تو سناریوی بدتر بعد هر کامیت باید SSH کنی به سرور و PULL بگیری که اپ آپدیت بشه و تازه بعدش میتوجه میشید همکارتون رو برنچ مستر کد زده و تست پاس نشده و هزارتا مشکل دیگه که اگه کار کرده باشید حتما باهاش درگیرید.
تو نوشتههای قبل حواسم نبود ممکنه خواننده مطلب سر رشته زیادی از برنامه نویسی نداشته باشه، سعی کردم همه چی بیشتر توضیح بدم، ممکنه این نوشته طولانی تر بشه.
خبر خوب اینه CI و CD برای همین وجود دارن و خبر بهتر اینه گیت لب این فیچر به رایگان بهمون میده، البته اینجوری مجبورید از استانداردها استفاده کنید و نمیشه چیزی سرهم کرد.
تو دوتا پست قبلی درباره بکاند و فرانتاند نوشتم ولی خیلی توضیح ندادم، سعی میکنم دوتا پست دیگه بنویسم و خوب شرح بدم دقیقا چطور اون ابزارها کنار هم پیاده کردم (البته کار سختی نیست، به نظرم خودتون امتحان کنید و از لینکایی که تو مطلب گذاشتم استفاده کنید، اینجوری تنبل نمیشید و درکنارش خیلی چیزای دیگم یاد میگیرد) ولی اینجا مجبورم تا حدودی درموردشون صحبت کنم.
برای شروع لایه بکاند کاملا از فرانتاند جدا کردم، از اونجایی که دو تخصص جدا هستند دو زبان متفاوت هستند هیچ دلیلی نداشت این کار نکنیم، درضمن تو شرکتها تیم فرانتاند و بکاند داریم پس هرچی این دوتا مستقل عمل کنند سرعت تیم بالا میره و منتظر همدیگه نمیمونند و دیباگ هم بسیار آسونتر میشه.
توجه: این میکروسرویس نیست ولی اگه بعدا بخواید میکروسرویس کار کنید همه چی خیلی سادهتر میشه.
برای آشنایی با میکروسرویس میتونید این مطلب خوب رضا محمدی درباره مایکروسرویس تو کافه بازار بخونید.
برای شروع شما نیاز به آشنایی حداقلی با داکر دارید و خب لینوکسم گفتن نداره، آموزشهای فارسی زیادی برای اینا روی اینترنت وجود داره، برای لینوکس دوره کامل آموزش ویدئویی لینوکس جادی – الپیک ۱ – آزمون ۱۰۱ و ۱۰۲ توصیه میکنم که فوق العاده ساده و کاربردیه، درمورد داکر این بدونید که قبلا از ماشینهای مجازی مثل VMware استفاده میکردیم ولی با داکر لازم نیست کل سیستم عامل دوباره اجرا کرد، مثل ماشین مجازی عمل میکنه ولی از هسته سیستم مادر استفاده میکنه، بنابراین نیاز به رم و پردازنده اضافه نداره و اندازه اپی که توش اجرا میکنید از منابع استفاده میکنه.
خب اول سعی میکنیم تست اتوماتیک رو گیتلب پیاده کنیم: واضحه برای شروع باید گیت بلد باشید، اگر نیستید گوگل کنید کلی آموزش درمورد گیت وجود داره، دلیلی نمیبینم یه دفعه دیگه منم توضیح بدم.
ولی درمورد تست اتوماتیک در گیتلب میتونید یه نگاه به داکیومنتش بندازید، خیلی سادس و سعی میکنم خودمم توضیح کوتاهی درموردش بدم تا خوب متوجه بشید.
برای شروع نیازه تو روت پروژه فایلی با اسم gitlab-ci.yml بسازید، گیتلب درصورت وجود این فایل متوجه میشه باید شروع به تست اپلیکیشن بکنه.
برای مثال نگاهی به فایل پروژه بکاند خودمون میکنیم که با گو نوشته شده بود.
image: golang:1.9
services:
- mysql:latest
variables:
MYSQL_DATABASE: my_db_name
MYSQL_ROOT_PASSWORD: 1234
DB_ADDRESS: mysql
DB_PORT: 3306
DB_NAME: my_db_name
DB_PASSWORD: 1234
DB_USERNAME: root
stages:
- build
- test
before_script:
- curl https://glide.sh/get | sh
- mkdir -p /go/src/gitlab.com/
- cp -r /builds/my_gitlab_username /go/src/gitlab.com/my_gitlab_username
- cd /go/src/gitlab.com/my_gitlab_username/my_repo_name
- cp -r .env.testing .env
- glide install
build-project:
stage: build
script:
- go build
test-project:
stage: test
script:
- go test -v -cover
خب تو خط اول ایمیجی که برای پروژه نیاز داریم مشخص میکنیم، تو این ایمیج گولنگ از قبل نصب و کانفیگ شده.
تو قسمت سرویسها گفتیم به MySQL نیاز داریم
تو قسمت وریبلها چند متغییر تعریف کردیم، دوخط اول برای سرویس MySQL هست، ۵ خط بعدی هم مربوط به سرویس MySQL برای اجرای پروژه هست، پروژه جوری نوشتیم تا بعد هرباز اجرا این متغییرها بخونه و با استفاده از اینها به دیتابیس وصل بشه، چون تو محیط تست و پروداکشن از کانفیگهای متفاوتی استفاده میکنیم.
قسمت بعدی دو استیج تعریف کردیم، یعنی بعد هرکامیت دو دفعه تست میکنه، یک دفعه برای بیلد میگیره اگر درست انجام شد میره سراغ تست.
بیفور اسکریپت وقتی کاربرد داره که چندتا استیج داشته باشید، بعضی دستورها تکراری باشن و قبل اجرای هر استیج نیاز داشته باشید اون دستورها اجرا بشن، برای مثال اگه یادتون باشه برای پکیج منیجر از گلاید استفاده کرده بودم، بنابراین اول از همه باید گلاید نصب کنم، بعد پروژه کپی میکنم تو گوپد خودم، فایل کانفیگ مخصوص تست به سیستم معرفی میکنم (بعدا بیشتر توضیح میدم) و پکیجهارو نصب میکنم.
خب حالا که همه چی آمادس میگیم برای استیج بیلد فقط فرمان go build اجرا کنه، اگه خطایی نداد گیت لب به عنوان تست پاس شده در نظر میگیره.
قسمت بعدی تست پروژه هست، گیت لب ایمیج قبلی که برای بیلد درنظر گرفته بودیم نابود میکنه و دوباره کدهای بیفور اسکریپت اجرا میکنه و میرسه به اسکریپت تست، از فرمان go test -v -cover استفاده میکنیم تا تستها اجرا بشن و مثل دفعه قبل اگر مشکلی پیش نیاد به عنوان تست پاس شده در نظر میگیره.
اگر از زبان دیگری استفاده میکنید نگران نوشتن فایل تست نباشید، با یه سرچ ساده میتونید فایلهای تست مربوط به فریمورک خودتون پیدا کنید و نیاز نیست زیادی وقت بذارید :ی
خب حالا که تست به صورت رایگان و اتوماتیک انجام میشه، بهتر بود جواب تست رو اسلک یا تلگرام برامون ارسال میکرد، مشکلی از این بابت نیست، برای این کار ربات تلگرام گیتلب وجود داره که کانفیگ کردنش خیلی سادهس، همینطور برای اسلک هم قابل دسترسه.
خب بعد اجرای تست لازمه تا کدها برن روی سرور، بیلد و اجرا بشن. میشه این کار به چند شیوه انجام داد، برای مثال ساده ترین راه اینه از سرویسهای کلاد استفاده کنیم، برای مثال ابر کلود (که من تلفظ میکنم کلاد) سرویس کلاد ایرانی هست که مشکل پرداخت دلاری ندارم باهاش، کیفیت کارشون خوبه، فکر نمیکنم رقیبی داشته باشن یا حداقل من نتونستم مشابه اینا پیدا کنم، اگه میشناسید حتما بهم معرفی کنید، ولی سایتهای غیر ایرانی زیادن، از آمازون، گوگل، مایکروسافت و... که بنا بر نیازتون میتونید از هرکدوم استفاده کنید.
راه کم هزینهتر اینه از Rancher یا Portainer استفاده کنید، اپن سورس و رایگان هستند، میتونید از جایی مثل دیجیتالاوشن سرور ۵ دلاری بخرید مثل من ۸ گیگ سواپ اجرا کنید و... هزینهش کمتر از بقیه درمیاد ولی دردسرش بیشتره، همچنین اگه به منابع زیادی نیاز داشتید برید سراغ سرور اختصاصی و...
وقتی از این سرویسها استفاده میکنید باید یه وبهوک تو ریپو مورد نظرتون تعریف کنید تا بعد بعد هرکامیت بصورت اتوماتیک پروژه جدید بیلد و اجرا بشه، اینجوری دان تایم ندارید :) همچنین بیشتر این سرویسهای کلاد قابلیت اتواسکیل دارن، به این صورت که هرچی ترافیک بیشتر بشه خودش سرورها ارتقاع میده و نگرانی بابت ترافیک ندارید، تمام تمرکزتون رو کد نوشتن میذارید.
توضیحی درباره اینکه چطور داکرفایل برای محیط پروداکشن بنویسیم نذاشتم چون مشابه همون گیت لبه، همه سرویسها داکومنت دارن و نمونه برای زبانهای مختلف. یه سرویس انتخاب کنید و داکیومنتش بخونید.
تو قسمت بعدی کدهای بکاند اپن سورس میذارم رو گیت لب تا به صورت عملی ببینید، بتونید کلون کنید و بهترش کنید :)
اگه جایی واضح توضیح ندادم بگید تا اصلاح کنم.