دپلوی اتوماتیک یا 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