له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

په RIT 2019 کې، زموږ همکار الکساندر کوروتکوف جوړ کړ راپور په CIAN کې د پرمختیا اتومات کولو په اړه: د ژوند او کار ساده کولو لپاره، موږ خپل انټیګرو پلیټ فارم کاروو. دا د دندو د ژوند دوره تعقیبوي، د عادي عملیاتو پراختیا کونکو ته راحت ورکوي او په تولید کې د بګونو شمیر د پام وړ کموي. پدې پوسټ کې ، موږ به د الکساندر راپور بشپړ کړو او تاسو ته به ووایو چې څنګه موږ له ساده سکریپټونو څخه د خپل پلیټ فارم له لارې د خلاصې سرچینې محصولاتو ترکیب ته لاړو او زموږ جلا اتومات ټیم څه کوي.
 

صفر کچه

"د صفر کچې په څیر هیڅ شی شتون نلري، زه داسې شی نه پوهیږم"
د فلم "کنګ فو پانډا" څخه ماسټر شیفو

په CIAN کې اتومات کول د شرکت تاسیس 14 کاله وروسته پیل شو. په هغه وخت کې په پرمختیایي ټیم کې 35 کسان وو. باور کول سخت دي، سمه ده؟ البته، اتومات په یو شکل کې شتون درلود، مګر د دوامداره ادغام او کوډ تحویل لپاره جلا لار په 2015 کې پیل شوه. 

په هغه وخت کې، موږ د Python، C# او PHP لوی واحد درلود، په لینکس / وینډوز سرورونو کې ځای پرځای شوي. د دې شیطان د ځای په ځای کولو لپاره، موږ د سکریپټونو یو سیټ درلود چې موږ په لاسي ډول چلولی شو. د مونولیت مجلس هم شتون درلود، کوم چې د شخړو له امله درد او رنځ راوړي کله چې د څانګو یوځای کول، د نیمګړتیاوو اصلاح کول، او بیا رغول "په ساختمان کې د مختلف کارونو سره." یو ساده پروسه داسې ښکاري:

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

موږ له دې څخه خوښ نه وو، او موږ غوښتل چې د تکرار وړ، اتوماتیک او اداره کولو وړ جوړونې او پلي کولو پروسه جوړه کړو. د دې لپاره، موږ د CI/CD سیسټم ته اړتیا درلوده، او موږ د ټیم سیټي وړیا نسخه او د جینکنز وړیا نسخه تر منځ غوره کړه، ځکه چې موږ د دوی سره کار کاوه او دواړه د دندو د سیټ له مخې موږ ته مناسب وو. موږ ټیم ښار د وروستي محصول په توګه غوره کړ. په هغه وخت کې، موږ لا د مایکرو سرویس جوړښت نه کارولی و او د لوی شمیر کارونو او پروژو تمه یې نه درلوده.

موږ د خپل نظام مفکورې ته راځو

د ټیم سیټي پلي کول د لارښود کار یوازې برخه لرې کړه: هغه څه چې پاتې دي د پل غوښتنې رامینځته کول ، په جیرا کې د وضعیت له مخې د مسلو وده او د خوشې کولو لپاره د مسلو انتخاب. د ټیم ښار سیسټم نور نشي کولی له دې سره مقابله وکړي. دا اړینه وه چې د نور اتومات لاره غوره کړي. موږ په ټیم ښار کې د سکریپټونو سره کار کولو یا د دریمې ډلې اتومات سیسټمونو ته د بدلولو اختیارونه په پام کې نیولي. مګر په پای کې موږ پریکړه وکړه چې موږ اعظمي انعطاف ته اړتیا لرو ، کوم چې یوازې زموږ خپل حل چمتو کولی شي. دا څنګه د انټیګرو په نوم د داخلي اتومات سیسټم لومړۍ نسخه ښکاره شوه.

Teamcity د جوړونې او ګمارنې پروسو پیل کولو په کچه د اتوماتیک سره معامله کوي، پداسې حال کې چې انټیګرو د پرمختیایي پروسو په لوړه کچه اتومات کولو تمرکز کوي. دا اړینه وه چې په جیرا کې د مسلو سره کار په بټ بکټ کې د اړوند سرچینې کوډ پروسس کولو سره یوځای کړئ. پدې مرحله کې، انټیګرو د مختلف ډولونو دندو سره کار کولو لپاره خپل کاري جریان پیل کړ. 

