فهرست مندرجات[پنهان شدن][نمایش]
DevOps یک موضوع برجسته برای افزایش کارایی شرکت در هر صنعتی است.
هر روز، کسب و کارهای بیشتری تلاش می کنند تا از این رویکرد مخرب در عملیات خود استفاده کنند.
هدف اصلی DevOps ادغام مداوم با تحویل مداوم است. در نتیجه، فرآیندهای توسعه و عملیاتی کارآمدتر و سازگارتر با منابع می شوند.
شرکت ها می توانند ضمن تولید نرم افزار با کیفیت بالاتر برای مشتریان یا کاربران داخلی، در پول خود صرفه جویی کنند.
در این مقاله به اصول DevOps، چرخه عمر آن و لیست بهترین ابزارهای DevOps منبع باز برای سال 2022 خواهیم پرداخت.
DevOps چیست؟
DevOps نه محصول است و نه ابزار.
DevOps یک روش و یک استراتژی متوازن سازمانی برای افزایش توسعه و عملیات، همکاری و ارتباطات است.
بازطراحی و یافتن روشهای جدید برای ارائه سریعتر و مطمئنتر محصولات برای رسیدن به بازار سریعتر، مدیریتپذیری بیشتر، کارایی عملیاتی بیشتر و زمان بیشتر برای تمرکز بر اهداف اصلی شرکت.
ابزارهای DevOps همچنین به تیمها اجازه میدهند تا اکثر فعالیتهای توسعه نرمافزار مانند ساخت، حل اختلاف، مدیریت وابستگی، و استقرار، از جمله کاهش نیروی انسانی را خودکار کنند.
با این وجود، DevOps این روزها بیش از یک فرهنگ مشترک و اتوماسیون توسعه نرم افزار است. ترکیبی از فناوری های پیشرفته مانند هوش مصنوعی (AI)، یادگیری ماشین (ML)، اینترنت اشیا (IoT)، و محاسبات ابری.
چرخه عمر DevOps چیست؟
چرخه عمر DevOps از مراحلی تشکیل شده است که شامل توسعه مداوم نرم افزار، ادغام، آزمایش، استقرار و نظارت است.
برای بهره مندی از مزایای کامل تکنیک DevOps، به چرخه عمر DevOps حرفه ای نیاز دارید.
برای تولید، آزمایش، مصرف و تکامل محصولات نرم افزاری، استراتژی DevOps بر نوآوری مداوم، چابکی و مقیاس پذیری تأکید دارد.
فرهنگ آزمایش، بازخورد و یادگیری مادامالعمر را برای بهبود مستمر کالاها، خدمات و فرآیندها تشویق میکند.
با این حال، برای اجرای DevOps، درک کامل مراحل مختلف چرخه عمر DevOps مورد نیاز است.
توسعه دهندگان باید از تمام مراحل چرخه عمر DevOps کاملا آگاه باشند تا نتایج بهتری به دست آورند.
اگر اینطور نباشند، کل فرآیند توسعه می تواند زمان بر و دشوار شود.
اجزای چرخه حیات
1. توسعه مستمر (CD)
برنامه ریزی و کدنویسی نرم افزار هر دو بخش توسعه مستمر هستند.
در اینجا کل فرآیند توسعه به چرخه های توسعه کوچکتر تقسیم می شود. این روش به تیم DevOps اجازه می دهد تا کل فرآیند توسعه نرم افزار را سرعت بخشد.
این مرحله برای ترسیم چشم انداز کل چرخه توسعه و اطمینان از آگاهی کامل توسعه دهندگان از الزامات پروژه حیاتی است.
در نتیجه، تیم شروع به کار می کند تجسم هدف نهایی آن
برنامه ریزی نیازی به استفاده از فناوری های DevOps ندارد. با این حال، سیستم های کنترل نسخه متعددی برای مدیریت کد استفاده می شود.
نگهداری کد منبع اصطلاحی برای این نوع نگهداری کد است.
2. یکپارچه سازی مداوم (CI)
مرحله تست چرخه عمر DevOps در ادامه می آید که در آن کد ایجاد شده از نظر نقص و اشتباهاتی که ممکن است در کد رخنه کرده باشد بررسی می شود.
اینجاست که تجزیه و تحلیل کیفیت (QA) برای اطمینان از قابل استفاده بودن نرم افزار تولید شده مفید است.
فرآیند QA باید با موفقیت تکمیل شود تا مشخص شود آیا نرم افزار با نیازهای مشتری مطابقت دارد یا خیر.
3. استقرار مداوم
استقرار مداوم (CD) تضمین می کند که محصولات به صورت روان و بدون تأثیر بر عملکرد برنامه اجرا می شوند.
در طی این مرحله، بررسی اینکه کد دقیقاً بر روی همه سرورهای قابل دسترسی مستقر شده است بسیار مهم است.
این تکنیک نیاز به انتشار برنامه ریزی شده را از بین می برد و سیستم بازخورد را سرعت می بخشد و به توسعه دهندگان این امکان را می دهد که سریعتر و دقیق تر به نگرانی ها پاسخ دهند.
4. نظارت مستمر
نظارت بر عملکرد یک محصول نرم افزاری برای تعیین کارایی کلی خروجی محصول بسیار مهم است.
در طول این مرحله، اطلاعات مهم در مورد برنامه ساخته شده پردازش می شود.
توسعه دهندگان می توانند روندهای گسترده و مناطق خاکستری را در برنامه پیدا کنند که نیاز به توجه بیشتری از طریق نظارت مداوم دارند.
نظارت مستمر یک مرحله عملیاتی است که هدف آن بهبود کارایی کلی نرم افزار است.
علاوه بر این، عملکرد برنامه را پیگیری می کند. در نتیجه، یکی از مهم ترین مراحل در چرخه عمر DevOps است.
5. بازخورد مستمر
اطلاعات به دست آمده از پایان مشتری به عنوان بازخورد نامیده می شود.
بازخورد مستمر برای تعیین و تجزیه و تحلیل نتیجه نهایی برنامه ضروری است.
این لحن را برای بهبود نسخه فعلی و راه اندازی نسخه جدید در پاسخ به بازخورد سهامداران ایجاد می کند.
تنها با ارزیابی نتایج عملیات نرم افزاری می توان کل فرآیند توسعه اپلیکیشن را بهبود بخشید.
6. عملیات مستمر
سطح نهایی چرخه عمر DevOps ساده ترین سطح برای درک است.
Continuity هسته اصلی تمامی عملیات DevOps است و به توسعه دهندگان این امکان را می دهد تا رویه های انتشار را به صورت خودکار انجام دهند، خطاها را به سرعت تشخیص دهند و نسخه های بهتری از محصولات نرم افزاری ایجاد کنند.
تداوم برای اجتناب از انحرافات و سایر مراحل غیرضروری که مانع رشد می شوند ضروری است.
بهترین ابزارهای DevOps منبع باز در سال 2022
1. رفتن
در عصر توسعه که با پویایی و همکاری مشخص شده است، Git بدون شک بزرگترین و پرکاربردترین فناوری کنترل نسخه است.
کنترل نسخه به توسعه دهندگان راهی می دهد تا همه تغییرات و به روز رسانی های کد خود را پیگیری کنند تا اگر مشکلی پیش آمد، بتوانند به راحتی به نسخه های قبلی کد بازگردند و از آن استفاده کنند و Git به دلایل مختلف بهترین است.
Github، Gitlab و Bitbucket اکنون محبوب ترین سرویس های میزبانی آنلاین Git repo هستند.
این سیستمها به شما امکان میدهند مخازن عمومی و خصوصی را میزبانی کنید، باگها را رصد و بررسی کنید و نسخهها را مدیریت کنید.
مزایا
- با یک رابط ساده، رویههای فشار/کشش سریعتر هستند و توسعهدهندگان میتوانند درخواستهای کشش را بدون تغییر واکشی و بنویسند.
- آنها رایگان و متن باز هستند، به این معنی که ما می توانیم به راحتی کد منبع را دریافت کرده و آن را تغییر دهیم. آنها قادر به انجام کارهای بزرگتر به راحتی هستند.
- Git یک مدل توزیع شده خوب است زیرا هر توسعه دهنده مخزن خصوصی خود را با تاریخچه کاملی از commit ها دریافت می کند که باعث می شود سریعتر از سایر VC ها باشد.
- قابلیت های انشعاب و ادغام ساده (و ارزان) هستند و یکپارچگی داده ها حفظ می شود.
- آنها عملکرد شبکه و استفاده از دیسک را بهبود بخشیده اند و داده های خود را به صورت مجموعه ای از عکس های فوری تصور می کنند.
منفی
- GIT تعداد زیادی شعبه را فرا می خواند تا به توسعه دهندگان اجازه دهد همزمان روی چندین پروژه کار کنند.
- با ویندوز کار نمیکند یا ردی از پوشههای خالی را نگه میدارد.
- درختان فرعی برای پرداخت در GIT در دسترس نیستند. برای هر پروژه، یک سرویس متمرکز باید برای چندین مخزن بسته راه اندازی شود.
- GIT به دانش فنی نیاز دارد و در ویندوز کندتر است.
- آنها مکانیسم های کنترل دسترسی را در صورت نقض امنیتی ارائه نمی دهند.
قیمت گذاری
استفاده از آن برای همه رایگان است.
2. جنکینز
جنکینز یک ابزار DevOps برای ردیابی پیشرفت کارهای تکراری است.
این یکی از بهترین راه حل های استقرار نرم افزار است که با شناسایی فوری مشکلات، ترکیب تغییرات پروژه را آسان تر می کند.
مقیاس اتوماسیون را گسترش می دهد. دارای 400 پلاگین برای کمک به توسعه و آزمایش تقریباً هر پروژه ای است.
Jenkins تعمیر و نگهداری پایینی دارد و دارای رابط کاربری گرافیکی داخلی برای بهروزرسانیهای ساده است.
این یک نرم افزار مبتنی بر جاوا است که روی ویندوز، مک او اس ایکس و یونیکس اجرا می شود. یکپارچه سازی و تحویل مداوم را امکان پذیر می کند.
راه اندازی و پیکربندی با استفاده از رابط وب ساده است.
مزایا
- نیازی نیست که توسعه دهندگان نگران پول باشند زیرا به صورت رایگان ارائه می شود. روی هر پلتفرمی کار می کند.
- این انتقال از CLI به GUI را ساده می کند.
- بسیاری از زبان ها مانند جاوا، پایتون و سایر زبان ها پشتیبانی می شوند.
- جامعه توسعه دهندگان کاملاً از جنکینز حمایت می کنند.
- این به مدیریت پروژه با داده های قابل اعتماد کمک می کند.
- یافتن اشتباهات جنکینز بسیار ساده است. مشکل می تواند به سرعت توسط توسعه دهنده شناسایی و رفع شود.
منفی
- وقتی کارهای زیادی برای اجرا دارید، مدیریت داشبورد جنکینز دشوار می شود.
- روند به روز رسانی برای بسیاری از افزونه ها مشکل ساز است.
- نحو خط لوله اعلامی با همه افزونه ها ناسازگار است.
- شما مسئول حفظ زیرساخت خود به تنهایی هستید.
قیمت گذاری
استفاده از آن برای همه رایگان است.
3. کارگر بارانداز
Docker یک جعبه ابزار DevOps است.
این به تیم های DevOps امکان ایجاد، استقرار و مدیریت برنامه های توزیع شده را می دهد.
کاربران می توانند از این ابزار برای ساخت اپلیکیشن ها خارج از اجزا و همکاری در آنها.
پلتفرم CaaS با ارکستراسیون داخلی راهاندازی شده است. مدیریت تصویر با یک رجیستری خصوصی برای ذخیره، مدیریت و پیکربندی حافظه پنهان تصویر ساده شده است.
نرم افزار کانتینری برای جلوگیری از درگیری و بهبود امنیت. لازم نیست نگران مدیریت وابستگی ها با استفاده از Docker باشید.
میتوانید همه وابستگیها را در کانتینر برنامه قرار دهید و آن را بهعنوان یک واحد مستقل ارسال کنید.
سپس نرم افزار را می توان بر روی هر سیستم یا پلتفرمی بدون هیچ مشکلی اجرا کرد.
مزایا
- اولین مزیت Dockers بازگشت سرمایه است. پاسخ فقط در صورتی بهتر است که بتواند هزینه ها را کاهش دهد و در عین حال سود را افزایش دهد، به ویژه برای سازمان های بزرگ و مستقر که نیاز به تولید درآمد ثابت در دراز مدت دارند.
- داکر با دادن کنترل کامل بر جریان ترافیک و مدیریت، تضمین میکند که برنامههای کاربردی که در کانتینرها کار میکنند کاملاً جدا شده و از نقطه نظر امنیتی جدا هستند.
- این قابلیت را دارد که زمان استقرار را به ثانیه کاهش دهد. به این دلیل است که می تواند یک ظرف برای هر فرآیندی بسازد و حتی یک سیستم عامل را بوت نمی کند.
منفی
- هنگامی که یک کانتینر خراب می شود، به یک برنامه پشتیبان و بازیابی نیاز دارد. در حالی که ما راه حل های متعددی برای این کار داریم، اما هنوز خودکار یا مقیاس پذیر نیستند.
- کانتینرهای Docker سربار کمتری نسبت به رایانه های مجازی دارند، اما سربار آنها صفر نیست. حتی بدون استفاده از کانتینرها یا ماشینهای مجازی، میتوانیم با اجرای برنامهای به طور مستقیم بر روی یک سرور فلزی لخت، به عملکرد واقعی فلزی دست یابیم. از سوی دیگر، ظروف با نرخ فلز لخت کار نمی کنند.
- تعداد زیادی از درخواست های ویژگی در حال حاضر در حال کار هستند، از جمله ثبت نام و بازرسی خود کانتینر، انتقال فایل از میزبان به کانتینر و بسیاری موارد دیگر.
قیمت گذاری
این طرح شخصی برای همه رایگان است. همچنین سه طرح برتر ارائه می دهد که در زیر ذکر شده است:
- مزایا: 5 دلار در ماه (صورتحساب سالانه) یا 7 دلار در ماه (صورتحساب ماهانه).
- تیم: 7 دلار/کاربر/ماه (صورتحساب سالانه) یا 9 دلار/کاربر/ماه (صورتحساب ماهانه).
- تجارت: 21 دلار/کاربر/ماه. برای جزئیات بیشتر باید با واحد فروش تماس بگیرید.
4. غیر ممکن
Red Hat حامی Ansible است، یک ابزار مدیریت پیکربندی منبع باز.
این برای راه اندازی زیرساخت های شرکت شما و همچنین خودکار کردن برخی از فعالیت های استقرار ایده آل است.
به دلیل رابط کاربر پسند و طراحی بدون عامل آن مورد توجه قرار گرفته است.
Ansible یک راه حل DevOps سبک و ایمن برای ایجاد اتوماسیون مدیریت شما است زیرا طراحی بدون عامل دارد، به این معنی که هیچ عامل/شیطان یا ربات خودکاری در پس زمینه کار نمی کند.
همچنین با ماژول های مختلف اصلاح و ادغام برای استفاده با سایر ابزارهای DevOps ارائه می شود. در یک خط لوله معمولی جنکینز، می توانید به سرعت کد Ansible را مستقر کنید.
مزایا
- پایتون برای ایجاد Ansible استفاده شد. این یک زبان برنامه نویسی است که بیشتر برای برنامه نویسی و مدیریت استفاده می شود. کتابخانه پایتونs نیز به طور پیش فرض در اکثر سیستم های لینوکس گنجانده شده است.
- تحسین شده ترین ویژگی Ansible سادگی آن است. با مستندات ساده و سرراست پشتیبانگیری میشود که به توسعهدهندگان اجازه میدهد تا به سرعت گردش کار و منطق Ansible را درک کنند.
- فایلهای پیکربندی Ansible در YAML نوشته شدهاند، که برای مدیریت پیکربندی و اتوماسیون مناسبتر از فرمتهای جایگزین مانند JSON است.
منفی
- Ansible، بر خلاف سایر ابزارهای اتوماسیون، مفهوم حالت ندارد. این به سادگی یک سری کارها را قبل از شکست، تکمیل یا مواجه شدن با مشکل انجام می دهد.
- Ansible از هر دو گره لینوکس/یونیکس و ویندوز پشتیبانی می کند. تلاش های Ansible برای پشتیبانی کامل از ویندوز هنوز در مراحل اولیه است.
- چیزی که به عنوان یک ابزار فقط خط فرمان آغاز شد، با کمک AWX به Ansible Tower، یک رابط مدیریت وب، تبدیل شد. از طرف دیگر Ansible Tower از قابلیت های یک رابط خط فرمان کوتاهی می کند.
قیمت گذاری
استفاده از آن برای همه رایگان است.
5. کوبرنیتس
Kubernetes یک فناوری ارکستراسیون کانتینر است که مدیریت کانتینر را به سطح جدیدی ارتقا می دهد.
دو مهندس گوگل که می خواستند راهی برای مدیریت کانتینرها در مقیاس توسعه دهند، آن را ایجاد کردند.
Kubernetes به خوبی با Docker یا هر یک از معادل های آن کار می کند تا به شما کمک کند کانتینرهای خود را در موجودیت های منطقی سازماندهی کنید.
اگر شما فقط چند کانتینر دارید، ممکن است به پلت فرم ارکستراسیون کانتینر نیاز نداشته باشید.
با این حال، زمانی که به درجه خاصی از پیچیدگی رسیدید و نیاز دارید منابع خود را مقیاس کنید، این مرحله طبیعی بعدی است.
Kubernetes شما را قادر می سازد تا فرآیند مدیریت صدها یا هزاران کانتینر را خودکار کنید.
شما مجبور نیستید برنامه های کانتینری خود را با استفاده از Kubernetes به یک دستگاه متصل کنید.
در عوض، میتوانید در مجموعهای از ماشینها مستقر شوید و Kubernetes از توزیع و زمانبندی کانتینر در کل خوشه مراقبت میکند.
مزایا
- برای مدیریت تصاویر داکر، Kubernetes یک راه حل فوق العاده است. قابلیت های مفید زیادی برای مدیریت کانتینرها فراهم می کند.
- تقریباً هر پلتفرم ابری از آن پشتیبانی می کند. AWS، GCP و Azure سه مورد از محبوبترین پلتفرمهای رایانش ابری هستند.
- یادگیری آن سخت نیست. اگرچه یادگیری و پیاده سازی Kubernetes به روشی دشوار امکان پذیر است، اما لازم نیست.
منفی
- اشکال زدایی و عیب یابی Kubernetes دشوار و زمان بر است.
- جلویی وجود ندارد. بنابراین هر چیزی که سعی در ارائه یک الگوی سلف سرویس دارد باید همین الان ساخته شود.
- در زمینه هایی که همه توسعه ها به صورت محلی انجام می شود، Kubernetes کمی دشوار و اضافی است.
قیمت گذاری
استفاده از آن برای همه رایگان است.
6. سر اشپز
آشپز یکی از موارد مورد علاقه ما است زیرا به شما امکان می دهد سیستم های ابری و معمولی (در محل) را با یک ابزار مدیریت کنید و زمان لازم برای یادگیری فناوری های جدید یا انتقال بین آنها را برای تیم شما کاهش می دهد.
اگر شرکت یا تیم توسعهدهندهتان به مرور زمان از معماری داخلی به معماری ابری منتقل میشوند، Chef ابزاری عالی برای به کارگیری آن است – میتوانید از آن برای سرعت بخشیدن به مهاجرت ابری در سراسر صفحه استفاده کنید.
این شامل یک کیت توسعه کامل برای ساختن سیستمها و برنامههای کاربردی شگفتانگیز، و همچنین ابزارهای آزمایشی برای بررسی کد اتوماسیون زیرساخت شما قبل از استقرار آن در شبکه است.
مزایا
- آشپز شامل قالب های از پیش بسته بندی شده ای است که مدیریت زیرساخت های با پیچیدگی کم تا متوسط را آسان تر می کند.
- پشتیبانی جامعه کافی از طرف تامین کنندگان اصلی و کوچک برای کمک به توسعه الگوها ("دریافت") برای موقعیت های مختلف استقرار وجود دارد.
- Chef از طیف گسترده ای از برنامه ها و زیرساخت ها پشتیبانی می کند و تعداد ابزارهای مورد نیاز برای مدیریت یک سیستم IT را به حداقل می رساند.
منفی
- ممکن است نشانگرهای بیشتری برای نظارت، به ویژه برای برنامه ها، به پنل مدیریت اضافه شود.
- پشتیبانی آشپز برای استقرار ابرهای ترکیبی، به ویژه آنهایی که چندین ابر را در بر می گیرند، ممکن است بهبود یابد. در حال حاضر این کار به صورت دستی انجام می شود.
- الگوهای استقرار بیشتر در مقیاس اینترنت ("دستورات")، با تاکید بر نظارت و ممیزی مطابقت.
قیمت گذاری
استفاده از آن برای همه رایگان است.
7. Nagios
Nagios یکی دیگر از ابزارهای ضروری DevOps است.
این به تیم های DevOps در شناسایی و حل مشکلات شبکه و زیرساخت کمک می کند.
این یک ابزار رایگان منبع باز DevOps است که برای نظارت بر زیرساخت شما استفاده می شود – و آن را به ابزاری مهم برای بخش نظارت از چرخه عمر ذکر شده در بالا تبدیل می کند.
Nagios پیگیری رخدادها و شکستهای متعدد را ساده میکند، به ویژه به این دلیل که شامل گزارشها و نمودارهای مختلفی برای درک تیمها است.
همچنین با تعدادی افزونه به خوبی کار می کند، که بسیاری از آنها به لطف جامعه رو به رشد ابزار به صورت رایگان در دسترس هستند.
مزایا
- هشدارها خیلی سریع ارسال می شوند.
- رابط کاربری گرافیکی (GUI) که استفاده از آن ساده است
- پیکربندی پیچیده نیست.
- تعدادی از پارامترهای رایج را مانیتور می کند.
- رویه های استاندارد استفاده می شود (SNMP).
منفی
- بر خلاف تنظیمات مبتنی بر رابط کاربری گرافیکی، پیکربندی باید در خط فرمان انجام شود.
- در ابتدا، نصب افزونه ها ممکن است چالش برانگیز باشد.
- تشخیص و تصحیح هشدارهای مثبت کاذب دشوار است.
قیمت گذاری
استفاده از آن برای همه رایگان است.
8. کنسول
در نهایت، این ابزار منبع باز DevOps برای برنامه های میکروسرویس، به ویژه برای کشف و راه اندازی سرویس، ایده آل است.
این میتواند دهها یا صدها نام را برای سرویسهای کوچکتر در یک شبکه یا سیستم نرمافزاری بزرگتر ثبت کند، و در صورت نیاز به ثبت نام برای ثبت دهها یا صدها نام برای سرویسهای کوچکتر در یک شبکه یا سیستم نرمافزاری بزرگتر، آن را به ابزاری عالی تبدیل میکند.
در نتیجه، به جای جستجو در عناوین ماشینها، میتوانید به نامهای خدمات جایگزین دسترسی داشته باشید.
همچنین میتوانید خدمات را با هم در خوشهها گروهبندی کنید تا سازماندهی آسانتر شود.
Consul.io جامع ترین راه حل DevOps منبع باز در بازار نیست، اما مزایای منحصر به فردی را ارائه می دهد که باید آن را به یک راه حل پیشنهادی برای طیف گسترده ای از خطوط لوله توسعه و تیم ها تبدیل کند.
مزایا
- ارائه سرویس DNS
- به عنوان یک سرویس سریع، پایدار و قابل اعتماد - به طور پیش فرض یک خوشه از حداقل سه گره مورد نیاز است.
- ذخیرهسازی کلیدی قابل اعتماد
- نصب و پیکربندی ساده است.
- فوق العاده سبک وزن
- رابط کاربری وب که هم نرم و هم بسیار مفید است.
منفی
- گزارشهای خطا – اگر نمیدانید نشانهشان چیست، باید برخی از خطاها را در گوگل جستجو کنید.
- پیکربندی نادرست یک سردرد است زیرا اگر حتی یک اشتباه کوچک مرتکب شوید ممکن است به مشکلات عجیبی منجر شود.
نتیجه
در نهایت، هر یک از این فناوریها ممکن است برای تیم توسعه یا شرکت شما مناسب باشد.
من از صمیم قلب همه آنها را پیشنهاد می کنم، به خصوص به این دلیل که اکثر آنها به خوبی با هم کار می کنند.
هر کدام را امتحان کنید و متوجه خواهید شد که چرخه عمر توسعه شما اکنون سریعتر و کارآمدتر از قبل شده است.
DevOps نه تنها برای سرعت بخشیدن به توسعه نرم افزار، بلکه برای بهبود کیفیت نرم افزار نیز حیاتی است.
DevOps نگرش تازه، تکنیکهای چابک و فناوریهای هوشمند را به روی میز آورده است که همه با هم برای رسیدن به آن هدف کار میکنند.
پاسخ دهید