CD (Fastlane) + Android + Slack

مطمئنا اتومات سازی پروسه‌ها یکی از دغدغه‌های این دوره زمونه است ! چیزی که می‌خوایم امروز یاد بگیریم اتومات سازی پروسه “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

خب حالا بریم سراغ 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 رو ندارم اما خلاصه بگم ، ci به معنی Continuous integration هست که شما در اون پروسه می‌تونید تست‌هایی که برای برنامه نوشتید رو به صورت خودکار اجرا کنید (و کارای دیگه) ، ci متشکل از Pipeline (تونل/لوله و … اگه درس معماری کامپیوتر رو یادتون باشه احتمالا میدونید چرا بهش Pipeline میگن) هست که میاد مراحلی که براش مشخص کردید رو به صورت اتوماتیک اجرا می‌کنه و در انتها cd رو برای ما انجام می‌ده ، یعنی وقتی unit test ها و… اوکی بودن نسخه مورد نظر رو در دست tester ها و یا مارکت و … میذاره ، ci رو می‌تونیم با gitlab ایجاد کنیم (که ابزارشو در اختیار ما میذاره) و اون رو اگه فرصتی باشه در مقالات بعدی براتون توضیح میدم .

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

http://s7.picofile.com/file/8389817192/CD_Android.pdf.html

نوشته CD (Fastlane) + Android + Slack اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

دیدگاهتان را بنویسید