د سوداګرۍ پروسو کې د اتوماتیک زیاتوالي له امله ، په ټیم ښار کې د پروژو او چلونو شمیر ډیر شوی. نو یوه نوې ستونزه راغله: د ټیم ښار یو وړیا مثال کافي نه و (3 اجنټان او 100 پروژې) ، موږ یو بل مثال اضافه کړ (3 نور اجنټان او 100 پروژې) ، بیا بل. د پایلې په توګه، موږ د څو کلسترونو سیسټم سره پای ته ورساوه، کوم چې اداره کول ستونزمن وو:

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

کله چې د څلورم مثال پوښتنه راپورته شوه، موږ پوهیږو چې موږ نشو کولی داسې ژوند ته دوام ورکړو، ځکه چې د 4 مثالونو د ملاتړ ټول لګښتونه نور په هیڅ حد کې ندي. پوښتنه د تادیه شوي ټیم سټیټ پیرود یا وړیا جینکنز غوره کولو په اړه راپورته شوه. موږ په مثالونو او اتوماتیک پلانونو حسابونه وکړل او پریکړه مو وکړه چې موږ به په جینکنز کې ژوند وکړو. د څو اونیو وروسته، موږ جینکنز ته لاړ او د ډیری ټیم سټیټ مثالونو ساتلو سره تړلې سر دردونه یې له منځه یوړل. له همدې امله ، موږ وکولی شو د انټیګرو رامینځته کولو او د ځان لپاره جینکنز تنظیم کولو باندې تمرکز وکړو.

د لومړني اتومات وده سره (د پل غوښتنلیکونو اتوماتیک رامینځته کولو ، د کوډ پوښښ راټولولو او خپرولو او نورو چکونو په بڼه) ، قوي لیوالتیا شتون لري چې د امکان تر حده لارښود ریلیز پریږدي او دا کار روبوټونو ته ورکړي. برسېره پردې، شرکت د شرکت دننه مایکرو خدماتو ته حرکت پیل کړ، کوم چې په مکرر ډول خپرونو ته اړتیا لري، او له یو بل څخه جلا. دا څنګه موږ په تدریجي ډول زموږ د مایکرو خدماتو اتوماتیک خوشې کولو ته ورسیدو (موږ اوس مهال د پروسې پیچلتیا له امله په لاسي ډول مونولیت خوشې کوو). مګر، لکه څنګه چې معمولا پیښیږي، یو نوی پیچلتیا رامنځته شوه. 

موږ ازموینه اتومات کوو

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

د ریلیزونو اتومات کولو له امله ، د پراختیا پروسې ګړندۍ شوي ، په جزوي ډول د ځینې ازموینې مرحلو پریښودو له امله. او دا د کیفیت د لنډمهاله زیان لامل شو. دا کوچني ښکاري، مګر د خوشې کولو سرعت سره، دا اړینه وه چې د محصول پراختیا میتودولوژي بدله کړي. دا اړینه وه چې د ازموینې اتومات کولو په اړه فکر وکړئ ، د شخصي مسؤلیت رامینځته کول (دلته موږ د "سر کې د نظر منلو" په اړه خبرې کوو ، نه د پیسو جریمې) د خپور شوي کوډ لپاره د پراختیا کونکي او په دې کې د بګونو ، او همدارنګه د پریکړې کولو پریکړه. د اتوماتیک ګمارنې له لارې د دندې خوشې کول/نه خوشې کول. 

د کیفیت د ستونزو له منځه وړلو سره، موږ دوه مهمو پریکړو ته ورسیدو: موږ د کانري ازموینې ترسره کول پیل کړل او د غلطۍ شالید اتوماتیک نظارت یې د دې ډیروالي ته د اتوماتیک ځواب سره معرفي کړ. لومړي حل دا ممکنه کړه چې د څرګند غلطیو موندلو دمخه مخکې له دې چې کوډ په بشپړ ډول تولید ته خپور شي ، دوهم په تولید کې ستونزو ته د غبرګون وخت کم کړ. غلطۍ، البته، واقع کیږي، مګر موږ خپل ډیری وخت او هڅې د دوی په سمولو کې نه، بلکې د دوی په کمولو مصرف کوو. 

