Isipiliyoni se-CICD yeselula: indinganiso eyodwa ye-fastlane yezinhlelo zokusebenza eziningi zeselula

Isipiliyoni se-CICD yeselula: indinganiso eyodwa ye-fastlane yezinhlelo zokusebenza eziningi zeselula
Ngingathanda ukukhuluma ngokuhlanganisa okuqhubekayo nokulethwa kwezinhlelo zokusebenza zeselula zisebenzisa i-fastlane. Siyisebenzisa kanjani i-CI/CD kuzo zonke izinhlelo zokusebenza zeselula, ukuthi safika kanjani lapho nokuthi kwenzekeni ekugcineni.

Sekuvele kunento eyanele kunethiwekhi ethuluzini, ebesingenalo kangako ekuqaleni, ngakho-ke ngeke ngamabomu ngichaze ithuluzi ngokuningiliziwe, kodwa ngizobhekisa kuphela kulokho esasinakho ngaleso sikhathi:

I-athikili inezingxenye ezimbili:

  • Isendlalelo sokuvela kwe-CI/CD yeselula enkampanini
  • Isixazululo sobuchwepheshe sokukhipha i-CI/CD yezinhlelo zokusebenza ze-N

Ingxenye yokuqala i-nostalgia eyengeziwe yezinsuku zakudala, kanti eyesibili isipiliyoni ongasisebenzisa kuwena.

Kwenzeka kanjena ngokomlando

Unyaka ka-2015

Sisanda kuqala ukuthuthukisa izinhlelo zokusebenza zeselula, ngakho-ke sasingazi lutho mayelana nokuhlanganiswa okuqhubekayo, mayelana ne-DevOps nezinye izinto zemfashini. Isibuyekezo ngasinye sohlelo lokusebenza sakhishwa unjiniyela ngokwakhe emshinini wakhe. Futhi uma ku-Android kulula kakhulu - kuhlanganiswe, kusayinwe .apk futhi sayilayisha ku-Google Developer Console, bese ku-iOS ithuluzi lokusabalalisa ngaleso sikhathi nge-Xcode lisishiye nobusuku obuhle - imizamo yokulanda ingobo yomlando ngokuvamile igcina ngamaphutha futhi kudingeke ukuthi sizame futhi. Kuvele ukuthi umthuthukisi othuthuke kakhulu akabhali ikhodi izikhathi eziningana ngenyanga, kodwa kunalokho ukhulula uhlelo lokusebenza.

Unyaka ka-2016

Sakhula, sase sinemicabango yokuthi singabakhulula kanjani abathuthukisi usuku lonke ukuze bakhululwe, futhi kwavela nesicelo sesibili, esisiphushele kakhulu ekuzishintsheni. Ngawo lowo nyaka, safaka i-Jenkins okokuqala futhi sabhala inqwaba yemibhalo esabekayo, efana kakhulu naleyo eboniswa yi-fastlane emibhalweni yayo.

$ 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"

Ngeshwa, kuze kube manje abathuthukisi bethu kuphela abazi ukuthi le mibhalo isebenza kanjani nokuthi kungani lesi sitaki esingapheli sokhiye sidingeka, futhi lapho okuthile kuphuka futhi, bathola β€œubusuku obuhle” bokuhlaziya izingodo.

Unyaka ka-2017

Kulo nyaka sifunde ukuthi kunento ebizwa nge-fastlane. Belungekho ulwazi oluningi njengoba lukhona manje - ukuthi ungaluqala kanjani, ulusebenzisa kanjani. Futhi ithuluzi ngokwalo lalisangcolile ngaleso sikhathi: amaphutha aqhubekayo ayemane asidumaze futhi kwakunzima ukukholelwa ku-automation yemilingo ababeyithembisile.

Kodwa-ke, izinsiza eziyinhloko ezifakwe kumongo we-fastlane ziyi gym ΠΈ pilot, sakwazi ukuyiqala.

Imibhalo yethu ithuthukiswe kancane.

$ fastlane gym  β€”-workspace "Example.xcworkspace" 
                --scheme "AppName" 
                β€”-buildlog_path "/tmp" 
                -β€”clean

Athuthukisiwe, uma nje kungewona wonke amapharamitha adingekayo xcodebuild, udinga ukukhombisa - gym uzoqonda ngokuzimela ukuthi kulele kuphi nokuthi kuyini. Futhi ukuze ulungise kahle, ungacacisa okhiye abafanayo nabaku-in xcodebuild, ukuqanjwa kwezikhiye kuphela okucace kakhudlwana.

Kulokhu, ngenxa yejimu kanye nefomethi ye-xcpretty eyakhelwe ngaphakathi, izingodo zokwakha sezifundeke kakhulu. Lokhu kwaqala ukonga isikhathi ekulungiseni imihlangano ephukile, futhi ngezinye izikhathi ithimba labakhululayo lalikwazi ukuzitholela lona ngokwalo.

Ngeshwa, izilinganiso zesivinini somhlangano xcodebuild ΠΈ gym Asikwenzanga, kodwa sizowethemba amadokhumenti - ukusheshisa okungafika ku-30%.

Inqubo eyodwa yazo zonke izinhlelo zokusebenza

Unyaka ka-2018 namanje

Ngo-2018, inqubo yokwakha nokukhipha izicelo ithuthelwe ngokuphelele ku-Jenkins, abathuthukisi bayeka ukukhulula emishinini yabo, futhi yiqembu lokukhululwa kuphela elinelungelo lokukhulula.

Besivele sifuna ukuthuthukisa ukwethulwa kwezivivinyo nokuhlaziya okumile, futhi imibhalo yethu yakhula futhi yakhula. Yakhula futhi yashintsha kanye nezicelo zethu. Ngaleso sikhathi, kwakukhona izicelo ezingaba ngu-10. Uma kucatshangelwa ukuthi sinezinkundla ezimbili, lokho kuyimibhalo engama-20 "ephilayo".

Ngaso sonke isikhathi lapho sifuna ukwengeza isinyathelo esisha embhalweni, kwakudingeka sikopishe-sinamathisele izingcezu kuzo zonke izikripthi zegobolondo. Mhlawumbe ngabe sisebenze ngokucophelela, kodwa ngokuvamile izinguquko ezinjalo ziphela ngamaphutha, aphenduke ubusuku ukuze iqembu labakhululayo lilungise imibhalo futhi lithole ukuthi yimuphi umfana ohlakaniphile owengeze lo myalo nokuthi lenzani ngempela. Ngokuvamile, angeke kushiwo ukuthi imibhalo yokuhlanganisa yesikhulumi esisodwa yayicishe ifane. Nakuba ngokuqinisekile benza into efanayo.

Ukuze uqale inqubo yesicelo esisha, bekudingeka ukuchitha usuku ukuze ukhethe inguqulo β€œentsha” yale mibhalo, uyisuse futhi uthi β€œyebo, iyasebenza.”

Ehlobo lika-2018, siphinde sabheka ku-fastlane esathuthuka.

Umsebenzi #1: fingqa zonke izinyathelo zombhalo bese uzibhala kabusha ku-Fastfile

Lapho siqala, imibhalo yethu yayibukeka njengendwangu yezinyawo ehlanganisa zonke izinyathelo nezinduku zombhalo wegobolondo elilodwa kuJenkins. Okwamanje asikashintsheli emapayipini nasekuhlukaniseni ngezigaba.

Sibheke esinakho futhi sahlonza izinyathelo ezi-4 ezifanele incazelo ye-CI/CD yethu:

  • ukwakha - ukufaka okuncike, ukuhlanganisa ingobo yomlando,
  • test - sebenzisa ukuhlolwa kweyunithi kanjiniyela, ukubala ukumbozwa,
  • i-sonar - yethula wonke ama-linters futhi ithumela imibiko ku-SonarQube,
  • deploy β€” ukuthumela i-artifact ku-alpha (TestFlight).

Futhi uma ungangeni emininingwaneni, ushiya okhiye abasetshenziswa ezenzweni, uzothola le 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

Eqinisweni, i-Fastfile yethu yokuqala yaphenduka yaba yimbi, uma kubhekwa ezinye zezinduku ebesisazidinga kanye nenani lamapharamitha esiwashintshile:

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

Kulesi sibonelo esingenhla, ingxenye kuphela yamapharamitha esidinga ukuwacacisa: lawa amapharamitha wokwakha - i-schema, ukumisa, amagama wePhrofayela yokuhlinzeka, kanye nemingcele yokusabalalisa - I-Apple ID ye-akhawunti kanjiniyela, iphasiwedi, i-ID yohlelo lokusebenza, nokunye. ku. Njengesilinganiso sokuqala, sibeka zonke lezi zikhiye kumafayela akhethekile - Gymfile, Matchfile ΠΈ Appfile.

Manje ku-Jenkins ungabiza imiyalo emifushane engafiphazi ukubuka futhi ifundeka kalula ngeso:

# fastlane ios <lane_name>

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

Hurray, sibahle

Utholeni? Sula imiyalo yesinyathelo ngasinye. Izikripthi ezihlanziwe, ezihlelwe kahle ngamafayili e-fastlane. Sijabule, sigijimele konjiniyela sibacela ukuthi bengeze konke abakudingayo kumakhosombe abo.

Kodwa sabona ngokuhamba kwesikhathi ukuthi sizobhekana nobunzima obufanayo - sisazoba nemibhalo yemihlangano engama-20 engaqala ngandlela thize ukuphila izimpilo zabo, kuzoba nzima kakhulu ukuyihlela, ngoba imibhalo izohamba iye kumakhosombe, futhi asikwazanga ukufinyelela lapho. Futhi, ngokuvamile, ngeke kwenzeke ukuxazulula ubuhlungu bethu ngale ndlela.

