Mobile CICD kev paub: ib tus qauv fastlane rau ntau daim ntawv thov mobile

Mobile CICD kev paub: ib tus qauv fastlane rau ntau daim ntawv thov mobile
Kuv xav tham txog kev sib koom ua ke tsis tu ncua thiab xa mus rau mobile apps siv fastlane. Yuav ua li cas peb siv CI / CD ntawm txhua daim ntawv thov mobile, peb mus txog qhov twg thiab qhov tshwm sim thaum kawg.

Muaj twb muaj cov ntaub ntawv txaus nyob rau hauv lub network ntawm lub cuab yeej, uas peb thiaj li tsis muaj thaum pib, yog li kuv yuav txhob txwm tsis txhob piav txog lub cuab tam kom meej, tab sis yuav tsuas yog xa mus rau qhov peb muaj ces:

Kab lus muaj ob ntu:

  • Keeb kwm ntawm qhov tshwm sim ntawm mobile CI / CD hauv lub tuam txhab
  • Kev daws teeb meem rau dov tawm CI / CD rau N-daim ntawv thov

Qhov thib ib yog ntau nostalgia rau cov hnub qub, thiab qhov thib ob yog ib qho kev paub uas koj tuaj yeem siv rau koj tus kheej.

Qhov no yog li cas nws tshwm sim keeb kwm

Xyoo 2015

Peb nyuam qhuav pib tsim cov ntawv thov mobile, tom qab ntawd peb tsis paub dab tsi txog kev koom ua ke txuas ntxiv, hais txog DevOps thiab lwm yam khoom siv. Txhua daim ntawv thov hloov tshiab tau dov tawm los ntawm tus tsim tawm nws tus kheej los ntawm nws lub tshuab. Thiab yog tias rau Android nws yooj yim heev - sib sau ua ke, kos npe .apk thiab muab tso rau hauv Google Developer Console, tom qab ntawd rau iOS cov cuab yeej xa tawm ntawm Xcode tau tso peb nrog yav tsaus ntuj - sim rub tawm cov ntawv khaws cia feem ntau xaus rau qhov tsis raug thiab peb yuav tsum sim dua. Nws muab tawm tias tus tsim tawm tshaj plaws tsis sau cov lej ob peb zaug hauv ib hlis, tab sis tso tawm daim ntawv thov.

Xyoo 2016

Peb loj hlob tuaj, peb twb muaj kev xav txog yuav ua li cas pub dawb cov neeg tsim tawm los ntawm ib hnub rau kev tso tawm, thiab daim ntawv thov thib ob kuj tshwm sim, uas tsuas yog thawb peb ntau dua rau automation. Tib xyoo ntawd, peb tau teeb tsa Jenkins thawj zaug thiab tau sau ib pawg ntawm cov ntawv txaus ntshai, zoo ib yam li cov fastlane qhia hauv nws cov ntaub ntawv.

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

Hmoov tsis zoo, txog rau tam sim no tsuas yog peb cov neeg tsim khoom paub tias cov ntawv sau ua haujlwm li cas thiab vim li cas cov yuam sij tsis kawg no xav tau, thiab thaum muaj qee yam tawg dua, lawv tau txais "zoo nkauj yav tsaus ntuj" rau kev txheeb xyuas cov cav.

Xyoo 2017

Xyoo no peb kawm tau tias muaj ib yam xws li fastlane. Tsis muaj ntaub ntawv ntau npaum li tam sim no - yuav pib li cas, siv nws li cas. Thiab lub cuab yeej nws tus kheej tseem tsis zoo nyob rau lub sijhawm ntawd: qhov ua yuam kev tas li tsuas yog ua rau peb poob siab thiab nws nyuaj rau kev ntseeg hauv cov khoom siv dag zog uas lawv tau cog lus tseg.

Txawm li cas los xij, cov khoom siv tseem ceeb suav nrog hauv cov tub ntxhais fastlane yog gym ΠΈ pilot, peb tswj pib nws.