د اتومات ټیم

موږ اوس مهال د 130 پراختیا کونکو کارمندان لرو، او موږ دوام ورکوو وده کول. د دوامداره ادغام او کوډ تحویل لپاره ټیم (له دې وروسته د ډیپلو او انټیګریشن یا DI ټیم په نوم یادیږي) 7 کسان لري او په 2 لارښوونو کې کار کوي: د انټیګرو اتوماتیک پلیټ فارم او DevOps پراختیا. 

DevOps د CIAN سایټ د دیو / بیټا چاپیریال لپاره مسؤل دی ، د انټیګرو چاپیریال ، له پراختیا کونکو سره مرسته کوي ستونزې حل کړي او د پیمانه کولو چاپیریال لپاره نوې تګلارې رامینځته کړي. د انټیګرو پراختیا لارښود د انټیګرو پخپله او اړونده خدماتو سره معامله کوي، د بیلګې په توګه، د جینکنز، جیرا، کنفلوینس لپاره پلگ ان، او همدارنګه د پرمختیایي ټیمونو لپاره مرستندویه اسانتیاوې او غوښتنلیکونه رامینځته کوي. 

د DI ټیم د پلیټ فارم ټیم سره په ګډه کار کوي، کوم چې په داخلي توګه جوړښت، کتابتونونه، او پراختیایي طریقې رامینځته کوي. په ورته وخت کې، په CIAN کې هر پرمخ وړونکی کولی شي په اتومات کې مرسته وکړي، د بیلګې په توګه، د ټیم اړتیاوو سره سم مایکرو اتومات کول یا د اتومات کولو څرنګوالي په اړه ښه نظر شریکوي.

په CIAN کې د اتوماتیک پرت کیک

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

ټول سیسټمونه چې په اتوماتیک کې ښکیل دي په څو پرتونو ویشل کیدی شي:

  1. بهرني سیسټمونه (جیرا، بټبکټ، او نور). پرمختیایي ټیمونه ورسره کار کوي.
  2. انټیګرو پلیټ فارم. ډیری وختونه، پراختیا کونکي د دې سره مستقیم کار نه کوي، مګر دا هغه څه دي چې ټول اتومات چلوي.
  3. د سپارلو، آرکیسټریشن او کشف خدمتونه (د بیلګې په توګه، جیکنین، قونسل، کوچیان). د دوی په مرسته، موږ په سرورونو کې کوډ ځای پرځای کوو او ډاډ ترلاسه کوو چې خدمتونه د یو بل سره کار کوي.
  4. فزیکي پرت (سرور، OS، اړوند سافټویر). زموږ کوډ په دې کچه کار کوي. دا کیدی شي فزیکي سرور وي یا یو مجازی سرور (LXC، KVM، Docker).

د دې مفکورې پر بنسټ، موږ د DI ټیم کې د مسؤلیت ساحې ویشو. لومړۍ دوه کچې د انټیګرو پرمختیا سمت مسؤلیت په ساحه کې دي ، او وروستي دوه کچې دمخه د DevOps مسؤلیت په ساحه کې دي. دا جلا کول موږ ته اجازه راکوي چې په کارونو تمرکز وکړو او په متقابل عمل کې مداخله نه کوي، ځکه چې موږ یو بل ته نږدې یو او په دوامداره توګه پوهه او تجربه تبادله کوو.

ډک

راځئ چې په انټیګرو تمرکز وکړو او د ټیکنالوژۍ سټیک سره پیل وکړو:

  • CentOS 7
  • ډاکر + کوماډ + قونسل + والټ
  • جاوا 11 (زوړ انټیګرو مونولیت به په جاوا 8 کې پاتې شي)
  • د پسرلي بوټ 2.X + د پسرلي کلاوډ ترتیب
  • PostgreSql 11
  • RabbitMQ 
  • Apache Ignite
  • کیمونډا (سرایسته)
  • Grafana + Graphite + Prometheus + Jaeger + ELK
  • ویب UI: غبرګون (CSR) + MobX
  • SSO: کلید

