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:
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.
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.
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:
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.
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.
Ntawm CI, kev hu tsis tau hloov pauv ntau; tus yuam sij teeb tsa rau ib daim ntawv thov tshwj xeeb tau ntxiv: