Kwarewar CICD ta wayar hannu: mizanin fastlane ɗaya don aikace-aikacen hannu da yawa

Kwarewar CICD ta wayar hannu: mizanin fastlane ɗaya don aikace-aikacen hannu da yawa
Ina so in yi magana game da ci gaba da haɗawa da isarwa don aikace-aikacen hannu ta amfani da fastlane. Yadda muke aiwatar da CI/CD akan duk aikace-aikacen wayar hannu, yadda muka isa wurin da abin da ya faru a ƙarshe.

Akwai isasshen abu akan hanyar sadarwa akan kayan aikin, wanda muka rasa a farkon, don haka da gangan ba zan bayyana kayan aikin daki-daki ba, amma kawai zan koma ga abin da muke da shi a lokacin:

Labarin ya ƙunshi sassa biyu:

  • Bayanin bayyanar CI/CD ta hannu a cikin kamfani
  • Maganin fasaha don mirgine fitar da CI/CD don aikace-aikacen N

Kashi na farko shine ƙarin sha'awar jima'i, na biyu kuma ƙwarewar da za ku iya amfani da ita ga kanku.

Haka abin ya faru a tarihi

Shekara ta 2015

Mun fara haɓaka aikace-aikacen hannu kawai, sannan ba mu san komai game da ci gaba da haɗa kai ba, game da DevOps da sauran abubuwan zamani. Kowane sabunta aikace-aikacen mai haɓakawa da kansa ya fitar da shi daga injinsa. Kuma idan don Android yana da sauƙin sauƙi - an haɗa shi, sanya hannu .apk kuma mun loda shi zuwa Google Developer Console, sannan ga iOS kayan aikin rarrabawa ta hanyar Xcode ya bar mu da maraice masu kyau - yunƙurin zazzage tarihin yakan ƙare cikin kurakurai kuma dole ne mu sake gwadawa. Ya bayyana cewa mafi haɓakawa ba ya rubuta lamba sau da yawa a wata, amma yana fitar da aikace-aikacen.

Shekara ta 2016

Mun girma, mun riga mun yi tunani game da yadda za mu 'yantar da masu haɓakawa daga dukan yini don saki, kuma aikace-aikace na biyu kuma ya bayyana, wanda kawai ya tura mu zuwa aiki da kai. A wannan shekarar, mun shigar da Jenkins a karon farko kuma mun rubuta tarin rubutun ban tsoro, kama da waɗanda fastlane ke nunawa a cikin takaddun sa.

$ xcodebuild clean archive -archivePath build/MyApp 
    -scheme MyApp

$ xcodebuild -exportArchive 
                        -exportFormat ipa 
                        -archivePath "build/MyApp.xcarchive" 
                        -exportPath "build/MyApp.ipa" 
                        -exportProvisioningProfile "ProvisioningProfileName"

$ cd /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

$ ./altool —upload-app 
-f {abs path to your project}/build/{release scheme}.ipa  
-u "[email protected]" 
-p "PASS_APPLE_ID"

Abin baƙin cikin shine, har yanzu masu haɓaka mu kawai sun san yadda waɗannan rubutun ke aiki da kuma dalilin da yasa ake buƙatar wannan maɓalli mara iyaka, kuma lokacin da wani abu ya sake fashe, sun sami "kyawawan maraice" don nazarin rajistan ayyukan.

Shekara ta 2017

A wannan shekara mun koyi cewa akwai irin wannan abu kamar fastlane. Babu bayanai da yawa kamar yadda ake samu a yanzu - yadda ake fara ɗaya, yadda ake amfani da shi. Kuma kayan aiki da kansa har yanzu yana da ɗanyen a wancan lokacin: kurakurai akai-akai kawai sun ba mu kunya kuma yana da wuya a yi imani da aikin sihirin da suka yi alkawari.

Koyaya, manyan abubuwan amfani da aka haɗa a cikin core fastlane sune gym и pilot, mun yi nasarar fara shi.

An dan inganta rubutun mu.

$ fastlane gym  —-workspace "Example.xcworkspace" 
                --scheme "AppName" 
                —-buildlog_path "/tmp" 
                -—clean

An inganta su, idan kawai saboda ba duk sigogin da ake bukata ba xcodebuild, kana bukatar ka nuna - gym da kansa zai fahimci inda da abin da yake kwance. Kuma don ƙarin daidaitawa, zaku iya saka maɓalli iri ɗaya kamar a ciki xcodebuild, kawai sunan maɓallan ya fi bayyana.

Wannan lokacin, godiya ga dakin motsa jiki da ginannen tsarin xcpretty, ginin rajistan ayyukan sun zama masu iya karantawa sosai. Wannan ya fara ɓata lokaci don gyara tarurrukan tarurruka, kuma wani lokaci ƙungiyar sakin za ta iya gano shi da kansu.

Abin takaici, ma'aunin saurin taro xcodebuild и gym Ba mu yi shi ba, amma za mu amince da takaddun - har zuwa 30% saurin gudu.

Tsari ɗaya don duk aikace-aikace

Shekarar 2018 da yanzu

A shekara ta 2018, tsarin ginawa da ƙaddamar da aikace-aikacen gaba ɗaya ya koma Jenkins, masu haɓakawa sun daina sakewa daga injin su, kuma ƙungiyar sakin kawai ke da hakkin saki.

Mun riga mun so inganta ƙaddamar da gwaje-gwaje da bincike a tsaye, kuma rubutun mu ya girma kuma ya girma. Girma kuma canza tare da aikace-aikacen mu. A wancan lokacin akwai kusan aikace-aikacen 10. Idan muka yi la'akari da cewa muna da dandamali guda biyu, wannan shine kusan rubutun "rai" 20.

Duk lokacin da muke son ƙara sabon mataki zuwa rubutun, dole ne mu kwafa-manna guntuwar cikin duk rubutun harsashi. Wataƙila za mu iya yin aiki a hankali, amma sau da yawa irin waɗannan canje-canjen sun ƙare a cikin typos, wanda ya zama maraice don ƙungiyar saki don gyara rubutun kuma gano wane mutum mai hankali ya kara wannan umarni da abin da yake aikatawa. Gabaɗaya, ba za a iya cewa rubutun taro na dandali ɗaya aƙalla sun yi kama da juna ba. Ko da yake tabbas sun yi hakan.

Domin fara aiwatar da sabon aikace-aikacen, ya zama dole a ciyar da rana ɗaya don zaɓar sigar “sabo” na waɗannan rubutun, cire shi kuma a ce “eh, yana aiki.”

A cikin lokacin rani na 2018, mun sake duba zuwa ga ci gaba da sauri.

Aiki #1: taƙaita duk matakan rubutun kuma sake rubuta su a cikin Fastfile

Lokacin da muka fara, rubutun mu ya yi kama da takalmin ƙafar ƙafa wanda ya ƙunshi duk matakai da ƙugiya a cikin rubutun harsashi ɗaya a Jenkins. Har yanzu ba mu canza zuwa bututun mai da rarraba ta mataki-mataki ba.

Mun kalli abin da muke da shi kuma mun gano matakai 4 waɗanda suka dace da bayanin CI/CD ɗin mu:

  • ginawa - shigar da abubuwan dogaro, haɗa kayan tarihin,
  • gwajin - Gudun gwaje-gwajen rukunin masu haɓakawa, ƙididdige ɗaukar hoto,
  • sonar - ƙaddamar da duk linters kuma yana aika rahotanni zuwa SonarQube,
  • tura - aika kayan tarihi zuwa alpha (TestFlight).

Kuma idan ba ku shiga cikin cikakkun bayanai ba, barin maɓallan da aka yi amfani da su a cikin ayyuka, zaku sami wannan Fastfile:

default_platform(:ios)