موږ د مایکرو سرویس پراختیا اصولو ته غاړه کیږدو، که څه هم موږ د انټیګرو د لومړنۍ نسخې د واحد په بڼه میراث لرو. هر مایکرو خدمت په خپل ډاکر کانټینر کې پرمخ ځي، او خدمتونه د HTTP غوښتنو او RabbitMQ پیغامونو له لارې یو بل سره اړیکه نیسي. کوچني خدمتونه یو بل د قونسل له لارې پیدا کوي او ورته غوښتنه کوي، د SSO (Keycloak، OAuth 2/OpenID Connect) له لارې واک لیږدوي.

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

د ریښتیني ژوند مثال په توګه ، د جینکنز سره متقابل عمل په پام کې ونیسئ ، کوم چې لاندې مرحلې لري:

  1. د کاري فلو مدیریت مایکرو سرویس (له دې وروسته د فلو مایکرو سرویس په نوم یادیږي) غواړي په جینکنز کې جوړ کړي. د دې کولو لپاره ، هغه د جینکنز سره د ادغام لپاره د مایکرو سرویس IP: PORT موندلو لپاره قونسل کاروي (له دې وروسته د جینکنز مایکرو سرویس په نوم یادیږي) او دې ته په جینکنز کې د جوړولو پیل کولو لپاره غیر متناسب غوښتنه لیږي.
  2. د غوښتنې ترلاسه کولو وروسته، د جینکنز مایکرو خدمت د دندې ID سره رامینځته کوي او ځواب ورکوي، چې بیا د کار پایلې پیژندلو لپاره کارول کیدی شي. په ورته وخت کې، دا د REST API کال له لارې په جینکنز کې جوړونه هڅوي.
  3. جینکنز جوړونه ترسره کوي او د بشپړیدو وروسته، جینکنز مایکرو سرویس ته د اعدام پایلو سره ویب هک لیږي.
  4. د جینکنز مایکرو سرویس ، د ویب هک ترلاسه کولو سره ، د غوښتنې پروسس بشپړیدو په اړه پیغام رامینځته کوي او د اعدام پایلې یې ورسره ضمیمه کوي. تولید شوی پیغام د RabbitMQ کتار ته لیږل کیږي.
  5. د RabbitMQ له لارې، خپور شوی پیغام فلو مایکرو سرویس ته رسیږي، کوم چې د غوښتنې او ترلاسه شوي پیغام څخه د دندې ID سره سمون کولو سره د خپلې دندې پروسس کولو پایلې په اړه زده کوي.

اوس موږ شاوخوا 30 کوچني خدمتونه لرو، کوم چې په څو ډلو ویشل کیدی شي:

  1. د تنظیم کولو مدیریت.
  2. د کاروونکو سره معلومات او تعامل (پیغامونه، میل).
  3. د سرچینې کوډ سره کار کول.
  4. د ګمارنې وسیلو سره یوځای کول (جینکنز، کوچیان، قونسل، او نور).
  5. نظارت (راپورونه، تېروتنې، او داسې نور).
  6. د ویب اسانتیاوې (UI د ازموینې چاپیریال اداره کولو لپاره، د احصایې راټولول، او نور).
  7. د کاري تعقیب کونکو او ورته سیسټمونو سره ادغام.
  8. د مختلف کارونو لپاره د کاري جریان مدیریت.

د کاري جریان کارونه

انټیګرو د کاري ژوند دورې پورې اړوند فعالیتونه اتومات کوي. په ساده اصطلاحاتو کې، د کار د ژوند دوره به په جیرا کې د دندې د کاري جریان په توګه پوه شي. زموږ پراختیایي پروسې د پروژې ، د دندې ډول او په ځانګړي دنده کې غوره شوي اختیارونو پورې اړه لري د کاري فلو ډیری تغیرات لري. 

راځئ چې د کاري فلو وګورو چې موږ ډیری وختونه کاروو:

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

په ډیاګرام کې، ګیر دا په ګوته کوي چې لیږد په اتوماتيک ډول د Integro لخوا ویل کیږي، پداسې حال کې چې د انسان شخصیت په ګوته کوي چې لیږد د یو شخص لخوا په لاسي ډول ویل کیږي. راځئ چې څو لارې وګورو چې یو کار کولی شي پدې کاري جریان کې ترسره کړي.

