سیستم‌های سورس‌کنترل مثل gitlab ،github و bitbucket یکی از ارزشمندترین ابزارهایی هستن که یک برنامه‌نویس باید از اون‌ها استفاده کنه. این ابزارها به اعضای تیم‌ها این امکان رو می‌دن تا بتونن پروژه‌‌هاشون رو مدیریت کنن و در کدنویسی، تست و پیاده‌سازی، به صورت کامل با هم مشارکت داشته باشن. 

توی این پست یاد می‌گیرین که چطوری برنامه‌‌ی موجود در سیستم‌های کنترل ورژن مثل github ،gitlab یا bitbucket رو در سکو قرار بدین، تغییرات اون رو با git هماهنگ کنین و برای آگاهی از تغییرات از webhook استفاده کنین.

مراحل ایجاد برنامه با کد در سکو

برای شروع، کدتون رو روی یکی از پلتفرم‌های سورس کنترل مثل github ،gitlab و ... قرار بدین. در این آموزش از gitlab استفاده شده. 

۱. ساخت ریپازیتوری در Gitlab

اول یک ریپازیتوری در gitlab بسازین و فایل‌های پروژه رو در اون PUSH کنین. توضیحات پروژه‌ی شما در این مکان قرار می‌گیره. 

۲. داکرایز کردن برنامه و ساخت Docker file

داکرایز کردن برنامه یعنی تغییر برنامه به صورتی که توی کانتینر داکر اجرا بشه. حال ببینیم داکر چی هست؟

داکر ابزاریه برای ایجاد، استقرار و اجرای راحت‌تر برنامه‌ با استفاده از کانتینرها. یا می‌تونیم این‌طوری تعریفش کنیم که:

داکر فناوری‌‌‌ای است که به شما اجازه می‌ده image‌های برنامه‌تون رو با تمام قسمت‌های مورد نیازش مانند کتابخانه‌ها و وابستگی‌های دیگه ایجاد کنین.

این ایمیج، از لایه‌های Read-Only تشکیل شده. لایه‌ها روی هم قرار گرفتن و هر لایه، تغییرات لایه‌ی قبلی و دستورالعمل‌های موجود در Dockerfile رو مشخص می‌کنه. این ایمیج‌ها با صدا زدن Dockerfile ساخته می‌شن. حالا سوال مهم بعدی اینه که Dockerfile چی هست؟

Dockerfile یک فایل متنیه که توی اون با یک سینتکس ساده و قابل فهم دستورالعمل‌های ساخت ایمیج قرار داده شده. برای اطلاعات بیشتر در مورد Dockerfile می‌تونین به این صفحه  یه سری بزنین.


حالا برای این‌که سکو بتونه ایمیج برنامه‌ی شما رو بسازه و اون رو اجرا کنه، باید یک فایل به اسم Dockerfile ایجاد کنین و اون رو در پروژه‌تون روی gitlab قرار بدین؛ مثلا، به نمونه Dockerfile زیر توجه کنین:

FROM openjdk:8-jdk-alpine
ADD target/sakku-source-example.war target/sakku-source-example.war
EXPOSE 8087
ENTRYPOINT ["java","-jar","target/sakku-source-example.war"]

اجازه بدین این چند خط کد رو بیشتر توضیح بدیم: 

  • FROM openjdk:8-jdk-alpine:

برنامه‌ی شما برای اجرا به JDK نیاز داره. توی این خط از openjdk alpine به عنوان ایمیج‌ پایه استفاده شده و روی اون، JDK 8 کانفیگ یا نصب شده. 

  • ADD target/sakku-source-example.war target/sakku-source-example.war:

این خط فایل WAR ساخته شده توسط Maven برنامه رو که در اینجا اسمش sakku-source-example.war هست، به ایمیج اضافه می‌کنه.

  • EXPOSE 8087:

این خط، پورت 8087 رو باز می‌کنه تا از بیرون کانتینر بتونین به سایت دسترسی داشته باشین.