platform :ios do
  before_all do
    unlock
  end

  desc "Build stage"
  lane :build do
    match
    prepare_build
    gym
  end

  desc "Prepare build stage: carthage and cocoapods"
  lane :prepare_build do
    pathCartfile = ""
    Dir.chdir("..") do
      pathCartfile = File.join(Dir.pwd, "/Cartfile")
    end
    if File.exist?(pathCartfile)
      carthage
    end
    pathPodfile = ""
    Dir.chdir("..") do
      pathPodfile = File.join(Dir.pwd, "/Podfile")
    end
    if File.exist?(pathPodfile)
      cocoapods
    end
  end

  desc "Test stage"
  lane :test do
    scan
    xcov
  end

  desc "Sonar stage (after run test!)"
  lane :run_sonar do
    slather
    lizard
    swiftlint
    sonar
  end

  desc "Deploy to testflight stage"
  lane :deploy do
    pilot
  end

  desc "Unlock keychain"
  private_lane :unlock do
    pass = ENV['KEYCHAIN_PASSWORD']
    unlock_keychain(
      password: pass
    )
  end
end

A zahiri, Fastfile ɗin mu na farko ya zama abin ban tsoro, idan aka yi la'akari da wasu abubuwan da muke buƙata har yanzu da adadin sigogin da muka maye gurbinsu:

lane :build do
carthage(
  command: "update",
  use_binaries: false,
  platform: "ios",
  cache_builds: true)
cocoapods(
  clean: true,
    podfile: "./Podfile",
    use_bundle_exec: false)

gym(
  workspace: "MyApp.xcworkspace",
  configuration: "Release",
  scheme: "MyApp",
  clean: true,
  output_directory: "/build",
  output_name: "my-app.ipa")
end 

lane :deploy do
 pilot(
  username: "[email protected]",
  app_identifier: "com.example.app",
  dev_portal_team_id: "TEAM_ID_NUMBER_DEV",
  team_id: "ITS_TEAM_ID")
end

A cikin misalin da ke sama, kawai ɓangare na sigogi da muke buƙatar tantancewa: waɗannan su ne sigogin ginawa - ƙira, daidaitawa, sunaye na bayanan samarwa, da sigogin rarraba - Apple ID na asusun mai haɓakawa, kalmar wucewa, ID na aikace-aikacen, da sauransu. kan. A matsayin ƙimar farko, mun sanya duk waɗannan maɓallan a cikin fayiloli na musamman - Gymfile, Matchfile и Appfile.

Yanzu a cikin Jenkins zaku iya kiran gajerun umarni waɗanda ba sa ɓata ra'ayi kuma ido yana iya karantawa cikin sauƙi:

# fastlane ios <lane_name>

$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy

Hurray, muna da kyau

Me kuka samu? Share umarni don kowane mataki. Rubutun da aka share, an tsara su da kyau a cikin fayilolin fastlane. Muna murna, mun gudu zuwa ga masu haɓakawa suna tambayar su su ƙara duk abin da suke buƙata a ma'ajiyar su.

Amma mun fahimci a cikin lokaci cewa za mu ci karo da irin waɗannan matsalolin - har yanzu muna da rubutun taro guda 20 wanda wata hanya ko wata za ta fara rayuwa ta kansu, zai fi wuya a gyara su, tun da rubutun zai matsa zuwa ɗakunan ajiya. kuma ba mu samu shiga ba. Kuma, a gaba ɗaya, ba zai yiwu a magance ciwon mu ta wannan hanya ba.

Kwarewar CICD ta wayar hannu: mizanin fastlane ɗaya don aikace-aikacen hannu da yawa

Aiki #2: sami Fastfile guda ɗaya don aikace-aikacen N

Yanzu da alama cewa warware matsalar ba ta da wahala sosai - saita masu canji, kuma bari mu tafi. Haka ne, a gaskiya, haka aka warware matsalar. Amma a lokacin da muka murƙushe shi, ba mu da ƙwarewa a cikin fastlane kanta, ko a cikin Ruby, wanda aka rubuta fastlane, ko misalai masu amfani akan hanyar sadarwa - duk wanda ya rubuta game da fastlane to an iyakance shi ga misali ga aikace-aikacen guda ɗaya. daya developer.

Fastlane na iya sarrafa masu canjin yanayi, kuma mun riga mun gwada wannan ta saita kalmar wucewa ta Keychain:

ENV['KEYCHAIN_PASSWORD']

Bayan duba rubutun mu, mun gano sassan gama gari:

#for build, test and deploy
APPLICATION_SCHEME_NAME=appScheme
APPLICATION_PROJECT_NAME=app.xcodeproj
APPLICATION_WORKSPACE_NAME=app.xcworkspace
APPLICATION_NAME=appName

OUTPUT_IPA_NAME=appName.ipa

#app info
APP_BUNDLE_IDENTIFIER=com.example.appName
[email protected]
TEAM_ID=ABCD1234
FASTLANE_ITC_TEAM_ID=123456789

Yanzu, don fara amfani da waɗannan maɓallan a cikin fayilolin fastlane, dole ne mu gano yadda ake isar da su a wurin. Fastlane yana da mafita don wannan: loda masu canji ta hanyar dotenv. Takaddun sun ce idan yana da mahimmanci a gare ku don loda maɓallai don dalilai daban-daban, ƙirƙirar fayilolin sanyi da yawa a cikin jagorar fastlane. .env, .env.default, .env.development.

Sannan mun yanke shawarar yin amfani da wannan ɗakin karatu ɗan daban. Bari mu sanya a cikin ma'ajin masu haɓaka ba rubutun fastlane da bayanan meta ba, amma maɓallai na musamman na wannan aikace-aikacen a cikin fayil ɗin. .env.appName.

Kansu Fastfile, Appfile, Matchfile и Gymfile, mun boye shi a cikin wani ma'ajiyar daban. An ɓoye ƙarin fayil mai maɓallan kalmar sirri daga wasu ayyuka a wurin - .env.
Kuna iya ganin misali a nan.

Kwarewar CICD ta wayar hannu: mizanin fastlane ɗaya don aikace-aikacen hannu da yawa

A kan CI, kiran bai canza da yawa ba; an ƙara maɓallin daidaitawa don takamaiman aikace-aikacen:

# fastlane ios <lane_name> --env appName

$ fastlane ios build --env appName
$ fastlane ios test --env appName
$ fastlane ios run_sonar --env appName
$ fastlane ios deploy --env appName

Kafin gudanar da umarni, muna loda ma'ajiyar mu tare da rubutun. Ba yayi kyau sosai:

git clone [email protected]/FastlaneCICD.git fastlane_temp

cp ./fastlane_temp/fastlane/* ./fastlane/
cp ./fastlane_temp/fastlane/.env fastlane/.env

Bar wannan maganin a yanzu, kodayake Fastlane yana da mafita don zazzage Fastfile ta hanyar mataki import_from_git, amma yana aiki ne kawai don Fastfile, amma ba don wasu fayiloli ba. Idan kana son "kyakkyawan gaske", zaka iya rubuta naka action.

An yi irin wannan saitin don aikace-aikacen Android da ReactNative, fayilolin suna cikin ma'aji guda ɗaya, amma a cikin rassa daban-daban. iOS, android и react_native.

Lokacin da ƙungiyar sakin ke son ƙara wani sabon mataki, ana yin rikodin canje-canje a cikin rubutun ta hanyar MR a git, babu sauran buƙatar neman masu laifi na ruɓaɓɓen rubutun, kuma gabaɗaya, yanzu dole ne kuyi ƙoƙarin karya shi.

Yanzu shi ke nan tabbas

A baya can, mun ɓata lokaci don kula da duk rubutun, sabunta su da gyara duk sakamakon sabuntawa. Abin takaici ne sosai lokacin da dalilan kurakurai da raguwar lokaci a cikin sakewa sun kasance nau'ikan rubutu masu sauƙi waɗanda ke da wahalar kiyayewa a cikin jumble na rubutun harsashi. Yanzu irin waɗannan kurakurai an rage su zuwa ƙarami. Ana fitar da canje-canje ga duk aikace-aikacen lokaci guda. Kuma yana ɗaukar mintuna 15 don saka sabon aikace-aikacen a cikin tsari - saita bututun samfuri akan CI kuma ƙara maɓallan ma'ajiyar mai haɓakawa.

Da alama cewa batu tare da Fastfile don Android da sa hannun aikace-aikacen ya kasance ba a bayyana ba; idan labarin yana da ban sha'awa, zan rubuta ci gaba. Zan yi farin cikin ganin tambayoyinku ko shawarwarinku "ta yaya zaku magance wannan matsalar" a cikin sharhi ko akan Telegram bashkirova.

source: www.habr.com

Add a comment