یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی

۲ مطلب با کلمه‌ی کلیدی «build automation» ثبت شده است

۱۰
۱۴۰۴/۰۹

اتوماسیون تولید یا Build automation یا builder گونه نرم‌ افزاری است که به توسعه‌ دهندگان کمک می‌کند تا با اجرای خودکار فرایند تولید، خروجی نهایی پروژه را به سادگی و با کارایی بیشتری تهیه کنند. این ابزار کمکی می‌ تواند به صورت مستقل نصب شود یا بعنوان بخشی از یک IDE در پس‌ زمینه فعال گردد. مثلاً با کلیک روی گزینه‌ی های Build یا Run در ویرایشگرتون این ابزار تمام مراحل لازم برای آماده‌ سازی و اجرای پروژه را بصورت خودکار انجام می‌ دهد.

تاریخچه و تحول Build automation

پیش از وجود ابزارهای Build automation و IDEها، برنامه‌نویسان این مراحل را به صورت دستی انجام می‌ دادند که وقت‌ گیر و پرخطا بود. با گذشت زمان، این مراحل در قالب یک فایل Bash، VBScript یا Batch تعریف شد و تنها با اجرای یک دستور، فرایند اتوماسیون اجرا میشد. اما این روش باز هم مشکلاتی از جمله عدم انتقال‌ پذیری بین سیستم‌ عامل‌ ها و دشواری maintain داشت...

 

Build automation امروزی

امروزه ابزارهای Build automation همه مراحل را با یک "syntax مشترک" در یک فایل تعریف می‌ کنند و تنها با یک دستور، تمامی فرایندها به‌ صورت خودکار و یکپارچه انجام می‌ شوند. این ابزارها قابل انتقال به دیگر سیستم‌ عامل‌ ها بوده و به راحتی قابل استفاده و maintain هستند.

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

 

عملیاتی که در فرایند Build automation می تواند انجام شود

فرایند build معمول شامل مراحل زیر است که می‌توانند با یک کلیک یا یک دستور آغاز شود:

  1. تنظیم فایل‌ های سورس: آماده‌ سازی و مرتب‌ سازی کدها برای ساختن نسخه نهایی.
  2. تنظیم نوع خروجی (debug/release): مشخص‌ کردن حالت نهایی خروجی (برای تست یا انتشار).
  3. تنظیم فایل کانفیگ وب: تنظیمات مربوط به سرور و محیط وب.
  4. بررسی نسخه compiler/interpreter مورد استفاده: اطمینان از استفاده از نسخه‌ صحیح مثلا PHP یا .Net.
  5. به‌روزرسانی کتابخانه‌ ها: دانلود و به‌روزرسانی وابستگی‌های پروژه.
  6. اجرای تست‌ها (Unit Testing): اطمینان از صحت کدها با اجرای تست‌ های واحد.
  7. ساخت پوشه‌ های مورد نیاز و انتقال فایل‌ ها: سازماندهی ساختار پوشه‌ ها و فایل‌ ها.
  8. اجرای پروژه: اجرای نهایی پروژه برای بررسی نهایی.
  9. آنالیز و گزارش‌ دهی: جمع‌ آوری و نمایش گزارش از پروژه اجرا شده.
  10. آرشیو و پکیج کردن: بسته‌ بندی پروژه در قالب فایل نهایی (مثل ZIP).
  11. آپلود و استقرار پروژه: آماده‌ سازی و انتقال به سرور.

نمونه فایل build.xml حاوی دستورالعملهای نرم افزار Apache ANT:

<project name="SimpleAntProject" default="compile" basedir=".">
    <property name="src.dir" value="src"/>
    <property name="build.dir" value="build"/>

    <!-- Clean build directories -->
    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <!-- Create build directory and compile Java source files -->
    <target name="compile" depends="clean">
        <mkdir dir="${build.dir}"/>
        <javac srcdir="${src.dir}" destdir="${build.dir}"/>
    </target>

    <!-- Run clean and compile -->
    <target name="all" depends="clean, compile"/>

</project>

 

نرم‌افزارهای معروف Build Automation

برخی از نرم‌ افزارهای Build automation شامل موارد زیر می‌ شوند:

  • برای پروژه های PHP: نرم افزار PHING
  • برای پروژه های جاوا: نرم افزارهای  Maven, Gradle
  • برای پروژه های C و Cpp: نرم افزارهای CMake, Automake, Conan
  • برای پروژه‌های .NET: نرم افزارهای MsBuild, NANT
  • برای پروژه های وب: نرم افزارهای Grunt, Gulp
  • برای پروژه های متفرقه و چند پلتفرمی: نرم افزار Apache ANT

 

مزایای استفاده از Build automation

  1. قابلیت یکپارچگی با CI/CD: ابزارهای Build Automation به راحتی با سیستم‌ های CI/CD مانند Jenkins، GitLab CI و Azure DevOps یکپارچه می‌ شوند و فرایند استقرار مداوم را بهبود می‌ بخشند.
  2. مدیریت وابستگی‌ ها: بسیاری از ابزارهای Build Automation مدیریت وابستگی‌ ها را به‌ صورت داخلی فراهم می‌ کنند، که به‌ روزرسانی و مدیریت کتابخانه‌ ها و پکیج‌ ها را آسان می‌ کند.
  3. صرفه‌ جویی در زمان و کاهش خطاها: با اتوماتیک‌ کردن فرایندهای ساخت، احتمال خطای انسانی کاهش یافته و فرایند بهبود می‌ یابد.
  4. مناسب برای تیم‌ های چند پلتفرمی: با تعریف یک بار مراحل در یک فایل، پروژه به راحتی قابل انتقال بین سیستم‌ عامل‌ ها و محیط‌ های کاری مختلف خواهد بود.
  • یوشا آل ایوب
۱۳
۱۳۹۷/۰۶

 نکته اینکه دستور compile در نرم افزار Android Studio 3 و Gradle 3 و جدیدتر منسوخ شده و بجاش باید از دستور implemention استفاده بشه. (میتونید براحتی و بدون مشکل جایگزینشون کنید)

پس باید بگیم فرق دستور api با دستور implemention چیه:

  • دستور api به اصطلاح حکم public کردن یک کتابخانه رو داره

همونطور که با public کردن یک متد میتونید اون متد رو برای همه کلاس ها و پکیج ها share و قابل دسترسی کنید، توسط دستور api هم میتونید محتویات یک کتابخانه رو برای کل پروژه  share و قابل استفاده کنید. (درواقع توسط دستور api، کتابخانه مورد نظر در همه جای پروژه "رخنه" میکنه)

  • اما دستور implemention به اصطلاح حکم private کردن یک کتابخانه رو داره

همونطور که با private کردن یک متد میتونید اون متد رو از همه کلاس ها و پکیج ها "مخفی و غیر قابل دسترسی" کنید که " فقط در محل خودش قابل استفاده باشه"، توسط دستور implemention هم میتونید محتویات یک کتابخانه رو فقط برای برنامه یا کتابخانه ای که ازش استفاده کرده "نمایان و قابل استفاده" کنید. implementation کتابخانه رو برای ماژول‌های دیگر پروژه پنهان میکنه و به کدهای داخلی محدود میکنه.

 

مثلا:

MyApp -> Lib -> Lib2
👆 در اینجا برنامه MyApp به کتابخانه Lib وابستست، و کتابخانه Lib به کتابخانه Lib2 وابستست...
با api کردن Lib2 باعث میشید تا محتویات این کتابخانه در کل پروژه قابل دسترس باشه.

اما آیا واقاً لازم دارید؟

dependencies
{
   api project(':Lib2')
}

مثلا اگر متد sendRequest() در کتابخانه Lib2 قرار گرفته باشه و فقط کتابخانه Lib از این متد استفاده کرده باشه، با api کردن Lib2 اون متد هم در اختیار شما و کل پروژه خواهد بود. چیزی که واقاً لازم نیست...


زمانی باید از دستور api استفاده کنید که میخوایید از محتویات یک کتابخانه که برای یک کتابخانه دیگر هست استفاده کنید. 👆 مثل  Lib2
یا  پروژه تون کلاً یک کتابخانست. مثل SugarORM یا Log4J یا Volley یا ApacheHTTP...


✅ همیشه باید از دستور implemention استفاده کنید. اینطوری خود Gradle plugin تشخص میده که آیا لازمه به api تغییر کنه یا نه.
درصورت بروز خطا، بدونید که به اشتباه از متدهای کتابخانه های  تودرتو و زیرین استفاده کردید پس باید رفعش کنید.


Android Gradle plugin engineer Jerome Dochez: When you switch to the new Android Gradle plugin 3, you should replace all your compile (and api) with the implementation keyword.

implementation  / testImplementation  / androidTestImplementation

  • یوشا آل ایوب