بهمن عاشقی
بهمن عاشقی
خواندن ۴ دقیقه·۴ سال پیش

دپلوی اتوماتیک یا Continues Deployment با بیت‌باکت

سلام توی این مطلب بصورت خلاصه توضیح میدم چجوری میتونید با بیت‌باکت دپلوی اتوماتیک داشته باشید


اگه برنامه نویسی می‌کنید حتما با گیت آشنایی دارید و حداقل چند تا ریپازیتوری گیت روی اینترنت دارید و چندتاشون هم دپلوی کردید روی یک سروری جایی.

مشکل:‌کار تکراری برای هر دپلوی

بعد از تغییرات یا اضافه کردن فیچر توی پروژه مجبوریم که دوباره پروژه روی سرور رو آپدیت کنیم و دوباره بیلد بگیریم یا دپلوی کنیم که بسته به نوع پروژه‌تون مراحلش فرق داره ولی هر بار یک سری مراحل تکراری رو باید انجام بدین

مثلا یک سناریو ساده برای دپلوی پروژه بک‌اند/فرانت جاوا اسکریپتی

  • اول ssh بزنید به سرور
  • رفتن به مسیر پروژه
  • گرفتن آخرین تغییرات کد git pull
  • نصب دوباره dependency ها
  • بیلد دوباره پروژه
  • ریستارت کردن سرویس مربوطه

که هربار لازمه این همه کار تکراری رو انجام بدید.

خب راه حل چیه؟

چون همه این مراحل، توی همه دپلوی ها ثابت هستند میتونیم یک اسکریپت بنویسیم تا توی وقت صرفه‌جویی کنیم.

ولی بازم مشکل بصورت کلی حل نشده! بازم برای اجرای دوباره این اسکریپت باید به سرور ssh بزنیم و دستی اسکریپت رو اجرا کنیم.

راه حل : یک مکانیزم برای اجرا اسکریپت بعد از هر تغییر توی کد

تغییرات توی گیت ثبت میشن پس باید ریپازیتوری گیت مون این رخداد(وقتی توی ریپوزیتوی کامیت جدیدی push شد) رو یک جوری به ما بگه

با روش های زیادی میتونید برای این رخداد ، فرایندی تعریف کنید ولی بستگی به این داره که مخزن گیت‌تون کجا باشه؟

روش استفاده از بیت‌باکت

بیت باکت، یک سرویس رایگان مثل گیت‌هاب برای نگهداری و مدیریت مخازن گیت با کلی امکانات دیگه.

یکی از این امکانات بحث CI/CD که میشه Continues Integration , Continues Deployment که میتونید درموردش بیشتر جستجو و مطالعه کنید.

ما به پروژه مون توی بیت‌باکت یک پایپ‌لاین اضافه می‌کنیم، که با هر پوش رو یک یا چند شاخه خاص یک سری فرایند انجام بده،

فرایندی که اینجا مد نظره:

بیت‌باکت از طریق ssh لاگین بشه به سرور و اسکریپت دپلوی رو اجرا کنه

مرحله اول کار: ساخت اسکریپت دپلوی روی سرور

یک مثال ساده برای دپلوی کد فرانت‌اند vue.js
روی سرور، توی مسیر home یک فایل به اسم deployFrontEnd.sh می‌سازیم.


echo &quotchanging directory&quot cd /home/user/apps/xyz/xyz-frontend/ echo &quotgit pull&quot git pull echo &quotyarn install&quot yarn echo &quotyarn build&quot yarn build

فایل رو ذخیره و با دستور chmod +x deployFrontEnd.sh فایل اسکریپت رو قابل اجرا می‌کنیم.

برای تست میتونیم اسکریپت رو اجرا کنید که آیا درست کار میکنه یا نه

مرحله دوم:اضافه کردن کلید ssh بیت‌باکت به سرورتون

برای اینکه بیت‌باکت بتونه بدون پسوورد به سرور شما لاگین بشه، باید کلید ssh تنظیم کنید.

توی پنل تون، پروژه رو انتخاب کنید و توی منوی سمت چپ pipeLine رو انتخاب کنید و یک پایپ لاین الکی بسازید تا فعال بشه برای پروژه تون.

بعد از فعال شدن پایپ‌لاین باید به تنظیمات ریپازیتوری برید و زیر قسمت پایپ‌لاین گزینه ssh keys رو انتخاب کنید.

بعد از تولید ssh key مقدار کلید rsa رو کپی کنید.

برمی‌گردیم به سرور و توی فایل

/home/user/.ssh/known_hosts

و توی یک خط جدید ssh key رو اضافه می‌کنیم

کد زیر رو به انتهای فایل .bashrc اضافه کنید

# SSH Permanent passphrase SSH_ENV=$HOME/.ssh/environment # start the ssh-agent function start_agent { echo &quotInitializing new SSH agent...&quot # spawn ssh-agent /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} echo succeeded chmod 600 ${SSH_ENV} . ${SSH_ENV} > /dev/null /usr/bin/ssh-add } if [ -f &quot${SSH_ENV}&quot ]; then . ${SSH_ENV} > /dev/null ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi

با دستور زیر هم ssh agent رو بیارید بالا

. ./bashrc

بعد از هربار لاگین به سرور هم تیکه کد بالا اجرا میشه.

مرحله سوم: پایپ‌لاین بیت‌باکت

توی پروژه تون فایل bitbucket-pipelines.yml رو edit کنید بصورت زیر

image: alpine:latest pipelines: branches: master: - step: name: Deploy to production deployment: production script: - pipe: atlassian/ssh-run:0.2.2 variables: SSH_USER: 'user' SERVER: 'ip' COMMAND: 'nohup ./deployFrontEnd.sh & sleep 1'

بیت‌باکت برای اجرای پایپ‌لاین‌های از داکر استفاده میکنه

توی خط اول ایمیج محیط اجرایی رو مشخص شده که میتونه هر ایمیج داکری باشه

ما فقط یک پایپ‌لاین داریم روی برنچ مستر ، میتونید برای شاخه های staging یا dev هم step دیگه ای تعریف کنید.

نام یوزر روی سرور میشه SSH_USER و آی پی سرور هم میشه SERVER
اسم فایل اسکریپت رو هم آپدیت کنید بسته به اون چیزی که توی سرورتون ساختید.

اینجا من از nohup , sleep 1 استفاده کردم تا اسکریپت توی بکگراند اجرا بشه. چرا؟

چون توی پلن رایگان بیت‌باکت یک زمان محدودی میتونید از pipeLine استفاده کنید که حدود ۵۰ دقیقه در ماه

با این روش زمان رو به حداقل می‌رسونیم تقریبا با هر دپلوی حدود ۱۳ ثانیه از اون ۵۰ دقیقه کم میشه.

فایل رو آپدیت ، کامیت و پوش کنید.

بعد از پوش پایپ‌لاین تون اجرا میشه و میتونید توی پنل بیت‌باکت لیست پایپ‌لاین های اجرا شده با جزییات شون رو مشاهده کنید.

برای دیدن خروجی اسکرپیت اجرا شده از سمت بیت باکت هم می‌تونید فایل nohup.out رو چک کنید.


و تمام، دپلوی های خوبی داشته باشید :)


منبع:

https://medium.com/@nicholaskimuli/continuous-deployment-cd-using-bitbucket-pipelines-and-ubuntu-server-9b685bb64bb5
برنامه نویسیآموزشآموزش برنامه نویسیگیت
برنامه‌نویس
شاید از این پست‌ها خوشتان بیاید