په بشپړ ډول لاسي ازموینه په DEV + BETA کې پرته له کانري ازموینو (معمولا دا څنګه موږ یو مونولیت خوشې کوو):

له سکریپټونو څخه زموږ خپل پلیټ فارم ته: موږ څنګه په CIAN کې اتومات پرمختګ کوو

کیدای شي د لیږد نور ترکیبونه وي. ځینې ​​​​وختونه هغه لاره چې یوه مسله به یې په جیرا کې د اختیارونو له لارې وټاکل شي.

د کار حرکت

راځئ چې اصلي مرحلې وګورو چې ترسره کیږي کله چې یو کار د "DEV ټیسټینګ + کانري ازموینې" کاري فلو له لارې حرکت کوي:

1. پراختیا کونکی یا PM دنده رامینځته کوي.

2. پرمخ وړونکی دنده په کار اچوي. د بشپړیدو وروسته، دا د بیاکتنې حالت ته ځي.

3. جیرا جیرا مایکرو سرویس ته ویب هک لیږي (د جیرا سره د ادغام مسؤلیت لري).

4. د جیرا مایکرو سرویس د کار جریان پیل کولو لپاره د فلو خدمت (د داخلي کاري جریانونو لپاره مسؤل دی چې په هغه کې کار ترسره کیږي) ته غوښتنه لیږي.

5. د جریان خدمت دننه:

  • بیاکتونکي دندې ته ګمارل شوي (کارونکي مایکرو سرویس چې د کاروونکو په اړه هرڅه پوهیږي + جیرا مایکرو سرویس).
  • د سرچینې مایکرو سرویس له لارې (دا د ذخیره کولو او څانګو په اړه پوهیږي ، مګر پخپله د کوډ سره کار نه کوي) ، د ذخیره کولو لپاره لټون رامینځته کیږي چې زموږ د مسلې یوه څانګه لري (د لټون ساده کولو لپاره ، د څانګې نوم د مسلې سره سمون لري. په جیره کې شمیره). ډیری وختونه، یوه دنده په یوه ذخیره کې یوازې یوه څانګه لري؛ دا د ځای پرځای کولو قطار مدیریت ساده کوي او د ذخیره کولو تر مینځ ارتباط کموي.
  • د هرې موندل شوې څانګې لپاره، د عملونو لاندې ترتیب ترسره کیږي:

    i) د ماسټر برانچ تازه کول (د کوډ سره کار کولو لپاره د Git مایکرو سرویس).
    ii) څانګه د پراختیا کونکي (Bitbucket microservice) لخوا د بدلونونو څخه بنده شوې ده.
    iii) د دې څانګې (Bitbucket microservice) لپاره د پل غوښتنه جوړه شوې.
    iv) د نوي پل غوښتنې په اړه یو پیغام د پراختیا کونکي چیټونو ته لیږل کیږي (د خبرتیاو سره کار کولو لپاره مایکرو سرویس ته خبر ورکړئ).
    v) جوړونه، ازموینه او ځای پرځای کول په DEV کې پیل شوي (د جینکنز سره کار کولو لپاره د جینکنز مایکرو سرویس).
    vi) که ټولې پخوانۍ مرحلې په بریالیتوب سره بشپړې شي، نو انټیګرو خپل تصویب د پل په غوښتنه (Bitbucket microservice) کې اچوي.

  • انټیګرو د ټاکل شوي بیاکتونکو څخه د پل غوښتنه کې تصویب ته انتظار باسي.
  • هرڅومره ژر چې ټول اړین تصویبونه ترلاسه شي (پشمول د اتوماتیک ازموینو په شمول چې په مثبت ډول تیر شوي) ، انټیګرو دنده د دیو (جیرا مایکرو سرویس) حالت ازموینې ته لیږدوي.

6. ټیسټران د کار ازموینه کوي. که کومه ستونزه شتون ونلري، نو دنده د جوړیدو لپاره چمتو حالت ته لیږدول کیږي.