Peb cov ntawv sau tau raug txhim kho me ntsis.

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

Lawv tau raug txhim kho, yog tias tsuas yog vim tsis yog tag nrho cov tsis tsim nyog rau xcodebuild, koj yuav tsum qhia - gym nws tus kheej yuav nkag siab qhov twg thiab dab tsi dag. Thiab rau kev kho kom zoo dua, koj tuaj yeem teev cov yuam sij tib yam li hauv xcodebuild, tsuas yog lub npe ntawm cov yuam sij yog qhov tseeb dua.

Lub sij hawm no, ua tsaug rau lub gym thiab lub built-in xcpretty formatter, cov cav tsim tau dhau los ua ntau qhov tseeb. Qhov no tau pib txuag lub sijhawm ntawm kev kho cov rooj sib txoos tawg, thiab qee zaum pab pawg tso tawm tuaj yeem txiav txim siab ntawm lawv tus kheej.

Hmoov tsis, sib dhos ceev ntsuas xcodebuild ΠΈ gym Peb tsis tau ua, tab sis peb yuav ntseeg cov ntaub ntawv - txog li 30% nrawm.

Ib txheej txheem rau txhua daim ntawv thov

Xyoo 2018 thiab tam sim no

Los ntawm 2018, cov txheej txheem ntawm kev tsim thiab dov tawm daim ntawv thov tag nrho tsiv mus rau Jenkins, cov neeg tsim khoom tau tso tseg los ntawm lawv lub tshuab, thiab tsuas yog pab pawg tso tawm muaj cai tso tawm.

Peb twb xav txhim kho lub community launch txog kev ntsuam xyuas thiab kev soj ntsuam zoo li qub, thiab peb cov ntawv sau tau loj hlob tuaj. Loj hlob thiab hloov nrog peb cov ntawv thov. Lub sijhawm ntawd, muaj txog 10 daim ntawv thov. Xav tias peb muaj ob lub platform, uas yog hais txog 20 "nyob" scripts.

Txhua zaus peb xav ntxiv cov kauj ruam tshiab rau tsab ntawv, peb yuav tsum luam-muab cov ntawv rau hauv tag nrho cov ntawv plhaub. Tej zaum peb tuaj yeem ua haujlwm zoo dua, tab sis feem ntau cov kev hloov pauv no tau xaus rau hauv typos, uas tig mus rau yav tsaus ntuj rau pab pawg tso tawm los kho cov ntawv sau thiab nrhiav seb tus txiv neej ntse twg ntxiv cov lus txib no thiab qhov nws ua tau tiag tiag. Feem ntau, nws tsis tuaj yeem hais tias cov ntawv sau rau kev sib dhos rau ib lub platform tsawg kawg yog qhov zoo sib xws. Txawm hais tias lawv yeej ua tib yam nkaus.

Txhawm rau pib txheej txheem rau daim ntawv thov tshiab, nws yuav tsum siv sijhawm ib hnub los xaiv "tshiab" version ntawm cov ntawv no, kho nws thiab hais tias "yog, nws ua haujlwm."

Nyob rau lub caij ntuj sov ntawm 2018, peb ib zaug dua saib mus rau qhov tseem tab tom tsim fastlane.

Txoj Haujlwm # 1: sau tag nrho cov kauj ruam tsab ntawv thiab rov sau lawv hauv Fastfile

Thaum peb pib, peb cov ntawv sau zoo li daim ntaub hneev taw uas muaj tag nrho cov kauj ruam thiab cov cuab yeej hauv ib lub plhaub ntawv hauv Jenkins. Peb tseem tsis tau hloov mus rau cov raj xa dej thiab faib los ntawm theem.

Peb tau saib qhov peb muaj thiab txheeb xyuas 4 cov kauj ruam uas haum cov lus piav qhia ntawm peb CI / CD:

  • tsim - txhim kho kev vam meej, sib sau ua ke cov ntaub ntawv,
  • test β€” khiav cov kev ntsuam xyuas tsim tawm, suav cov kev pab them nqi kho mob,
  • sonar - xa tawm tag nrho cov linters thiab xa cov ntawv ceeb toom rau SonarQube,
  • xa tawm - xa cov khoom cuav rau alpha (TestFlight).

