Ali Shobeyri
Ali Shobeyri
خواندن ۴ دقیقه·۵ سال پیش

CD (Fastlane) + Android + Slack (CI-CD - Part 2)



مطمئنا اتومات سازی پروسه‌ها یکی از دغدغه‌های این دوره زمونه است ! چیزی که می‌خوایم امروز یاد بگیریم اتومات سازی پروسه "build" و رسوندن نسخه به "tester" ها و یا اعضای سازمانه .

اولین مرحله اینه که بدونیم CD چیه !

این عبارت مخفف continuous delivery ( و یا deploy که البته با هم فرق می‌کنند ولی ما اینجا یکسان در نظر می‌گیریم) هست که ویکیپدیا اونو تحویل/استقرارِ پیوسته ترجمه کرده ، هدف به طور خلاصه اینه که وقتی ما کارهای کدنویسی و تست (unit test) و ... رو انجام دادیم ، بیاییم و مراحلی رو برای تحویل "برنامه" به tester ها و یا بارگذاریش روی مارکت ها انجام بدیم .

ابزاری که برای Android استفاده می‌کنیم ، fastlane و slack هستند (که البته جایگزین های بهتری هم برای fastlane هست که تاجایی که می‌دونم یا پولین یا مشکلات دیگه دارن ، خود گوگل در داکیومنت هاش fastlane رو یکی از گزینه‌های پیشنهادی ارائه داده)

ابزارِ fastlane در واقع یک سکو به زبان Ruby برای Android و IOS هست که می‌تونه کارای زیر رو بکنه :

  1. از برنامه اسکرین شات تهیه کنه (برای مارکت)
  2. نسخه بتا (آزمایشی) رو به tester ها و ... برسونه
  3. نسخه release رو در مارکت‌ها بذاره (کافه بازار پشتیبانی نمی‌کنه ولی گوگل پلی چرا)
  4. برنامه شما رو اتوماتیک sign بکنه

ما اینجا با شماره 2 کار داریم !

قدم اول اینه که ابزار‌ها رو تهیه کنیم ، در ابتدای امر باید ruby رو دانلود کنیم

https://rubyinstaller.org/downloads/

حالا cmd رو باز کنید و این command رو بنویسید (اگه لینوکس یا مک دارید و دسترسی روت ندادید مسلما sudo بذارید) :

gem install fastlane -NV

از طریق command های مربوطه به مسیر پروژه برید (cd folan) و اونجا fastlane رو برای اون پروژه ایجاد کنید :

fastlane init

و همین ! الان fastlane برای پروژه شما ساخته شده و نشونه اش هم اینه که پوشه fastlane باید در کنار پوشه app و ... باشه و دو تا فایل Appfile و Fastfile هم توش باشه ، شما دستورات مربوطه رو باید در فایل fastane بنویسید ولی قبلش بذارید بریم سراغ slack ، هدف ما اینه که بیاییم build مورد نظرمون رو داخل slack از این طریق بارگذاری کنیم پس باید قبلش تنظیمات slack رو انجام بدیم

بعد از اینکه slack رو راه اندازی کردیم و workplace و ... رو داشتیم (که نیازی به گفتنش در اینجا نیست) باید یک token از slack بگیریم به همراه یک url که به ما اجازه اتومات سازی رو بده ، به سایت زیر برید و مراحل رو طبق عکس‌ها انجام بدید (اگه عکس لود نشده صبر کنید تا کامل لود بشه) :

https://api.slack.com/apps

در مرحله 7 به شما webhook url رو میده که برای fastlane نیاز دارید (عکس قسمتی که webhook توش هست رو نذاشتم ، شما از طریق گزینه incoming webhooks می‌تونید به کل webhook هایی که ایجاد کردید دسترسی داشته باشید) و در مرحله 9 به شما token رو میده که بازم به اون نیاز پیدا خواهید کرد !