Isipiliyoni se-CICD yeselula: indinganiso eyodwa ye-fastlane yezinhlelo zokusebenza eziningi zeselula

Umsebenzi #2: thola iFastfile eyodwa yezinhlelo zokusebenza ze-N

Manje kubonakala sengathi ukuxazulula inkinga akunzima kangako - setha okuguquguqukayo, futhi ake sihambe. Yebo, empeleni, yileyondlela inkinga eyaxazululwa ngayo. Kepha ngaleso sikhathi lapho sisakuphenya, besingenabo ubungcweti ku-fastlane uqobo, noma kuRuby, lapho kubhalwe khona i-fastlane, noma izibonelo eziwusizo kunethiwekhi - wonke umuntu obhale nge-fastlane wabe elinganiselwe esibonelweni sohlelo lokusebenza olulodwa. kunjiniyela oyedwa.

I-Fastlane ingakwazi ukuphatha okuguquguqukayo kwemvelo, futhi sesivele sikuzamile lokhu ngokusetha iphasiwedi ye-Keychain:

ENV['KEYCHAIN_PASSWORD']

Ngemva kokubheka imibhalo yethu, sihlonze izingxenye ezivamile:

#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

Manje, ukuze siqale ukusebenzisa lezi zihluthulelo kumafayela e-fastlane, bekufanele sithole ukuthi singawahambisa kanjani lapho. I-Fastlane inesixazululo salokhu: ukulayisha okuguquguqukayo nge-dotenv. Imibhalo ithi uma kubalulekile kuwe ukuthi ulayishe okhiye ngezinhloso ezahlukene, dala amafayela wokucushwa amaningana kumkhombandlela we-fastlane. .env, .env.default, .env.development.

Sabe sesinquma ukusebenzisa lo mtapo wezincwadi ngendlela ehlukile. Masibeke endaweni yokugcina yonjiniyela hhayi imibhalo ye-fastlane nolwazi lwayo lwe-meta, kodwa okhiye abahlukile balolu hlelo lokusebenza kufayela. .env.appName.

Bona uqobo Fastfile, Appfile, Matchfile ΠΈ Gymfile, sayifihla endaweni yokugcina ehlukile. Ifayela elengeziwe elinokhiye bephasiwedi kwezinye izinkonzo lalifihlwe lapho - .env.
Ungabona isibonelo lapha.

Isipiliyoni se-CICD yeselula: indinganiso eyodwa ye-fastlane yezinhlelo zokusebenza eziningi zeselula

Ku-CI, ucingo alukashintshi kakhulu; ukhiye wokumisa wohlelo oluthile ungeziwe:

# 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

Ngaphambi kokusebenzisa imiyalo, silayisha inqolobane yethu ngemibhalo. Akubukeki kukuhle kakhulu:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Ushiye lesi sixazululo okwamanje, nakuba i-Fastlane inesixazululo sokulanda i-Fastfile nge isenzo import_from_git, kodwa isebenza kuphela ku-Fastfile, kodwa hhayi kwamanye amafayela. Uma ufuna "omuhle ngempela", ungabhala ngokwakho action.

Isethi efanayo yenzelwe izinhlelo zokusebenza ze-Android kanye ne-ReactNative, amafayela asendaweni efanayo, kodwa emagatsheni ahlukene. iOS, android ΠΈ react_native.

Lapho ithimba lokukhululwa lifuna ukwengeza isinyathelo esisha, izinguquko kuskripthi zirekhodwa nge-MR ku-git, asikho isidingo sokubheka izigebengu zemibhalo ephukile, futhi ngokuvamile, manje kufanele uzame ukuyiphula.

Manje yilokho impela

Ngaphambilini, sasichitha isikhathi sigcina yonke imibhalo, siyibuyekeza futhi silungisa yonke imiphumela yezibuyekezo. Kwakudumaza kakhulu lapho izizathu zamaphutha kanye nesikhathi sokuphumula ekukhishweni kuyizinhlamvu ezilula okwakunzima kakhulu ukugcina umkhondo ku-jumble yemibhalo yegobolondo. Manje amaphutha anjalo ancishiswa abe okungenani. Izinguquko zikhishwa kuzo zonke izinhlelo zokusebenza ngesikhathi esisodwa. Futhi kuthatha imizuzu engu-15 ukufaka isicelo esisha enqubweni - setha ipayipi lesifanekiso ku-CI futhi wengeze okhiye endaweni yokugcina kanjiniyela.

Kubonakala sengathi iphuzu nge-Fastfile ye-Android nesiginesha yohlelo lokusebenza lihlala lingachazwa; uma i-athikili ithakazelisa, ngizobhala ukuqhubeka. Ngingajabula ukubona imibuzo noma iziphakamiso zakho "ungayixazulula kanjani le nkinga" kumazwana noma kuTelegram bashkirova.

Source: www.habr.com

Engeza amazwana