Thiab yog tias koj tsis mus rau hauv cov ntsiab lus, tshem tawm cov yuam sij siv hauv kev ua, koj yuav tau txais Fastfile no:

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

Qhov tseeb, peb thawj Fastfile tau dhau los ua qhov tsis txaus ntseeg, xav txog qee qhov ntawm cov ntoo khaub lig uas peb tseem xav tau thiab tus lej ntawm qhov tsis sib xws uas peb hloov pauv:

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

Hauv qhov piv txwv saum toj no, tsuas yog ib feem ntawm cov kev txwv uas peb yuav tsum tau qhia: cov no yog cov kev tsim tsis tau - schema, configuration, Provision Profile npe, nrog rau kev faib tsis - Apple ID ntawm tus tsim tawm account, password, daim ntawv thov ID, thiab lwm yam. ntawm. Raws li kev kwv yees thawj zaug, peb muab tag nrho cov yuam sij no tso rau hauv cov ntaub ntawv tshwj xeeb - Gymfile, Matchfile ΠΈ Appfile.

Tam sim no hauv Jenkins koj tuaj yeem hu cov lus txib luv luv uas tsis plam qhov pom thiab yooj yim nyeem tau los ntawm lub qhov muag:

# fastlane ios <lane_name>

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

Hurr, peb zoo heev

Koj tau txais dab tsi? Clear cov lus txib rau txhua kauj ruam. Ntxuav cov ntawv sau, ua kom zoo nkauj hauv cov ntaub ntawv fastlane. Zoo siab, peb tau khiav mus rau cov neeg tsim khoom thov kom lawv ntxiv txhua yam lawv xav tau rau lawv qhov chaw cia khoom.

Tab sis peb twb paub lawm hais tias nyob rau hauv lub sij hawm uas peb yuav ntsib ib yam nyuaj nyuaj - peb tseem yuav muaj 20 lub rooj sib txoos scripts uas yuav ib txoj kev los yog lwm yam pib nyob rau hauv lawv tus kheej lub neej, nws yuav nyuaj dua los hloov lawv, txij li thaum cov ntawv yuav txav mus rau repositories, thiab peb tsis tau nkag mus rau ntawd. Thiab, feem ntau, nws yuav daws tsis tau peb qhov mob li no.

Mobile CICD kev paub: ib tus qauv fastlane rau ntau daim ntawv thov mobile

Txoj Haujlwm # 2: tau txais ib qho Fastfile rau N daim ntawv thov

Tam sim no nws zoo nkaus li tias kev daws qhov teeb meem tsis yog qhov nyuaj - teeb tsa cov kev hloov pauv, thiab cia peb mus. Yog, qhov tseeb, qhov ntawd yog qhov teeb meem tau daws. Tab sis lub sijhawm thaum peb tab tom rub nws, peb tsis muaj kev txawj ntse hauv fastlane nws tus kheej, lossis hauv Ruby, uas tau sau cov fastlane, los yog cov piv txwv muaj txiaj ntsig hauv lub network - txhua tus neeg uas sau txog fastlane tom qab ntawd tsuas yog ua piv txwv rau ib daim ntawv thov. rau ib tus tsim tawm.

Fastlane tuaj yeem tswj hwm qhov hloov pauv ib puag ncig, thiab peb twb sim qhov no los ntawm kev teeb tsa Keychain password:

ENV['KEYCHAIN_PASSWORD']

Tom qab saib peb cov ntawv sau, peb txheeb xyuas qhov sib xws:

#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

Tam sim no, txhawm rau pib siv cov yuam sij no hauv cov ntaub ntawv fastlane, peb yuav tsum paub seb yuav xa lawv li cas rau ntawd. Fastlane muaj kev daws teeb meem rau qhov no: loading variables ntawm dotenv. Cov ntaub ntawv hais tias yog tias nws yog ib qho tseem ceeb rau koj thauj cov yuam sij rau ntau lub hom phiaj, tsim ntau cov ntaub ntawv teeb tsa hauv phau ntawv ceev ceev .env, .env.default, .env.development.

Thiab tom qab ntawd peb txiav txim siab siv lub tsev qiv ntawv no txawv me ntsis. Cia peb tso rau hauv cov neeg tsim khoom 'repository tsis yog cov ntawv sau nrawm thiab nws cov ntaub ntawv meta, tab sis cov yuam sij tshwj xeeb ntawm daim ntawv thov no hauv cov ntaub ntawv .env.appName.

Lawv tus kheej Fastfile, Appfile, Matchfile ΠΈ Gymfile, peb muab zais rau hauv ib lub repository cais. Ib cov ntaub ntawv ntxiv nrog tus lej password los ntawm lwm cov kev pabcuam tau muab zais rau ntawd - .env.
Koj tuaj yeem pom ib qho piv txwv no.

Mobile CICD kev paub: ib tus qauv fastlane rau ntau daim ntawv thov mobile

Ntawm CI, kev hu tsis tau hloov pauv ntau; tus yuam sij teeb tsa rau ib daim ntawv thov tshwj xeeb tau ntxiv:

# 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

Ua ntej khiav cov lus txib, peb thauj peb lub chaw cia khoom nrog cov ntawv sau. Tsis zoo li zoo:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

Sab laug qhov kev daws teeb meem rau tam sim no, txawm tias Fastlane muaj kev daws teeb meem rau rub tawm Fastfile ntawm txiav txim import_from_git, tab sis nws tsuas yog ua haujlwm rau Fastfile, tab sis tsis yog rau lwm cov ntaub ntawv. Yog tias koj xav "zoo nkauj heev", koj tuaj yeem sau koj tus kheej action.

Cov txheej txheem zoo sib xws tau tsim rau Android daim ntawv thov thiab ReactNative, cov ntaub ntawv nyob hauv tib lub chaw cia khoom, tab sis nyob rau hauv cov ceg sib txawv iOS, android ΠΈ react_native.

Thaum pab neeg tso tawm xav ntxiv qee cov kauj ruam tshiab, cov kev hloov pauv hauv tsab ntawv tau sau tseg ntawm MR hauv git, tsis tas yuav tsum nrhiav tus neeg ua txhaum ntawm cov ntawv tawg, thiab feem ntau, tam sim no koj yuav tsum sim ua txhaum nws.

Tam sim no uas yog qhov tseeb

Yav dhau los, peb tau siv sijhawm los tswj tag nrho cov ntawv sau, hloov kho lawv thiab kho tag nrho cov txiaj ntsig ntawm kev hloov tshiab. Nws yog qhov kev poob siab heev thaum cov laj thawj rau qhov tsis raug thiab lub sijhawm poob hauv kev tshaj tawm yog qhov yooj yim typos uas nyuaj heev kom taug qab hauv kev sib tw ntawm cov ntawv plhaub. Tam sim no cov kev ua yuam kev no raug txo kom tsawg. Cov kev hloov pauv tau muab tso rau txhua daim ntawv thov ib zaug. Thiab nws yuav siv sij hawm 15 feeb los tso ib daim ntawv thov tshiab rau hauv cov txheej txheem - teeb tsa ib lub raj xa dej ntawm CI thiab ntxiv cov yuam sij rau tus tsim tawm lub chaw cia khoom.

Nws zoo nkaus li qhov taw tes nrog Fastfile rau Android thiab daim ntawv thov kos npe tseem tsis tau piav qhia; yog tias tsab xov xwm nthuav dav, kuv yuav sau txuas ntxiv. Kuv yuav zoo siab pom koj cov lus nug lossis cov lus qhia "koj yuav daws qhov teeb meem no li cas" hauv cov lus lossis hauv Telegram bashkirova.

Tau qhov twg los: www.hab.com

Ntxiv ib saib