["ENTRYPOINT ["java","-jar","target/sakku-source-example.war: 

این خط هم مشخص می‌کنه که وقتی کانتینری از این ایمیج ساخته شد، داخلش، فایل WAR اجرا بشه. در واقع دستورات و پارامترهایی که برای اجرای فایل WAR لازم هست رو مشخص می‌کنه.

۳. ساخت برنامه و قرار دادن مشخصات پروژه

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

curl --request POST 'https://api.sakku.cloud/app' \
--header 'Content-Type: application/json' \
--header 'Authorization: Api {token}' \
--data-raw '{
"name": "{app_name}",
"mem": 1,"cpu": 1,"disk": 10,
"ports": [{"port": {app_port},"protocol": "{port_protocol}"}],
"git": {"url": "{gitlab_repo_url]", “username”: “{gitlab_username}”, “accessToken”: “{gitlab_accesstoken}”,"deployType": "CODE",
"minInstance": 1,"maxInstance": 1
}

باید موارد زیر رو جایگذاری کنین:

  • token: برای فراخوانی api‌های سکو شما به یک توکن Api نیاز دارین که دسترسی لازم برای کار مشخصی رو داشته باشه. این توکن رو می‌تونین با استفاده از سرویس دریافت توکن Api پیدا کنین. توضیحات اون رو می‌تونین توی این صفحه ببینین.
  • app_name: نام دلخواهی که برنامه‌ی شما در سکو با اون مشخص می‌شه. توجه کنین که این نام باید یکتا و ترکیبی از حروف و اعداد و شامل حداقل ۵ کاراکتر باشه.
  • app_port: پورتی که برای برنامه‌تون لازم دارین. برای این برنامه پورت 80 انتخاب شده.
  • port_protocol: نوع پورت. نوع پورت می‌تونه HTTP،TCP و UDP باشه. در این مثال، برای این برنامه، پورت HTTP انتخاب شده.
  • gitlab_repo_url: آدرس ریپازتوری پروژه‌ی شما در gitlab.

gitlab_username و gitlab_accesstoken: درصورتی که پروژه‌ی شما از نوع عمومی (public) باشه، نیازی به وارد کردن این دو پارامتر ندارین؛ در غیر این صورت، به جای gitlab_username نام کاربری gitlab و به جای gitlab_accesstoken، توکن دسترسی که از git دریافت کردین رو وارد کنین.

۴. ساخت دیتابیس با استفاده از کاتالوگ‌های سکو

توی سکو مفهومی داریم به اسم کاتالوگ. کاتالوگ، روشی برای لیست کردن، ایجاد و اتصال سرویس‌های مورد نیاز کاربره که درباره‌ی چگونگی ایجاد و مدیریت این سرویس‌ها نیاز به دانش فنی زیادی برای کاربر وجود نداره. ما توی سکو، سرویس‌های مختلف رو دسته‌بندی کردیم و تنظیمات و نیازمندی‌های ثابت اون‌ها رو خودمون از قبل انجام دادیم. 

حالا در صورتی که برنامه‌ی شما به دیتابیس نیاز داشته باشه، می‌تونین با استفاده از کاتالوگ‌های سکو، دیتابیس خودتون رو در کمتر از چند ثانیه ایجاد کنین. توضیحات نحوه‌ی ساخت برنامه با کاتالوگ‌ها رو می‌تونین توی این صفحه ببینین.

بعد ایجاد دیتابیس، اطلاعات و مسیر اون رو در برنامه‌تون وارد کنین؛ مثلا، اگه پروژه‌ی spring boot داشته باشین و یک دیتابیس MySQL رو ایجاد کنین، باید کد زیر رو در فایل application.properties قرار بدین:

jdbc:mysql://mysql.sakku.cloud:3306/sakku_example_db

5. ایجاد ایمیج و بارگذاری برنامه در سکو

حالا با فراخوانی api در صورتی‌که مراحل قبل رو درست انجام داده باشین، برنامه‌ی شما آماده‌ی بارگذاری در سکو می‌شه. سکو ایمیج برنامه‌ی شما رو می‌سازه و اون رو اجرا می‌کنه؛ به این ترتیب، دیگه لازم نیست برای قرار گرفتن برنامه‌تون در سکو، مراحل زیادی رو انجام بدین. 

نکته پایانی

-  ساخت برنامه از طریق پنل سکو هم امکان پذیر و راحته. برای اطلاعات بیشتر می‌تونین به این صفحه یه سری بزنین.

-  اگر برنامه‌ای در سکو از ریپازیتوری gitlab شما ایجاد شده باشه، برای هر تغییر در کد gitlab، باید زمان زیادی رو صرف اجرای تست‌ها، merge کد با branch master و در نهایت اعمال این تغییرات روی سکو کنین. برای این‌که دیگه نخواین این کارها رو به صورت دستی انجام بدین، می‌تونین از مفهوم CI/CD استفاده کنین. 

CI/CD به شما کمک می‌کنه که مراحل توسعه‌ی برنامه‌تون رو خودکار کنین. یعنی خروجی گرفتن از پروژه، اجرای تست‌ها، بارگذاری اون بر روی سرور و ...، قراره به صورت خودکار انجام بشه. یا می‌تونیم این‌طوری بگیم که CI-CD به پروسه‌ای اشاره می‌کنه که به کمک اون، امکانات جدید به صورت خودکار با ریپازیتوری اصلی ادغام می‌شه.

برای آشنایی بیشتر با این مفهوم و هم‌چنین آشنایی با نحوه‌ی اتصال برنامه‌تون به gitlab می‌تونین این لینک رو بررسی کنین. 

-  علاوه بر این، شما می‌تونین برای برنامه‌تون تنظیمات مختلفی انجام بدین؛ مثلا، می‌تونین فایل پشتیبان تهیه کنین، health_check ایجاد کنین یا حتی می‌تونین webhook بسازین. یعنی بعد از این‌که برنامه‌ی خودتون رو در سکو ایجاد کردین، می‌تونین با تنظیم webhook برای اون، از تغییرات مختلف با خبر بشین.

توضیحات مربوط به ایجاد webhook برای برنامه و تنظیمات اون رو هم می‌تونین در این صفحه پیدا کنین.