7. انټیګرو "ګوري" چې دنده د خلاصون لپاره چمتو ده او په کانري حالت کې یې پلي کول پیل کوي (جینکنز مایکرو سرویس). د خوشې کولو لپاره چمتووالی د یو لړ مقرراتو لخوا ټاکل کیږي. د مثال په توګه، دنده په اړین حالت کې ده، په نورو دندو کې هیڅ تالاشۍ شتون نلري، اوس مهال د دې مایکرو سرویس هیڅ فعال اپلوډ شتون نلري، او داسې نور.

8. دنده د کانري حالت (جیرا مایکرو سرویس) ته لیږدول کیږي.

9. جینکنز په کانري حالت کې د Nomad له لارې د ګمارنې دنده پیلوي (معمولا 1-3 مثالونه) او د ګمارنې په اړه د خوشې څارنې خدمت (DeployWatch microservice) ته خبر ورکوي.

10. د DeployWatch مایکرو سرویس د تېروتنې شالید راټولوي او د اړتیا په صورت کې ورته عکس العمل ښیې. که چیرې د خطا شالید ډیر شي (د شالید نورم په اوتومات ډول محاسبه کیږي) ، پراختیا کونکو ته د خبرتیا مایکرو سرویس له لارې خبر ورکول کیږي. که د 5 دقیقو وروسته پراختیا کونکي ځواب نه وي ورکړی (د بیرته راستنیدو یا پاتې کیدو کلیک وکړئ) ، نو د کانري مثالونو اتوماتیک رول بیک پیل کیږي. که شالید ډیر نه وي ، نو پراختیا کونکی باید په لاسي ډول تولید ته د دندې ګمارل پیل کړي (په UI کې د تڼۍ په کلیک کولو سره). که چیرې په 60 دقیقو کې پراختیا کونکي تولید ته ګمارل نه وي پیل کړي ، نو د کانري مثالونه به هم د امنیت دلایلو لپاره بیرته وګرځول شي.

11. تولید ته د ګمارلو پیل کولو وروسته:

  • دنده د تولید حالت ته لیږدول کیږي (جیرا مایکرو سرویس).
  • د جینکنز مایکرو سرویس د ګمارنې پروسه پیل کوي او د ګمارنې په اړه د DeployWatch مایکرو سرویس ته خبر ورکوي.
  • DeployWatch مایکرو سرویس چیک کوي چې په تولید کې ټول کانټینرونه نوي شوي دي (داسې قضیې وې کله چې ټول نوي شوي ندي).
  • د خبرتیا مایکرو سرویس له لارې ، د ګمارنې پایلو په اړه خبرتیا تولید ته لیږل کیږي.

12. پراختیا کونکي به 30 دقیقې وخت ولري چې د تولید څخه یو کار بیرته پیل کړي که چیرې د مایکرو خدماتو غلط چلند وموندل شي. د دې وخت وروسته، دنده به په اتوماتيک ډول په ماسټر (Git microservice) کې ضمیمه شي.

13. وروسته له دې چې په ماسټر کې بریالي یوځای شي، د دندې حالت به په بند (جیرا مایکرو سرویس) بدل شي.

ډیاګرام په بشپړ ډول توضیحي نه ښکاري (په حقیقت کې حتی نور مرحلې شتون لري) ، مګر دا تاسو ته اجازه درکوي په پروسو کې د ادغام درجې ارزونه وکړئ. موږ دا سکیم مثالی نه ګڼو او د اتوماتیک خوشې کولو او پلي کولو ملاتړ پروسې ته وده ورکوو.

نور څه شی دی

موږ د اتوماتیک پراختیا لپاره لوی پلانونه لرو، د بیلګې په توګه، د مونولیت ریلیزونو په جریان کې د لاسي عملیاتو له منځه وړل، د اتوماتیک ګمارلو پرمهال د څارنې ښه کول، او د پراختیا کونکو سره د تعامل ښه کول.

مګر راځئ چې د اوس لپاره دلته ودریږو. موږ په اتوماتیک بیاکتنه کې ډیری موضوعات په سطحي ډول پوښلي، ځینې یې په بشپړه توګه نه دي لمس شوي، نو موږ به خوشحاله یو چې پوښتنو ته ځواب ووایو. موږ د وړاندیزونو په تمه یو چې په تفصیل سره څه پوښښ وکړو، په نظرونو کې ولیکئ.

سرچینه: www.habr.com

Add a comment