ProHoster > Blog > башкаруу > Мобилдик CICD тажрыйбасы: көптөгөн мобилдик тиркемелер үчүн бир ылдам стандарт
Мобилдик CICD тажрыйбасы: көптөгөн мобилдик тиркемелер үчүн бир ылдам стандарт
Мен fastlane аркылуу мобилдик колдонмолор үчүн үзгүлтүксүз интеграция жана жеткирүү жөнүндө айткым келет. Бардык мобилдик тиркемелерде CI/CDди кантип ишке ашырабыз, ал жерге кантип жеттик жана аягында эмне болду.
Тармакта куралда жетиштүү материал бар, ага биз башында жетишпей калганбыз, ошондуктан мен атайын куралды майда-чүйдөсүнө чейин сүрөттөбөйм, бирок бизде болгон нерселерге гана кайрылам:
Компанияда мобилдик CI/CDдин пайда болушуна негиздер
N-тиркемелер үчүн CI/CD чыгаруу үчүн техникалык чечим
Биринчи бөлүгү эски күндөр үчүн көбүрөөк ностальгия, ал эми экинчиси өзүңүзгө колдоно турган тажрыйба.
Тарыхый жактан ушундай болгон
жыл 2015
Биз жаңы эле мобилдик тиркемелерди иштеп чыга баштадык, андан кийин үзгүлтүксүз интеграция, DevOps жана башка модалуу нерселер жөнүндө эч нерсе билген эмеспиз. Ар бир тиркеменин жаңыртылышын иштеп чыгуучу өзү өзүнүн машинасынан чыгарган. Ал эми Android үчүн бул абдан жөнөкөй болсо - чогултулган, кол коюлган .apk жана аны Google Иштеп чыгуучу Консолуна жүктөдү, андан кийин iOS үчүн Xcode аркылуу таратуу куралы бизге сонун кечтерди калтырды - архивди жүктөп алуу аракеттери көбүнчө каталар менен аяктап, кайра аракет кылууга туура келди. Көрсө, эң алдыңкы иштеп чыгуучу айына бир нече жолу код жазбайт, тескерисинче, тиркемени чыгарат.
жыл 2016
Биз чоңойдук, бизде иштеп чыгуучуларды бир күн бою чыгаруу үчүн кантип бошотсо болот деген ойлор бар болчу, экинчи тиркеме да пайда болду, бул бизди автоматташтырууга көбүрөөк түрттү. Ошол эле жылы биз Дженкинсти биринчи жолу орноттук жана fastlane анын документтеринде көрсөткөн сценарийлерге абдан окшош бир топ коркунучтуу сценарийлерди жаздык.
Тилекке каршы, ушул убакка чейин биздин иштеп чыгуучулар гана бул скрипттер кантип иштээрин жана эмне үчүн бул чексиз баскычтар керек экенин билишчү жана бир нерсе кайра бузулганда, журналдарды талдоо үчүн "сонун кечтерге" ээ болушту.
жыл 2017
Быйыл биз фастлейн деген нерсе бар экенин билдик. Азыркыдай көп маалымат жок болчу - кантип баштоо керек, аны кантип колдонуу керек. Жана куралдын өзү ал кезде дагы эле чийки болчу: дайыма каталар бизди капа кылды жана алар убада кылган сыйкырдуу автоматташтырууга ишенүү кыйын болчу.
Бирок, fastlane өзөгүнө киргизилген негизги коммуналдык болуп саналат gym и pilot, биз аны баштоого жетиштик.
Алар жакшыртылган, анткени бардык зарыл болгон параметрлер жок xcodebuild, көрсөтүү керек - gym кайда жана эмне экенин өз алдынча түшүнөт. Жана дагы жакшыраак жөндөө үчүн, сиз ошол эле баскычтарды көрсөтсөңүз болот xcodebuild, баскычтардын аталышы гана айкыныраак.
Бул жолу, спорт залдын жана орнотулган xcpretty форматтоочунун аркасында, куруу журналдары бир топ түшүнүктүү болуп калды. Бул бузулган жыйындарды оңдоого убакытты үнөмдөй баштады, кээде релиз тобу муну өз алдынча чече алган.
Тилекке каршы, чогултуу ылдамдыгы өлчөө xcodebuild и gym Биз муну кылган жокпуз, бирок биз документтерге ишенебиз - 30% га чейин ылдамдык.
Бардык колдонмолор үчүн бирдиктүү процесс
2018-жыл жана азыркы учур
2018-жылга карата тиркемелерди куруу жана жайылтуу процесси толугу менен Дженкинске өттү, иштеп чыгуучулар машиналарынан чыгарууну токтотушту жана чыгаруу тобу гана чыгарууга укуктуу.
Биз буга чейин эле тесттерди жана статикалык анализди ишке киргизүүнү жакшырткыбыз келген жана скрипттерибиз өсүп, өскөн. Биздин колдонмолор менен бирге өсүп, өзгөрдү. Ал убакта бизде эки платформа бар экенин эске алганда, 10га жакын "тирүү" скрипттер бар.
Скриптке жаңы кадам кошкубуз келген сайын, бөлүктөрүн бардык кабык скрипттерине көчүрүп чапташыбыз керек болчу. Балким, биз кылдаттык менен иштей алмакпыз, бирок көп учурда мындай өзгөртүүлөр каталар менен аяктады, алар релиз тобу үчүн скрипттерди оңдоп, кайсы акылдуу жигит бул буйрукту кошконун жана ал эмне кылганын билүү үчүн кечке айланган. Жалпысынан алганда, бир платформа үчүн скрипттер, жок эле дегенде, бир аз окшош болгон деп айтууга болбойт. Алар, албетте, бир эле нерсени кылышкан да.
Жаңы тиркеменин жараянын баштоо үчүн, бул скрипттердин "жаңы" версиясын тандап, аны оңдоого жана "ооба, иштейт" деп айтууга бир күн сарптоо керек болчу.
2018-жылдын жайында, биз дагы бир жолу дагы эле өнүгүп келе жаткан фастлейнди карадык.
№1 тапшырма: бардык скрипт кадамдарын жыйынтыктап, аларды Fastfileде кайра жазыңыз
Биз баштаганда, биздин сценарийлер Дженкинстеги бир кабык скриптиндеги бардык кадамдардан жана балдактардан турган бут кийимдей көрүндү. Азырынча куурга жана этап боюнча бөлүүгө өтө элекпиз.
Бизде эмне бар экенин карап чыктык жана CI/CDнин сүрөттөлүшүнө дал келген 4 кадамды аныктадык:
куруу - көз карандылыкты орнотуу, архивди чогултуу,
тест — иштеп чыгуучу бирдиктин тесттерин жүргүзүү, камтууну эсептөө,
sonar - бардык линтерлерди ишке киргизет жана SonarQubeге отчетторду жөнөтөт,
Эгер сиз аракеттерде колдонулган баскычтарды калтырбай, майда-чүйдөсүнө чейин кирбесеңиз, бул 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
Чынында, биздин биринчи Fastfile, бизге дагы деле керек болгон кээ бир балдактарды жана биз алмаштырган параметрлердин санын эске алганда, укмуштуудай болуп чыкты:
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
Жогорудагы мисалда биз такташыбыз керек болгон параметрлердин бир бөлүгү гана: булар куруу параметрлери - схема, конфигурация, Профилдин аттары, ошондой эле бөлүштүрүү параметрлери - иштеп чыгуучунун эсебинин Apple ID, сырсөз, колдонмо ID ж.б. күйүк. Биринчи болжолдоо катары, биз бул ачкычтарды атайын файлдарга койдук - Gymfile, Matchfile и Appfile.
Эми Дженкинсте сиз көрүнүштү бүдөмүк кылбаган жана көзгө оңой окула турган кыска буйруктарды чакырсаңыз болот:
Эмне алдыңыз? Ар бир кадам үчүн буйруктарды тазалоо. Тазаланган скрипттер, fastlane файлдарында тыкан жайгаштырылган. Кубанып, биз иштеп чыгуучуларга чуркап барып, алардан керектүү нерселердин бардыгын репозиторийлерине кошууну сурандык.
Бирок биз убакыттын өтүшү менен ошол эле кыйынчылыктарга дуушар болорун түшүндүк - бизде дагы 20 монтаж сценарийи болот, алар тигил же бул жол менен өз жашоосун башташат, аларды оңдоо кыйыныраак болот, анткени сценарийлер репозиторийлерге көчүп, жана биз ал жакка кире алган жокпуз. Ал эми жалпысынан биздин дартыбызды минтип чечүү мүмкүн эмес.
№2 тапшырма: N тиркемелери үчүн бир Fastfile алыңыз
Эми маселени чечүү анча деле кыйын эмес окшойт – өзгөрмөлөрдү коюп, анан кетели. Ооба, чындыгында, маселе ушундай чечилди. Бирок биз аны бузуп койгон учурда, бизде fastlane боюнча да, фастлейн жазылган Rubyде да, тармакта пайдалуу мисалдар да болгон эмес - анда fastlane жөнүндө жазгандардын баары бир тиркеме үчүн мисал менен чектелген. бир иштеп чыгуучу.
Fastlane чөйрө өзгөрмөлөрүн иштете алат жана биз муну Keychain сырсөзүн коюу менен буга чейин аракет кылганбыз:
ENV['KEYCHAIN_PASSWORD']
Скрипттерди карап чыккандан кийин, биз жалпы бөлүктөрүн аныктадык:
#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
Эми, бул ачкычтарды fastlane файлдарында колдонууну баштоо үчүн, биз аларды кантип жеткирүү керектигин аныкташыбыз керек болчу. Fastlane бул үчүн бир чечим бар: dotenv аркылуу өзгөрмөлөрдү жүктөө. Документте айтылгандай, эгер сиз үчүн ар кандай максаттар үчүн ачкычтарды жүктөө маанилүү болсо, fastlane каталогунда бир нече конфигурация файлдарын түзүңүз. .env, .env.default, .env.development.
Анан биз бул китепкананы бир аз башкача колдонууну чечтик. Иштеп чыгуучулардын репозиторийине fastlane скрипттерин жана анын мета маалыматын эмес, бул колдонмонун уникалдуу ачкычтарын файлга жайгаштыралы .env.appName.
өзүн Fastfile, Appfile, Matchfile и Gymfile, биз аны өзүнчө репозиторийге катып койдук. Ал жерде башка кызматтардын сырсөз ачкычтары бар кошумча файл жашырылган - .env.
Сиз мисалды көрө аласыз бул жерде.
CIде чалуу анча деле өзгөргөн жок, белгилүү бир колдонмо үчүн конфигурация ачкычы кошулду:
Fastlane аркылуу Fastfile жүктөп алуу үчүн чечим бар болсо да, азыр бул чечимди таштап иш-аракеттерimport_from_git, бирок ал Fastfile үчүн гана иштейт, бирок башка файлдар үчүн эмес. Эгер сиз "чын эле сулуу" десеңиз, өзүңүздүн жазсаңыз болот action.
Окшош топтом Android тиркемелери жана ReactNative үчүн жасалган, файлдар бир репозиторийде, бирок ар кандай бутактарда iOS, android и react_native.
Чыгаруу тобу кандайдыр бир жаңы кадамды кошкусу келгенде, скрипттеги өзгөрүүлөр gitтин MR аркылуу жазылат, бузулган скрипттердин күнөөкөрлөрүн издөөнүн кереги жок, жана жалпысынан, азыр сиз аны бузууга аракет кылышыңыз керек.
Эми бул анык
Буга чейин биз бардык скрипттерди сактоого, аларды жаңылоого жана жаңыртуулардын бардык кесепеттерин оңдоого убакыт коротчубуз. Каталардын жана релиздердин токтоп калышынын себептери жөнөкөй тамга каталары болгондо, абдан капалантты, аларды кабык скрипттеринин башаламандыгына байкоо жүргүзүү абдан кыйын болду. Азыр мындай каталар минимумга чейин кыскарды. Өзгөртүүлөр бир эле учурда бардык колдонмолорго жайылтылат. Жаңы тиркемени процесске киргизүү үчүн 15 мүнөт талап кылынат - CIде шаблон түтүгүн орнотуп, иштеп чыгуучунун репозиторийине ачкычтарды кошуңуз.
Бул Android үчүн Fastfile жана колдонмо кол менен пункту түшүнүксүз бойдон калууда окшойт, макала кызыктуу болсо, мен уландысы жазам; Комментарийлерде же Telegramда "бул көйгөйдү кантип чечет элеңиз" деген суроолоруңузду же сунуштарыңызды көргөнүмө кубанычтамын башкирова.