ʻIke Mobile CICD: hoʻokahi maʻamau maʻamau no nā polokalamu kelepona he nui
Makemake au e kamaʻilio e pili ana i ka hoʻohui mau ʻana a me ka lawe ʻana i nā polokalamu kelepona me ka hoʻohana ʻana i ka fastlane. Pehea mākou e hoʻokō ai i ka CI/CD ma nā polokalamu kelepona āpau, pehea mākou i hiki ai i laila a me ka mea i hana i ka hopena.
Ua lawa nā mea ma ka pūnaewele ma ka mea hana, a mākou i nele i ka hoʻomaka ʻana, no laila ʻaʻole wau e wehewehe kikoʻī i ka hāmeʻa, akā e kuhikuhi wale i ka mea i loaʻa iā mākou i kēlā manawa:
ʻO ke kumu i ka puka ʻana o ka mobile CI/CD i ka hui
Hoʻonā ʻenehana no ka ʻōwili ʻana i ka CI/CD no nā noi N
ʻO ka hapa mua ʻoi aku ka nostalgia no nā lā kahiko, a ʻo ka lua he ʻike hiki iā ʻoe ke hoʻopili iā ʻoe iho.
ʻO kēia ke ʻano o ka mōʻaukala
R “ѕѕѕґ 2015
Hoʻomaka wale mākou e hoʻomohala i nā noi kelepona, a laila ʻaʻole mākou i ʻike i kekahi mea e pili ana i ka hoʻohui mau ʻana, e pili ana i nā DevOps a me nā mea ʻē aʻe. Ua hoʻopuka ʻia kēlā me kēia noi noi e ka mea hoʻomohala iā ia iho mai kāna mīkini. A inā no ka Android he mea maʻalahi - hui ʻia, kau inoa ʻia .apk a hoʻouka iā ia i ka Google Developer Console, a laila no IOS ka mea hoʻolaha ma o Xcode i haʻalele iā mākou me nā ahiahi nui - hoʻāʻo e hoʻoiho i ka waihona i pau pinepine i nā hewa a pono mākou e hoʻāʻo hou. Ua ʻike ʻia ʻaʻole kākau ka mea hoʻomohala kiʻekiʻe i ka code i nā manawa he nui i ka mahina, akā hoʻokuʻu i ka noi.
R “ѕѕѕґ 2016
Ua ulu mākou, ua loaʻa iā mākou nā manaʻo e pili ana i ka hoʻokuʻu ʻana i nā mea hoʻomohala mai ka lā holoʻokoʻa no ka hoʻokuʻu ʻana, a ua ʻike pū ʻia kahi noi lua, ʻo ia wale nō ka mea i hoʻoikaika iā mākou i ka automation. I kēlā makahiki hoʻokahi, hoʻokomo mākou iā Jenkins no ka manawa mua a kākau i kahi pūʻulu o nā palapala weliweli, like loa me nā mea i hōʻike ʻia e fastlane i kāna palapala.
ʻO ka mea pōʻino, a hiki i kēia manawa ʻo kā mākou mea hoʻomohala wale nō i ʻike i ka hana ʻana o kēia mau palapala a me ke kumu e pono ai kēia pūʻulu kī pau ʻole, a i ka wā i haki hou ai kekahi mea, loaʻa iā lākou nā "pō nani" no ka nānā ʻana i nā lāʻau.
R “ѕѕѕґ 2017
I kēia makahiki ua aʻo mākou aia kekahi mea e like me ke ala wikiwiki. ʻAʻole nui ka ʻike e like me kēia manawa - pehea e hoʻomaka ai, pehea e hoʻohana ai. A ʻo ka hāmeʻa ponoʻī nō ka mea ʻino i kēlā manawa: ʻo nā hewa mau i hōʻino wale iā mākou a paʻakikī ke manaʻoʻiʻo i ka automation magic a lākou i hoʻohiki ai.
Eia nō naʻe, ʻo nā mea pono nui i hoʻokomo ʻia i ka core fastlane gym и pilot, ua hiki iā mākou ke hoʻomaka.
Ua hoʻomaikaʻi ʻia lākou, inā wale nō no ka mea ʻaʻole pono nā ʻāpana āpau xcodebuild, pono ʻoe e hōʻike - gym e hoʻomaopopo kūʻokoʻa i kahi a me ka mea e moe ai. A no ka hoʻoponopono maikaʻi ʻana, hiki iā ʻoe ke kuhikuhi i nā kī like e like me xcodebuild, ʻoi aku ka maopopo o ka inoa o nā kī.
I kēia manawa, mahalo i ka hale hauʻoli a me ka formatter xcpretty i kūkulu ʻia, ua ʻoi aku ka legible o nā papa hana. Ua hoʻomaka kēia e mālama i ka manawa ma ka hoʻoponopono ʻana i nā hui i haki, a i kekahi manawa hiki i ka hui hoʻokuʻu ke noʻonoʻo iā lākou iho.
ʻO ka pōʻino, nā ana wikiwiki o ka hui xcodebuild и gym ʻAʻole mākou i hana, akā e hilinaʻi mākou i ka palapala - a hiki i ka 30% wikiwiki.
Hoʻokahi kaʻina hana no nā noi āpau
ʻO ka makahiki 2018 a i kēia manawa
Ma ka 2018, ua neʻe loa ke kaʻina hana o ke kūkulu ʻana a me ka ʻōwili ʻana i nā noi iā Jenkins, ua kāpae nā mea hoʻomohala i ka hoʻokuʻu ʻana mai kā lākou mau mīkini, a ʻo ka hui hoʻokuʻu wale nō ke kuleana e hoʻokuʻu.
Ua makemake mua mākou e hoʻomaikaʻi i ka hoʻomaka ʻana o nā hoʻokolohua a me ka nānā ʻana, a ua ulu a ulu kā mākou mau palapala. Ua ulu a hoʻololi pū me kā mākou mau noi. I kēlā manawa, aia ma kahi o 10 mau noi. Ke noʻonoʻo nei he ʻelua mau kahua mākou, ʻo ia ka 20 mau palapala "ola".
I kēlā me kēia manawa a mākou e makemake ai e hoʻohui i kahi ʻanuʻu hou i ka palapala, pono mākou e kope-paʻi i nā ʻāpana i loko o nā ʻōkuhi shell āpau. Malia paha ua hiki iā mākou ke hana maʻalahi, akā ua pau nā hoʻololi i nā typos, i lilo i ahiahi no ka hui hoʻokuʻu e hoʻoponopono i nā palapala a ʻike i ke kanaka akamai i hoʻohui i kēia kauoha a me kāna hana maoli. Ma keʻano laulā, ʻaʻole hiki ke ʻōlelo ʻia he ʻano like nā palapala no ka hui ʻana no kahi kahua hoʻokahi. ʻOiai ua hana like lākou.
I mea e hoʻomaka ai i kahi kaʻina hana no kahi noi hou, pono e hoʻolilo i kahi lā e koho ai i kahi mana "hou" o kēia mau palapala, debug a ʻōlelo ʻia "ʻae, hana ia."
I ke kauwela o 2018, ua nānā hou mākou i ke ala wikiwiki e ulu nei.
Hana #1: hōʻuluʻulu i nā ʻanuʻu palapala āpau a kākau hou iā lākou ma Fastfile
I ko mākou hoʻomaka ʻana, ua like ko mākou mau palapala me he lole wāwae wāwae i loko o nā ʻanuʻu a me nā koʻokoʻo i loko o hoʻokahi palapala pūpū ma Jenkins. ʻAʻole mākou i hoʻololi i ka pipeline a me ka mahele ma ke kahua.
Ua nānā mākou i nā mea i loaʻa iā mākou a ʻike i nā ʻanuʻu 4 i kūpono i ka wehewehe ʻana o kā mākou CI / CD:
kūkulu - hoʻokomo i nā hilinaʻi, hoʻohui i ka waihona,
hoʻāʻo - e holo ana i nā hoʻāʻo ʻana o ka mea hoʻomohala, helu ʻana i ka uhi,
sonar - hoʻokuʻu i nā linter āpau a hoʻouna i nā hōʻike iā SonarQube,
deploy — hoʻouna i kahi mea kiʻi i ka alpha (TestFlight).
A inā ʻaʻole ʻoe e hele i nā kikoʻī, e haʻalele i nā kī i hoʻohana ʻia i nā hana, e loaʻa iā ʻoe kēia 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
ʻO kaʻoiaʻiʻo, ua lilo kā mākou Fastfile mua i mea weliweli, e noʻonoʻo ana i kekahi o nā koʻokoʻo e pono ai mākou a me ka helu o nā ʻāpana a mākou i hoʻololi ai:
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
Ma ka laʻana ma luna, he ʻāpana wale nō o nā ʻāpana e pono ai mākou e kuhikuhi: ʻo ia nā ʻāpana kūkulu - schema, hoʻonohonoho, Provision Profile inoa, a me nā ʻāpana hoʻoili - Apple ID o ka mea hoʻomohala, ʻōlelo huna, ID noi, a pēlā aku. ma. Ma ke ʻano he hoʻohālikelike mua, kau mākou i kēia mau kī āpau i nā faila kūikawā - Gymfile, Matchfile и Appfile.
I kēia manawa ma Jenkins hiki iā ʻoe ke kāhea i nā kauoha pōkole ʻaʻole e hoʻopuehu i ka ʻike a hiki ke heluhelu ʻia e ka maka:
He aha kāu i loaʻa ai? Holoi i nā kauoha no kēlā me kēia ʻanuʻu. Hoʻomaʻemaʻe ʻia nā palapala, hoʻonohonoho maikaʻi ʻia i nā faila fastlane. Me ka hauʻoli, holo mākou i nā mea hoʻomohala e noi ana iā lākou e hoʻohui i nā mea āpau e pono ai i kā lākou waihona.
Akā, ua ʻike mākou i ka manawa e hālāwai ai mākou i nā pilikia like - e loaʻa iā mākou he 20 mau palapala hōʻuluʻulu e hoʻomaka ai e ola i ko lākou ola ponoʻī, ʻoi aku ka paʻakikī o ka hoʻoponopono ʻana iā lākou, no ka mea, e neʻe nā palapala i nā waihona. a ʻaʻole hiki iā mākou ke komo i laila. A, ma ka laulā, ʻaʻole hiki ke hoʻoponopono i ko mākou ʻeha i kēia ala.
Hana #2: e kiʻi i hoʻokahi Fastfile no nā noi N
I kēia manawa, ʻaʻole paʻakikī loa ka hoʻoponopono ʻana i ka pilikia - e hoʻonohonoho i nā mea hoʻololi, a e hele kāua. ʻAe, ʻoiaʻiʻo, ʻo ia ka mea i hoʻoponopono ʻia ai ka pilikia. Akā i kēia manawa a mākou e hoʻopaʻa nei, ʻaʻohe o mākou akamai i ka fastlane ponoʻī, ʻaʻole hoʻi ma Ruby, kahi i kākau ʻia ai ka fastlane, ʻaʻole hoʻi nā hiʻohiʻona pono ma ka pūnaewele - ʻo nā mea a pau i kākau e pili ana i ka fastlane a laila ua kaupalena ʻia i kahi hiʻohiʻona no hoʻokahi noi. no hoʻokahi mea hoʻomohala.
Hiki iā Fastlane ke mālama i nā ʻano like ʻole, a ua hoʻāʻo mākou i kēia ma ka hoʻonohonoho ʻana i ka ʻōlelo huna Keychain:
ENV['KEYCHAIN_PASSWORD']
Ma hope o ka nānā ʻana i kā mākou palapala, ʻike mākou i nā ʻāpana maʻamau:
#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
I kēia manawa, i mea e hoʻomaka ai e hoʻohana i kēia mau kī i nā faila fastlane, pono mākou e noʻonoʻo pehea e hāʻawi ai iā lākou ma laila. Loaʻa iā Fastlane kahi hopena no kēia: ka hoʻouka ʻana i nā mea hoʻololi ma o dotenv. Wahi a ka palapala, inā he mea nui iā ʻoe ke hoʻouka i nā kī no nā kumu like ʻole, e hana i kekahi mau faila hoʻonohonoho i ka papa kuhikuhi fastlane. .env, .env.default, .env.development.
A laila ua hoʻoholo mākou e hoʻohana ʻokoʻa i kēia waihona. E waiho i loko o ka waihona o nā mea hoʻomohala ʻaʻole nā palapala wikiwiki a me kāna ʻike meta, akā nā kī kū hoʻokahi o kēia noi i ka faila. .env.appName.
Ōlelo Sami Fastfile, Appfile, Matchfile и Gymfile, ua hūnā mākou i loko o kahi waihona ʻokoʻa. Ua hūnā ʻia kahi faila hou me nā kī ʻōlelo huna mai nā lawelawe ʻē aʻe ma laila - .env.
Hiki iā ʻoe ke ʻike i kahi laʻana maanei.
Ma CI, ʻaʻole i loli nui ke kelepona; ua hoʻohui ʻia kahi kī hoʻonohonoho no kahi noi kikoʻī:
Haʻalele i kēia hoʻonā no kēia manawa, ʻoiai he hopena ko Fastlane no ka hoʻoiho ʻana iā Fastfile ma o hanaimport_from_git, akā hana wale ia no Fastfile, akā ʻaʻole no nā faila ʻē aʻe. Inā makemake ʻoe i "nani maoli", hiki iā ʻoe ke kākau iā ʻoe iho action.
Ua hana ʻia kahi hoʻonohonoho like no nā noi Android a me ReactNative, aia nā faila i ka waihona like, akā ma nā lālā like ʻole. iOS, android и react_native.
Ke makemake ka hui hoʻokuʻu e hoʻohui i kahi hana hou, ua hoʻopaʻa ʻia nā hoʻololi i ka palapala ma o MR ma git, ʻaʻohe pono e ʻimi i nā mea hewa o nā palapala haʻihaʻi, a ma ka laulā, pono ʻoe e hoʻāʻo e wāwahi.
ʻĀnō ʻo ia ka maopopo
Ma mua, ua hoʻohana mākou i ka manawa e mālama ai i nā palapala āpau, e hoʻomaikaʻi ana iā lākou a hoʻoponopono i nā hopena āpau o nā mea hou. He mea hoʻohaʻahaʻa loa ke kumu o ka hewa a me ka manawa haʻahaʻa i ka hoʻokuʻu ʻana he typos maʻalahi i paʻakikī loa ka mālama ʻana i ka jumble o nā palapala shell. I kēia manawa ua hoʻemi ʻia kēlā mau hewa i ka liʻiliʻi. Hoʻololi ʻia nā hoʻololi i nā noi āpau i ka manawa hoʻokahi. A he 15 mau minuke e hoʻokomo i kahi noi hou i ke kaʻina hana - hoʻonohonoho i kahi pipeline template ma CI a hoʻohui i nā kī i ka waihona o ka mea hoʻomohala.
Me he mea lā ʻaʻole i wehewehe ʻia ka helu me Fastfile no ka Android a me ka palapala noi; inā hoihoi ka ʻatikala, e kākau wau i kahi hoʻomau. E hauʻoli wau e ʻike i kāu mau nīnau a manaʻo paha "pehea ʻoe e hoʻoponopono ai i kēia pilikia" ma nā ʻōlelo a i ʻole ma Telegram bashkirova.