پروسه لازم برای slack
پروسه لازم برای slack

خب حالا بریم سراغ fastlane ، کلا دستورات fastlane فرمت زیر رو دارند (خط اول اختیاریه) :

desc &quotیک سری توضیحات&quot
lane : lane_name do some commands end

و بدنه اصلی هم به این صورته :

defualt_platforom(:android) platform : android do

قبل از هرکاری باید webhook رو به عنوان متغیری برای کل fastlane ایجاد کنیم پس قسمت بالا رو به این صورت تغییر میدیم :

defualt_platforom(:android)
platform : android do before_all do ENV[&quotSLACK_URL] =&quotwebhook url&quot end

endحالا یک lane برای گرفتن نسخه و آپلود اون ایجاد می‌کنیم ، قسمت upload رو به صورت تابعی جداگونه می‌نویسیم (اختیاری)

defualt_platforom(:android) platform : android do before_all do ENV[&quotSLACK_URL] =&quotweb hook url&quot end lane :slack_build do gradle(task: &quotassembleRelease&quot) slack(message: &quotBuild Successful!&quot) upload_to_slack() end # Add this to your Fastfile desc &quotUpload the APK to Slack channel&quot private_lane :upload_to_slack do |options| file_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] file_name = file_path.gsub(/\/.*\//,&quot&quot) access_token = &quotxoxb-962620921426-966094105233-AMDOy1xTlIufyHyL1z8jmVeF&quot channel_name = &quotandroid&quot sh &quotecho Uploading &quot + file_name + &quot to Slack&quot sh &quotcurl https://slack.com/api/files.upload -F token=\&quot&quot + access_token + &quot\&quot -F channels=\&quot&quot + channel_name + &quot\&quot -F title=\&quot&quot + file_name + &quot\&quot -F filename=\&quot&quot + file_name + &quot\&quot -F file=@&quot + file_path end


کاری که این دستورات انجام میدن اینه که میاد از طریق api هایی که slack در اختیارمون میذاره (شما به جای web hook url و accsess_token و channel_name باید عبارت‌های مورد نظر خودتون رو بذارید ، اولی و دومی که از فرایند‌های قبلی بدست میاد و سومی هم مشخصا اسم کانالیه که می‌خواید فایل روش آپلود بشه) اول یک پیغام Build Successful! رو در کانال مورد نظر می‌فرسته و بعد نسخه رو بارگذاری می‌کنه ، می‌تونیم بعد از تابع upload_to_slack مشخص کنیم که وقتی فرایند‌ها تموم شدند هم یک پیغام دیگه تو slack بذاره که مشخص کنه به خطا خوردیم یا نه :

after_all do |lane| slack( message: &quotsuccessful deploy :rocket:&quot ) end error do |lane, exception| slack( message: exception.message, success:false ) end end

و تمام ! خروجی که در نهایت داریم اینه که دوتا پیغام یکی قبل و یکی بعد از آپلود فایل apk ما در slack گذاشته شده و فایل apk هم در اختیار کسانی که مشخص کردیم قرار می‌گیره ، برای اجرا کردن قضیه هم باید از طریق cmd یا ترمینال برید توی پوشه پروژه و اونجا اینو بنویسید :

fastlane android slack_build

خب این پروسه cd که درست کردیم رو کجا باید قرار بدیم ؟ توی قسمت ci ! حالا ci چیه ؟ برای ci می‌تونید این مقاله که نوشتم رو بخونید .

می‌تونید برای جمع بندی از این power point که درست کردم استفاده کنید ، لینکِ فایل fastlane که برای این مقاله درست شده رو اونجا گذاشتم .

http://s7.picofile.com/file/8389817192/CD_Android.pdf.html
androidاندرویدcontinuous deliverycontinuous deploymentبرنامه نویسی
برنامه نویس اندروید - https://www.linkedin.com/in/iryebohs/
شاید از این پست‌ها خوشتان بیاید