سلام توی این مطلب بصورت خلاصه توضیح میدم چجوری میتونید با بیتباکت دپلوی اتوماتیک داشته باشید
اگه برنامه نویسی میکنید حتما با گیت آشنایی دارید و حداقل چند تا ریپازیتوری گیت روی اینترنت دارید و چندتاشون هم دپلوی کردید روی یک سروری جایی.
بعد از تغییرات یا اضافه کردن فیچر توی پروژه مجبوریم که دوباره پروژه روی سرور رو آپدیت کنیم و دوباره بیلد بگیریم یا دپلوی کنیم که بسته به نوع پروژهتون مراحلش فرق داره ولی هر بار یک سری مراحل تکراری رو باید انجام بدین
مثلا یک سناریو ساده برای دپلوی پروژه بکاند/فرانت جاوا اسکریپتی
که هربار لازمه این همه کار تکراری رو انجام بدید.
چون همه این مراحل، توی همه دپلوی ها ثابت هستند میتونیم یک اسکریپت بنویسیم تا توی وقت صرفهجویی کنیم.
ولی بازم مشکل بصورت کلی حل نشده! بازم برای اجرای دوباره این اسکریپت باید به سرور ssh بزنیم و دستی اسکریپت رو اجرا کنیم.
تغییرات توی گیت ثبت میشن پس باید ریپازیتوری گیت مون این رخداد(وقتی توی ریپوزیتوی کامیت جدیدی push شد) رو یک جوری به ما بگه
با روش های زیادی میتونید برای این رخداد ، فرایندی تعریف کنید ولی بستگی به این داره که مخزن گیتتون کجا باشه؟
بیت باکت، یک سرویس رایگان مثل گیتهاب برای نگهداری و مدیریت مخازن گیت با کلی امکانات دیگه.
یکی از این امکانات بحث CI/CD که میشه Continues Integration , Continues Deployment که میتونید درموردش بیشتر جستجو و مطالعه کنید.
ما به پروژه مون توی بیتباکت یک پایپلاین اضافه میکنیم، که با هر پوش رو یک یا چند شاخه خاص یک سری فرایند انجام بده،
فرایندی که اینجا مد نظره:
مرحله اول کار: ساخت اسکریپت دپلوی روی سرور
یک مثال ساده برای دپلوی کد فرانتاند vue.js
روی سرور، توی مسیر home یک فایل به اسم deployFrontEnd.sh میسازیم.
echo "changing directory" cd /home/user/apps/xyz/xyz-frontend/ echo "git pull" git pull echo "yarn install" yarn echo "yarn build" yarn build
فایل رو ذخیره و با دستور chmod +x deployFrontEnd.sh فایل اسکریپت رو قابل اجرا میکنیم.
برای تست میتونیم اسکریپت رو اجرا کنید که آیا درست کار میکنه یا نه
برای اینکه بیتباکت بتونه بدون پسوورد به سرور شما لاگین بشه، باید کلید 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 "Initializing new SSH agent..." # 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 "${SSH_ENV}" ]; 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 رو چک کنید.
و تمام، دپلوی های خوبی داشته باشید :)
منبع: