<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مسعود دباغی</title>
        <link>https://virgool.io/feed/@masoud_dabbaghi</link>
        <description>A passionate Android Developer</description>
        <language>fa</language>
        <pubDate>2026-06-16 06:42:46</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1217990/avatar/avatar.png?height=120&amp;width=120</url>
            <title>مسعود دباغی</title>
            <link>https://virgool.io/@masoud_dabbaghi</link>
        </image>

                    <item>
                <title>مقایسه ANT vs Maven vs Gradle</title>
                <link>https://virgool.io/@masoud_dabbaghi/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-ant-vs-maven-vs-gradle-nfwcxo6ijaxc</link>
                <description>در این مقاله به بررسی سه ابزار اتوماسیون ساخت جاوا خواهیم پرداخت که بر اکوسیستم JVM تسلط دارند:Ant &amp; Maven &amp; Gradleدر ادامه به معرفی هر یک از آن ها می پردازیم و نحوه تکامل ابزارهای اتوماسیون ساخت جاوا را بررسی می کنیم.قبل از ورود به ANT، Maven یا Gradle، ابتدا باید چند نکته مرتبط با آن ها را درک کنیم.وابستگی (Dependency): به طور کلی، وابستگی به زمانی اطلاق می شود که چیزی برای اجرای خود به چیز دیگری نیاز دارد. به بیان ساده، &quot;A&quot; وابستگی به &quot;B&quot; دارد اگر &quot;A&quot; برای اجرای موفقیت آمیز خود به &quot;B&quot; نیاز داشته باشد. در دنیای نرم افزار، وابستگی چیزی است که اپلیکیشن شما برای اجرای موفقیت آمیز آن به آن نیاز دارد. در واقع هر کتابخانه پشتیبانی خارجی مورد نیاز برنامه است. از جمله می توان به zuul، hystrix، lombok، jdbc و... اشاره کرد.در ابتدا وابستگی ها را به صورت زیر مدیریت می کردیم:دانلود فایل JAR کتابخانه مورد نیاز به صورت دستی از اینترنت و اضافه کردن آن به پروژه ی مان.نوشتن اسکریپتی که کتابخانه را به صورت خودکار از یک منبع خارجی روی شبکه دانلود کند.مشکلات پیش روی این ابزارها:اضافه کردن وابستگی ها با دانلود دستی آن ها از اینترنت کار بسیار خسته کننده ای است.اگر URL منبع خارجی در اینترنت تغییر کند، اسکریپت های ما ممکن است خراب شوند.شناسایی و مدیریت وابستگی های گذرا (transitive dependencies) در برنامه ما بسیار دشوار است.ابزار مدیریت وابستگی (Dependency management tool): وابستگی های مورد نیاز برنامه را حل و مدیریت می کند.ابزار ساخت (Build tool): ایجاد برنامه های قابل اجرا از کد منبع را خودکار می کند. Building شامل کامپایل (compiling)، پیوند (linking) و بسته بندی (packaging) کد در یک فرم قابل استفاده یا اجرایی است.اتوماسیون ساخت شامل موارد زیر است:1) دانلود وابستگی ها (Downloadingdependencies)2) کامپایل کد منبع به کد باینری (Compiling source code into binary code)3) بسته بندی آن کد باینری (Packaging that binary code)4) آزمون های در حال اجرا (Runningtests)5) استقرار در سیستم های تولید (Deployment to production systems)مدیریت وابستگی و ابزارهای ساخت در جاوا:ANT + Ivy (2000/2004)Maven (2004)Gradle (2012)Apache ANTApache ANT  مخفف  (Another Neat Tool) یک پروژه متن باز توسط Apache است که در سال ۲۰۰۰ منتشر شد. این یک کتابخانه جاوا است که برای خودکارسازی فرآیندهای ساخت برنامه های جاوا استفاده می شود. همچنین، می توان از آن برای ساخت برنامه های غیر Java استفاده کرد. این قانون از اصل &quot;پیکربندی بر روی قرارداد (Configuration over convention)&quot; پیروی می کند. در Ant، ​​مراحل مختلف فرآیند ساخت &quot;Targets&quot; نامیده می شود. فایل‌های ساخت ANT به زبان XML نوشته می‌شوند و طبق قرارداد، به آنها &quot;build.xml&quot; می‌گویند. این شامل سه عنصر است: پروژه، هدف و وظیفه. هر فایل ساخت شامل یک پروژه است. هر چیزی که در build.xml وجود دارد تحت عنصر پروژه است. پروژه شامل حداقل یک هدف (پیش فرض)است. هدف شامل مجموعه ای از وظایف درون خود است و حالت خاصی از فرآیند ساخت را تعریف می کند. وظیفه یک قطعه کد است که می تواند اجرا شود. هر گره می تواند دارای ویژگی های مرتبط با آنها باشد:ویژگی های Project:نام (Name): نام project.Basedir: پوشه root برای project و اختیاری است.پیش فرض (Default): target پیش فرض برای build. پروژه می تواند یک یا چند target داشته باشد. از آن برای مشخص کردن target پیش فرض پروژه استفاده می شود.ویژگی های Target:Name: نام target. Description: توضیحاتی درباره target. Depends: فهرستی از تمام target ها که توسط کاما از هم جدا شده اند که این target به آن ها بستگی دارد. If: ـ target در صورتی اجرا می شود که مشخصه درست باشد. Unless: اگر مشخصه تنظیم نشده باشد هدف اجرا می شود.Build.xml example:  Add dependency in Ant + Ivy:  مزیت اصلی Ant انعطاف پذیری آن است. Ant هیچ قرارداد کدنویسی یا ساختار پروژه ای را به توسعه دهنده تحمیل نمی کند. در نتیجه، این بدان معناست که Ant از توسعه دهندگان می خواهد که تمام دستورها را خودشان بنویسند، که گاهی اوقات منجر به فایل های build بزرگ می شود و نگهداری از آن ها دشوار است. در ابتدا، Ant هیچ پشتیبانی داخلی برای مدیریت وابستگی نداشت. بعدها Apache Ivy را به عنوان یک پروژه فرعی از پروژه Apache Ant با هدف مدیریت وابستگی توسعه یافته بود، پذیرفت.Apache Mavenاین یک ابزار مدیریت وابستگی و یک ابزار اتوماسیون ساخت است که در سال ۲۰۰۴ منتشر شد. این روش همچنان از XML استفاده می کند اما اشکالات را با پیروی از اصل &quot;کنوانسیون بر پیکربندی (Convention over configuration)&quot; برطرف می کند. این سیستم بر کنوانسیون ها متکی است و دستورها (اهداف) از پیش تعریف شده را ارائه می دهد. فایل پیکربندی آن که حاوی دستورالعمل های ساخت (build) و مدیریت وابستگی (dependency management) است، به صورت قراردادی &quot;pom.xml&quot; نامیده می شود و در پوشه ریشه (root folder) پروژه وجود دارد.Maven workflow موتور Maven، ـ pom.xml و پروژه را به عنوان ورودی در نظر می گیرد. فایل pom.xml را می خواند و وابستگی های ذکر شده در آن را به عنوان فایل jar در مخزن محلی دانلود می کند. سپس، چرخه های حیات (life cycles)، مراحل ساخت (build) و پلاگین ها را اجرا می کند. در پایان، یک آرتیفکت بسته بندی شده و تست شده تولید می شود.pom.xml example:  برخی از تگ های مهم در فایل pom.xml:ـ groupId: نشان دهنده سازمانی است که پروژه به آن تعلق دارد.ـ artifactId: نام این پروژه است.ـ version: نشان دهنده نسخه پروژه است.ـ packaging: شکل نهایی ساخت پروژه را نشان می دهد. به عنوان مثال jar, war.مخزن ماون (Maven repository)مخزن یک دایرکتوری است که در آن تمام فایل های jar بسته بندی شده به همراه فایل های pom خودشان وجود دارند. این فایل های pom شامل وابستگی های خارجی آن پروژه هستند. به این ترتیب maven وابستگی های پروژه خود را به صورت بازگشتی دانلود می کند تا زمانی که تمام وابستگی های مورد نیاز در مخزن محلی شما وجود داشته باشد. سه نوع مخزن در maven وجود دارد:1) مخزن محلی (Local repository): مخزنی است که در خود ماشین توسعه دهنده وجود دارد.2) مخزن از راه دور / سطح سازمان (Organisation level/remote repository): مخزن موجود در سازمان است.3) مخزن مرکزی (Central repository): یک مخزن بر روی اینترنت است که توسط جامعه maven ایجاد و نگهداری می شود.Mavenهرگاه یک وابستگی در فایل pom.xml یک پروژه مشخص شود، Maven آن را در مخزن محلی (local repository) جستجو می کند. اگر در آنجا یافت نشد، آن را در مخزن remote/org-wide جستجو می کند. اگر حتی در آنجا هم وجود نداشته باشد، آن را در مخزن مرکزی (central repository) جستجو می کند.معایب Maven:1) مدیریت وابستگی (Dependency management) تضادهای بین نسخه های مختلف یک کتابخانه را به خوبی مدیریت نمی کند.2) سفارشی سازی اهداف سخت است.Gradleاین یک ابزار مدیریت وابستگی متن باز و اتوماسیون ساخت است که در سال ۲۰۱۲ منتشر شد. این زبان بخش های خوب Apache Ant و Apache Maven را ترکیب می کند و بر روی آن ها می سازد و به جای XML از یک زبان خاص دامنه (براساس Groovy)استفاده می کند. این شرکت انعطاف پذیری را از Ant و چرخه حیات آن را از Maven گرفت. همچنین از اصل &quot;کنوانسیون بر پیکره بندی (Convention over configuration)&quot; پیروی می کند. از مخازن Maven و Ivy برای بازیابی وابستگی ها پشتیبانی می کند. فایل پیکربندی آن به صورت قراردادی با نام &quot;build.gradle&quot; شناخته می شود و در پوشه ریشه (اصلی) پروژه وجود دارد. Gradle نام مراحل ساخت خود را &quot; Tasks&quot; گذاشت، برخلاف &quot; targets&quot; Ant یا &quot; phases&quot; Maven. گوگل از Gradle به عنوان ابزار ساخت (build) پیش فرض برای سیستم عامل اندروید استفاده کرد.ـ Gradle از XML استفاده نمی کند. در عوض، زبان مخصوص دامنه خود را براساس Groovy (یکی از زبان های JVM)دارد. در نتیجه اسکریپت های ساخت Gradle بسیار کوتاه تر و واضح تر از اسکریپت های نوشته شده برای Ant یا Maven هستند. مقدار کد با Gradle بسیار کم تر است.پیکربندی های Gradle (Gradle configurations)ـ implementation (پیاده سازی): برای اعلام وابستگی استفاده می شود.ـ api: برای اعلام وابستگی هایی استفاده می شود که بخشی از API ما هستند، یعنی وابستگی هایی که ما به صراحت می خواهیم آن ها را در معرض مصرف کنندگان خود قرار دهیم.ـ compileOnly: به ما این امکان را می دهد وابستگی هایی را اعلام کنیم که تنها باید در زمان کامپایل در دسترس باشند، اما در زمان اجرا مورد نیاز نیستند. یک مورد استفاده نمونه برای این پیکربندی یک annotation processor مانند Lombok است که بایت کد را در زمان کامپایل اصلاح می کند. پس از کامپایل دیگر نیازی به آن نیست، بنابراین وابستگی در زمان اجرا در دسترس نیست.ـ RuntimeOnly: به ما این امکان را می دهد وابستگی هایی را اعلام کنیم که در زمان کامپایل مورد نیاز نیستند، اما در زمان اجرا در دسترس خواهند بود.ـ testImplementation: مشابه implementation ، اما وابستگی های اعلام شده با testImplementation تنها در طول کامپایل و زمان اجرای تست ها در دسترس هستند. ما می توانیم از آن برای اعلام وابستگی به چارچوب های تست مانند JUnit یا Mockito استفاده کنیم که تنها در تست ها به آن نیاز داریم و نباید در کد تولید موجود باشد.ـ testCompileOnly: مشابه compileOnly، اما وابستگی های اعلام شده با testCompileOnly تنها در طول کامپایل تست ها در دسترس هستند و نه در زمان اجرا.ـ testRuntimeOnly: مشابه runtimeOnly، اما وابستگی های اعلام شده با testRuntimeOnly تنها در طول زمان اجرای تست ها در دسترس هستند و نه در زمان کامپایل.پروژه ها و وظایف (Projects and tasks) در Gradleهر Gradle build شامل یک یا چند پروژه است. هر پروژه شامل مجموعه ای از وظایف است. هر وظیفه نشان دهنده یک قطعه کار است که یک build انجام می دهد به عنوان مثال تولید JavaDoc، انتشار برخی آرشیوها در یک مخزن و غیره.build.gradle example  مخزن Gradle (Gradle repository):نام مستعار (aliases) در Gradle برای اضافه کردن مخازن Maven به build پروژه ما استفاده می شود.این اسامی مستعار به شرح زیر است:ـ mavenCentral(): این نام مستعار مخفف وابستگی هایی است که از مخزن مرکزی Maven 2 (central Maven 2 repository) استخراج می شوند.ـ jcenter(): این نام مستعار مخفف وابستگی هایی است که از مخزن JCenter Maven Bintray استخراج می شوند.ـ mavenLocal(): این نام مستعار مخفف وابستگی هایی است که از مخزن محلی Maven (local Maven repository) استخراج می شوند.build.gradleمزایا:1) وابستگی های گذرا را به خوبی کنترل می کند. اگر یک وابستگی انتقالی متناقض در پروژه وجود داشته باشد، برای حل آن، آخرین نسخه وابستگی را انتخاب می کند. برای مثال، وابستگی &quot;A&quot; به صورت داخلی نیازمند وابستگی &quot;C&quot; با نسخه ۲.۰ و وابستگی &quot;B&quot; به صورت داخلی نیازمند وابستگی &quot;C&quot; با نسخه ۳.۰ است. سپس Gradle از آخرین نسخه وابستگی &quot;C&quot; استفاده می کند.2) فایل های پیکربندی Gradle از نظر اندازه کوچک تر و تمیزتر هستند چرا که به جای XML از زبان مخصوص دامنه Groovy استفاده می کند.3) ـ Gradle از مفهوم ساخت افزایشی (incremental build concept) استفاده می کند و با ردیابی ورودی و خروجی وظایف و تنها اجرای آنچه ضروری است، از کار جلوگیری می کند و تنها فایل هایی را پردازش می کند که در صورت امکان تغییر کرده اند و در نتیجه، سریع تر از maven عمل می کنند.نتیجه گیریدر این مقاله سه ابزار اتوماسیون ساخت جاوا با نام های Ant، Maven و Gradle را معرفی کردیم.جای تعجب نیست که Maven امروزه اکثر بازار build tool را در اختیار دارد.با این حال، Gradle به دلایل زیر شاهد پذیرش خوبی در codebase های پیچیده تر بوده است:بسیاری از پروژه های متن باز مانند Spring در حال حاضر از آن استفاده می کنند.به لطف builds افزایشی (incremental builds) خود در اکثر سناریوها از Maven سریع تر است.خدمات تجزیه و تحلیل و عیب یابی پیشرفته ای را ارائه می دهد.با این حال به نظر می رسد که Gradle منحنی یادگیری تندتری دارد، به خصوص اگر با Groovy یا Kotlin آشنا نباشید.منبع https://medium.com/@257ramanrb/ant-vs-maven-vs-gradle-cd8ab4c2735f </description>
                <category>مسعود دباغی</category>
                <author>مسعود دباغی</author>
                <pubDate>Tue, 04 Jul 2023 12:18:40 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی GitLab CI/CD اندروید و آپلود اپلیکیشن در کانال تلگرام</title>
                <link>https://virgool.io/coderlife/%D9%86%D9%85%D9%88%D9%86%D9%87-%DB%8C-gitlab-ci-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%B1%DA%98%D9%86-android-gradle-7-ztyhqyqisvcs</link>
                <description>Android GitLab CI / CD to Telegram Channel بعد از کلی سرچ در این موضوع با کمک دوست خوبم مسیح تونستیم یه GitLab Ci برای اندروید ورژن Android Gradle +7 تهیه کنیم که بعد از Build شدن پروژه, اپلیکیشن می تونه در کانال تلگرام ارسال بشه و آماده ی نصب و ارسال برای دیگران هست.فرم کلی gitlab-ci.yml به صورت زیر هست که به طور مفصل درباره اش توضیح می دهم. https://gist.github.com/masoudd2159/4dc1960616e967f65fc043cf57bc14f2#file-gitlab-ci-yml این آموزش شامل سه بخش میشه :ساختن ربات تلگرام و پیدا کردن Chat ID کانال تلگرامساختن و اضافه کردن Application Signature به GitLabنوشتن و اضافه کردن GitLab Ci به پروژه ی اندرویدی ساختن ربات تلگرام و پیدا کردن Chat ID کانال تلگرامابتدا یه کانال تلگرام می سازیم و با استفاده از ربات IDBot چت آی دی کانال تلگرامون را پیدا می کنیم.پیدا کردن Chat ID کانال تلگرامبه این صورت که یک پیام از کانالی که قرارِ اپلیکیشن در آنجا آپلود بشه را برای ربات IDBot فوروارد می کنیم و اون ربات Chat Id کانال تلگرام مان را بهمون میدهتوجه کنید که Chat Id یه عبارت 13 رقمی با علامت منفیپس از دریافت Chat Id آن را در قسمت TELEGRAM_CHAT_ID فایل gitlab-ci.yml به صورت زیر قرار می دهیم.# CHANNEL CHAT ID
