مطمئنا اتومات سازی پروسهها یکی از دغدغههای این دوره زمونه است ! چیزی که میخوایم امروز یاد بگیریم اتومات سازی پروسه "build" و رسوندن نسخه به "tester" ها و یا اعضای سازمانه .
اولین مرحله اینه که بدونیم CD چیه !
این عبارت مخفف continuous delivery ( و یا deploy که البته با هم فرق میکنند ولی ما اینجا یکسان در نظر میگیریم) هست که ویکیپدیا اونو تحویل/استقرارِ پیوسته ترجمه کرده ، هدف به طور خلاصه اینه که وقتی ما کارهای کدنویسی و تست (unit test) و ... رو انجام دادیم ، بیاییم و مراحلی رو برای تحویل "برنامه" به tester ها و یا بارگذاریش روی مارکت ها انجام بدیم .
ابزاری که برای Android استفاده میکنیم ، fastlane و slack هستند (که البته جایگزین های بهتری هم برای fastlane هست که تاجایی که میدونم یا پولین یا مشکلات دیگه دارن ، خود گوگل در داکیومنت هاش fastlane رو یکی از گزینههای پیشنهادی ارائه داده)
ابزارِ fastlane در واقع یک سکو به زبان Ruby برای Android و IOS هست که میتونه کارای زیر رو بکنه :
ما اینجا با شماره 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 که به ما اجازه اتومات سازی رو بده ، به سایت زیر برید و مراحل رو طبق عکسها انجام بدید (اگه عکس لود نشده صبر کنید تا کامل لود بشه) :
در مرحله 7 به شما webhook url رو میده که برای fastlane نیاز دارید (عکس قسمتی که webhook توش هست رو نذاشتم ، شما از طریق گزینه incoming webhooks میتونید به کل webhook هایی که ایجاد کردید دسترسی داشته باشید) و در مرحله 9 به شما token رو میده که بازم به اون نیاز پیدا خواهید کرد !
خب حالا بریم سراغ fastlane ، کلا دستورات fastlane فرمت زیر رو دارند (خط اول اختیاریه) :
desc "یک سری توضیحات"
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["SLACK_URL] ="webhook url" end
endحالا یک lane برای گرفتن نسخه و آپلود اون ایجاد میکنیم ، قسمت upload رو به صورت تابعی جداگونه مینویسیم (اختیاری)
defualt_platforom(:android) platform : android do before_all do ENV["SLACK_URL] ="web hook url" end lane :slack_build do gradle(task: "assembleRelease") slack(message: "Build Successful!") upload_to_slack() end # Add this to your Fastfile desc "Upload the APK to Slack channel" private_lane :upload_to_slack do |options| file_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] file_name = file_path.gsub(/\/.*\//,"") access_token = "xoxb-962620921426-966094105233-AMDOy1xTlIufyHyL1z8jmVeF" channel_name = "android" sh "echo Uploading " + file_name + " to Slack" sh "curl https://slack.com/api/files.upload -F token=\"" + access_token + "\" -F channels=\"" + channel_name + "\" -F title=\"" + file_name + "\" -F filename=\"" + file_name + "\" -F file=@" + file_path end
کاری که این دستورات انجام میدن اینه که میاد از طریق api هایی که slack در اختیارمون میذاره (شما به جای web hook url و accsess_token و channel_name باید عبارتهای مورد نظر خودتون رو بذارید ، اولی و دومی که از فرایندهای قبلی بدست میاد و سومی هم مشخصا اسم کانالیه که میخواید فایل روش آپلود بشه) اول یک پیغام Build Successful! رو در کانال مورد نظر میفرسته و بعد نسخه رو بارگذاری میکنه ، میتونیم بعد از تابع upload_to_slack مشخص کنیم که وقتی فرایندها تموم شدند هم یک پیغام دیگه تو slack بذاره که مشخص کنه به خطا خوردیم یا نه :
after_all do |lane| slack( message: "successful deploy :rocket:" ) 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 که برای این مقاله درست شده رو اونجا گذاشتم .