TELEGRAM_CHAT_ID: &amp;quotTELEGRAM_CHAT_ID&amp;quotتوجه کنید برای آن که بتوانید اپلیکیشن تان را در گروه تلگرام نیز آپلود کنید کافی است که فقط لینک گروه تلگرام را در ربات IDBot فوروارد کنید تا Chat Id گروه تلگرامی تان را پبدا کند و آن را مانند Chat Id کانال تلگرام در قسمت TELEGRAM_CHAT_ID فایل gitlab-ci.yml قرار دهید.خوب پس از آن باید در ربات BotFather یه ربات تلگرام برای فوروارد کردن اپلیکیشن به داخل کانال تلگرامون بسازیم به این صورت که بر روی newbot می زنیم و name و username رباتمون را انتخاب می کنیم و در پایان باز بر روی عبارت mybots می زنیم تا لیست ربات هایی که ساختیم را نمایش بدهد و رباتی که ساختیم را از منوی شیشه ای انتخاب می کنیم و در منوی نمایش داده شده گزینه ی API Token را انتخاب کرده تا API Token رباتمون را بهمون بدهد و آن را در قسمت TELEGRAM_BOT_API_TOKEN فایل gitlab-ci.yml به صورت زیر قرار می دهیم.# BOT TOKEN
TELEGRAM_BOT_TOKEN: &amp;quotTELEGRAM_BOT_API_TOKEN&amp;quotدر نهایت نیز ربات تلگرامی که ساختیم را تحت عنوان ادمین در کانال تلگرام مان اضافه می کنیم تا دسترسی ارسال پیام و آپلود اپلیکیشن را داشته باشد. همچنین برای ارسال اپلیکیشن در گروه تلگرام نیز ربات را تحت عنوان ادمین در گروه تلگرام ادد می کنیم.خوب تا این جای کار ربات و کانال تلگراممون را راه انداختیم و می خواهیم یکم بیشتر درباره ی بقیه ی موارد استیج Deploy توضیح بدهیم.عبارت APPLICATION_VERSION فایل gitlab-ci.yml همان versionName گریدل اصلی اپلیکیشن bulid.gradle (:app) است. که عموما بعد از هر بار کامیت کردن پروژه و push کردن پروژه باید یک ورژن به برنامه اضافه شود و APPLICATION_VERSION تغییر کند.به طور مثال :# APPLICATION VERSION
APPLICATION_VERSION: &amp;quot1.12.50&amp;quotعبارت APPLICATION_NAME نام اصلی اپلیکیشن شما خواهد بود. که پیشنهاد می شود بعد از نوشتن نام اپلیکیشن عبارت _V_ را هم قرار دهید که بعد از آپلود شدن اپلیکیشن در کانال تلگرام عبارت ورژن از نام اپلیکیشن متمایز باشد.به طور مثال :# APPLICATION NAME
APPLICATION_NAME: &amp;quotProjectName_V_&amp;quotاین دو عبارت در پایان هنگام آپلود در کانال به صورت ProjectName_V_1.12.50.apk خواهد بود.عبارت TELEGRAM_MESSAGE_CAPTION زیرنویس پیام کانال تلگرام را مشخص می کند. که باز پیشنهاد می شود انتهای کامنت تان \n#ProjectName را قرار دهید که اپلیکیشن هایتان راحت تر در کانال تلگرام پیدا شود.\n#ProjectNameبه طور مثال : # DISCRIPTION
TELEGRAM_MESSAGE_CAPTION: test caption \n#ProjectName&amp;quotدرنهایت نمونه ی ارسال شده ی اپلیکیشن با مشخصات فوق به صورت زیر خواهد بودنمونه اپلیکیشن آپلود شده در کانال تلگرامپیدا کردن و اضافه کردن Application Signature به GitLabجهت ساختن Application Signature می توانید از سایت مرجع تخصصی آموزش برنامه نویسی اندروید کمک بگیرید و سپس پس از بدست آوردن Key Alias و Key Password و Keystore File و Keystore Password باید اطلاعات را وارد تنظیمات CI/CD پروژه کنیم. ولی قبل از آن باید فایل Signature.jks را به Base64 اِنکد (Encode) کنیم به این صورت که با استفاده از سایت Base64Encode فایل Signature.jks یا همان Keystore File را آپلود می کنیم و پس از Encode شدن, فایل متنی Encode شده را دانلود می کنیم. مطابق با شکل زیر:Encode files to Base64 formatپس از آن به پروفایل GitLabمان می رویم و پروژه ای که می خواهیم CI/CD روی آن اجرا شود را باز می کنیم و از منوی سمت چپ روی گزینه ی Settings هاور می کنیم تا ساب منو تنظیمات نمایش داده شود و گزینه ی CI/CD را انتخاب می کنیم تا تنظیمات این قسمت باز شود. مطابق شکل زیر :gitlab.com/YOUR_USERNAME/YOUR_PROJECTبعد از باز شدن تنظیمات CI/CD از قسمت Variables بر روی دکمه ی Expand کلیک کنید تا تنظیمات این بخش باز شود تا Environment variables های Application Signature مان را در این قسمت وارد کنیم.gitlab.com/YOUR_USERNAME/YOUR_PROJECT/-/settings/ci_cdخوب پس از باز شدن Variables بر روی دکمه Add variable می زنیم تا دیالوگ Add variable باز شود و اطلاعات Application Signature را که شامل Key Alias و Key Password و Keystore File و Keystore Password است را که در فوق به دست آوردیم به صورت جداگانه وارد می کنیم.حتما توجه کنید که فیلد key باید با حروف بزرگ نوشته شود و به جای Space از UnderLine (_) استفاده کنید!به صورت زیر :Key Alias ---------------------&gt;  KEY_ALIAS
Key Password -------------&gt;  KEY_PASSWORD
Keystore File ---------------&gt;  KEYSTORE_FILE
Keystore Password -----&gt;  KEYSTORE_PASSWORDو حتما تیک Protect variable را هم بردارید!به نمونه های زیر دقت کنید :KEY_ALIASKEY_PASSWORDKEYSTORE_FILEKEYSTORE_PASSWORDدر پایان باید تمام چهار متغیر را به صورت زیر ثبت کرده باشید:Environment variablesنوشتن و اضافه کردن GitLab Ci به پروژه ی اندرویدیخوب تا این جای کار ربات تلگرام و تنظیمات CI/CD گیت لب را انجام دادیم حال وقت آن است که فایل gitlab-ci.yml را به پروژه اضافه کنیم به این صورت که ابتدا تنظیمات اندروید استودیو را از Android به Project به صورت زیر تغییر بدهیم. Android -&gt; Project&quot; /&gt; Project&quot; /&gt; Android -&gt; Projectو یک فایل جدید به اسم .gitlab-ci.yml درست می کنیم..gitlab-ci.yml.gitlab-ci.ymlتوجه کنید که اول عبارت همراه با دات شروع می شود!و تمام کد های زیر را داخل آن فایل کپی می کنیم : https://gist.github.com/masoudd2159/4dc1960616e967f65fc043cf57bc14f2#file-gitlab-ci-yml و حال کافیست که فقط APPLICATION_VERSION (ورژن اپلیکیشن) را از bulid.gradle (:app) وارد gitlab-ci.yml کنیم و درAPPLICATION_NAME نام اصلی اپلیکیشن را بنویسیم و در قسمت TELEGRAM_CHAT_ID چت آیدی کانال تلگراممون را وارد کنیم و در TELEGRAM_BOT_TOKEN توکن (API Token) ربات تلگراممون را اینجا قرار بدهیم و در نهایت در TELEGRAM_MESSAGE_CAPTION زیرنویس پیام تلگراممون را بنویسیم.خوب همه چیز آماده است کد هایتان را add و commit کنید و پس از آن پروژه را push کنید تا همه چیز به صورت روتین انجام شود.از روش زیر هم می تونید Stage های پروژه تون را پیگیری کنید:CI/CD Pipelines CI/CD Pipelines هر گونه سوالی داشتین میتونین از طریق تلگرام یا اینستگرام و لینکدین با من در ارتباط باشید.</description>
                <category>مسعود دباغی</category>
                <author>مسعود دباغی</author>
                <pubDate>Sat, 25 Sep 2021 14:46:57 +0330</pubDate>
            </item>
            </channel>
</rss>