Мобилно CICD изТивяванС: Π΅Π΄ΠΈΠ½ стандарт Π·Π° Π±ΡŠΡ€Π·Π° Π»Π΅Π½Ρ‚Π° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния

Мобилно CICD изТивяванС: Π΅Π΄ΠΈΠ½ стандарт Π·Π° Π±ΡŠΡ€Π·Π° Π»Π΅Π½Ρ‚Π° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния
Π‘ΠΈΡ… искал Π΄Π° говоря Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° интСграция ΠΈ доставка Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ fastlane. Как внСдрявамС CI/CD във всички ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния, ΠΊΠ°ΠΊ стигнахмС Π΄ΠΎ Ρ‚Π°ΠΌ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ сС случи Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка.

Π’ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π·Π° инструмСнта, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π½ΠΈ липсвашС Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΡƒΠΌΠΈΡˆΠ»Π΅Π½ΠΎ няма Π΄Π° опиша инструмСнта ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Π° Ρ‰Π΅ сС ΠΏΠΎΠ·ΠΎΠ²Π° само Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ Ρ‚ΠΎΠ³Π°Π²Π°:

Бтатията сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π΅ части:

  • ΠŸΡ€Π΅Π΄ΠΈΡΡ‚ΠΎΡ€ΠΈΡ Π½Π° появата Π½Π° мобилния CI/CD Π² компанията
  • ВСхничСско Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° внСдряванС Π½Π° CI/CD Π·Π° N-прилоТСния

ΠŸΡŠΡ€Π²Π°Ρ‚Π° част Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ носталгия ΠΏΠΎ старитС Π²Ρ€Π΅ΠΌΠ΅Π½Π°, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π΅ прСТивяванС, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ към сСбС си.

Π’Π°ΠΊΠ° сС Π΅ случило историчСски

Π“ΠΎΠ΄ΠΈΠ½Π° 2015

Π’ΠΎΠΊΡƒ-Ρ‰ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния, Ρ‚ΠΎΠ³Π°Π²Π° Π½Π΅ Π·Π½Π°Π΅Ρ…ΠΌΠ΅ Π½ΠΈΡ‰ΠΎ Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π°Ρ‚Π° интСграция, Π·Π° DevOps ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ Π½Π΅Ρ‰Π°. Всяка актуализация Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ бСшС пусната ΠΎΡ‚ самия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° машина. И Π°ΠΊΠΎ Π·Π° Android Π΅ доста просто - сглобСно, подписано .apk ΠΈ Π³ΠΎ ΠΊΠ°Ρ‡ΠΈ Π² Google Developer Console, слСд Ρ‚ΠΎΠ²Π° Π·Π° iOS Ρ‚ΠΎΠ³Π°Π²Π°ΡˆΠ½ΠΈΡΡ‚ инструмСнт Π·Π° разпространСниС Ρ‡Ρ€Π΅Π· Xcode Π½ΠΈ остави страхотни Π²Π΅Ρ‡Π΅Ρ€ΠΈ - ΠΎΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π·Π° изтСглянС Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π° чСсто Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ…Π° с Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. Оказа сС, Ρ‡Π΅ Π½Π°ΠΉ-напрСдналият Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ пишС ΠΊΠΎΠ΄ няколко ΠΏΡŠΡ‚ΠΈ Π² мСсСца, Π° ΠΏΠΎ-скоро пуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π“ΠΎΠ΄ΠΈΠ½Π° 2016

ΠŸΠΎΡ€Π°ΡΠ½Π°Ρ…ΠΌΠ΅, Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ мисли ΠΊΠ°ΠΊ Π΄Π° освободим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΎΡ‚ цял ​​дСн Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ сС появи ΠΈ Π²Ρ‚ΠΎΡ€ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ само Π½ΠΈ тласна ΠΏΠΎΠ²Π΅Ρ‡Π΅ към автоматизация. Π‘ΡŠΡ‰Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π° инсталирахмС Jenkins Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ ΠΈ написахмС ΠΊΡƒΠΏ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΈ скриптовС, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ fastlane ΠΏΠΎΠΊΠ°Π·Π²Π° Π² своята докумСнтация.

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

Π—Π° съТалСниС, досСга само Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π·Π½Π°Π΅Ρ…Π° ΠΊΠ°ΠΊ работят Ρ‚Π΅Π·ΠΈ скриптовС ΠΈ Π·Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ Π±Π΅Π·ΠΊΡ€Π°Π΅Π½ стСк ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅Ρ‰ΠΎ сС счупи ΠΎΡ‚Π½ΠΎΠ²ΠΎ, Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° β€žΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΠΈΡ‚Π΅ Π²Π΅Ρ‡Π΅Ρ€ΠΈβ€œ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Π“ΠΎΠ΄ΠΈΠ½Π° 2017

Π’Π°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π°ΡƒΡ‡ΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ ΠΈΠΌΠ° Ρ‚Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ fastlane. НямашС Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ информация, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ сСга - ΠΊΠ°ΠΊ Π΄Π° стартиратС Ρ‚Π°ΠΊΡŠΠ², ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅. А самият инструмСнт бСшС всС ΠΎΡ‰Π΅ Π³Ρ€ΡƒΠ± ΠΏΠΎ Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅: постояннитС Π³Ρ€Π΅ΡˆΠΊΠΈ само Π½ΠΈ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ…Π° ΠΈ бСшС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° повярвамС Π² магичСската автоматизация, която ΠΎΠ±Π΅Ρ‰Π°Π²Π°Ρ…Π°.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, основнитС ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ядрото Π½Π° fastlane, са gym ΠΈ pilot, успяхмС Π΄Π° Π³ΠΎ стартирамС.

ΠΠ°ΡˆΠΈΡ‚Π΅ скриптовС са ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ.

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

Π’Π΅ са ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ, Π΄ΠΎΡ€ΠΈ само Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π΅ всички ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° xcodebuild, трябва Π΄Π° посочитС - gym самостоятСлно Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ къдС ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΊΡ€ΠΈΠ΅. А Π·Π° ΠΏΠΎ-Ρ„ΠΈΠ½Π° настройка ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС ΡΡŠΡ‰ΠΈΡ‚Π΅ клавиши ΠΊΠ°Ρ‚ΠΎ Π² xcodebuild, само ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΠΈΡ‚Π΅ Π΅ ΠΏΠΎ-ясно.

Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° gym ΠΈ вградСния xcpretty formatter, рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ са станали ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‡Π΅Ρ‚Π»ΠΈΠ²ΠΈ. Π’ΠΎΠ²Π° Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° спСстява Π²Ρ€Π΅ΠΌΠ΅ Π·Π° поправянС Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ понякога Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΏΠΎ пусканСто моТСшС Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ сам.

Π—Π° съТалСниС, измСрвания Π½Π° скоростта Π½Π° сглобяванС xcodebuild ΠΈ gym НиС Π½Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅, Π½ΠΎ Ρ‰Π΅ сС Π΄ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½Π° докумСнтацията - Π΄ΠΎ 30% ускоряванС.

Π•Π΄ΠΈΠ½ процСс Π·Π° всички прилоТСния

Π“ΠΎΠ΄ΠΈΠ½Π° 2018 ΠΈ сСга

Π”ΠΎ 2018 Π³. ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ внСдряванС Π½Π° прилоТСния изцяло сС прСмСсти Π² Jenkins, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ спряха Π΄Π° пускат ΠΎΡ‚ своитС машини ΠΈ само Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΏΠΎ пусканСто имашС ΠΏΡ€Π°Π²ΠΎ Π΄Π° пуска.

Π’Π΅Ρ‡Π΅ искахмС Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌ стартиранСто Π½Π° тСстовС ΠΈ статичСн Π°Π½Π°Π»ΠΈΠ· ΠΈ Π½Π°ΡˆΠΈΡ‚Π΅ скриптовС растяха ΠΈ растяха. Нарасна ΠΈ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ с Π½Π°ΡˆΠΈΡ‚Π΅ прилоТСния. По Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ прилоТСнията бяха ΠΎΠΊΠΎΠ»ΠΎ 10. Имайки ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ, Ρ‚ΠΎΠ²Π° са ΠΎΠΊΠΎΠ»ΠΎ 20 β€žΠΆΠΈΠ²ΠΈβ€œ скрипта.

ВсСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искахмС Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Π° ΡΡ‚ΡŠΠΏΠΊΠ° към скрипта, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ ΠΈ поставим ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π°Ρ‚Π° във всички скриптовС Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. МоТС Π±ΠΈ Π±ΠΈΡ…ΠΌΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΏΠΎ-Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ, Π½ΠΎ чСсто Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ…Π° с правописни Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°Ρ…Π° Π² Π²Π΅Ρ‡Π΅Ρ€ΠΈ Π·Π° Π΅ΠΊΠΈΠΏΠ° ΠΏΠΎ ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, Π·Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° скриптовС ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠΎΠΉ ΡƒΠΌΠ½ΠΈΠΊ Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΡ€Π°Π²ΠΈ. ΠšΠ°Ρ‚ΠΎ цяло Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ скриптовСтС Π·Π° сглобяванС Π·Π° Π΅Π΄Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° са ΠΏΠΎΠ½Π΅ донякъдС сходни. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ със сигурност са Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΡΡŠΡ‰ΠΎΡ‚ΠΎ.

Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ процСс Π·Π° Π½ΠΎΠ²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ Π΄Π΅Π½, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ β€žΠΏΡ€ΡΡΠ½Π°β€œ вСрсия Π½Π° Ρ‚Π΅Π·ΠΈ скриптовС, Π΄Π° я Π΄Π΅Π±ΡŠΠ³Π²Π°Ρ‚Π΅ ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Ρ‡Π΅ β€žΠ΄Π°, Ρ€Π°Π±ΠΎΡ‚ΠΈβ€œ.

ΠŸΡ€Π΅Π· лятото Π½Π° 2018 Π³. ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ…ΠΌΠ΅ към всС ΠΎΡ‰Π΅ развиващия сС фастлСйн.

Π—Π°Π΄Π°Ρ‡Π° β„–1: ΠΎΠ±ΠΎΠ±Ρ‰Π΅Ρ‚Π΅ всички ΡΡ‚ΡŠΠΏΠΊΠΈ Π½Π° скрипта ΠΈ Π³ΠΈ ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Fastfile

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅, Π½Π°ΡˆΠΈΡ‚Π΅ скриптовС ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ…Π° ΠΊΠ°Ρ‚ΠΎ ΠΊΡŠΡ€ΠΏΠ° Π·Π° ΠΊΡ€Π°ΠΊΠ°, ΡΡŠΡΡ‚ΠΎΡΡ‰Π° сС ΠΎΡ‚ всички ΡΡ‚ΡŠΠΏΠΊΠΈ ΠΈ ΠΏΠ°Ρ‚Π΅Ρ€ΠΈΡ†ΠΈ Π² Π΅Π΄ΠΈΠ½ shell скрипт Π² Jenkins. ВсС ΠΎΡ‰Π΅ Π½Π΅ смС ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ към Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ ΠΈ раздСлянС ΠΏΠΎ Π΅Ρ‚Π°ΠΏΠΈ.

Π Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ…ΠΌΠ΅ 4 ΡΡ‚ΡŠΠΏΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ отговарят Π½Π° описаниСто Π½Π° нашия CI/CD:

  • ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ - инсталиранС Π½Π° зависимости, сглобяванС Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π°,
  • тСстванС - ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° тСстовС Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, изчисляванС Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅,
  • сонар - стартира всички Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΈ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π΄ΠΎ SonarQube,
  • Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ β€” ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ към Π°Π»Ρ„Π° (TestFlight).

И Π°ΠΊΠΎ Π½Π΅ Π½Π°Π²Π»ΠΈΠ·Π°Ρ‚Π΅ Π² подробности, пропускайки ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² дСйствията, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ 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.

Π‘Π΅Π³Π° Π² Jenkins ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π·Π°ΠΌΡŠΠ³Π»ΡΠ²Π°Ρ‚ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΈ са лСсни Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ ΠΎΠΊΠΎΡ‚ΠΎ:

# fastlane ios <lane_name>

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

Π£Ρ€Π°, страхотни смС

Какво ΠΏΠΎΠ»ΡƒΡ‡ΠΈ? Ясни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° всяка ΡΡ‚ΡŠΠΏΠΊΠ°. Π˜Π·Ρ‡ΠΈΡΡ‚Π΅Π½ΠΈ скриптовС, спрСтнато ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π±ΡŠΡ€Π·ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π΄Π²Π°ΠΉΠΊΠΈ сС, Π½ΠΈΠ΅ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Ρ…ΠΌΠ΅ Π΄ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ с ΠΌΠΎΠ»Π±Π° Π΄Π° добавят всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ към Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Но с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Ρ‰Π΅ срСщнСм ΡΡŠΡ‰ΠΈΡ‚Π΅ трудности - всС ΠΎΡ‰Π΅ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ 20 асСмблиращи скрипта, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Π΄Π° ТивСят собствСн ΠΆΠΈΠ²ΠΎΡ‚, Ρ‰Π΅ бъдС ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° Π³ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ скриптовСтС Ρ‰Π΅ сС прСмСстят Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΈ нямахмС Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Π°ΠΌ. И ΠΊΠ°Ρ‚ΠΎ цяло няма Π΄Π° Π΅ възмоТно Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ Π±ΠΎΠ»ΠΊΠ°Ρ‚Π° си ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½.

Мобилно CICD изТивяванС: Π΅Π΄ΠΈΠ½ стандарт Π·Π° Π±ΡŠΡ€Π·Π° Π»Π΅Π½Ρ‚Π° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния

Π—Π°Π΄Π°Ρ‡Π° #2: Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π΅Π΄ΠΈΠ½ Fastfile Π·Π° N прилоТСния

Π‘Π΅Π³Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Ρ‡Π΅ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ - Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΈ Π΄Π° Ρ‚Ρ€ΡŠΠ³Π²Π°ΠΌΠ΅. Π”Π°, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚Π°ΠΊΠ° бСшС Ρ€Π΅ΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚. Но Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎ ΠΏΡ€Π΅Ρ†Π°ΠΊΠ°Ρ…ΠΌΠ΅, нямахмС Π½ΠΈΡ‚ΠΎ ΠΎΠΏΠΈΡ‚ Π² самия fastlane, Π½ΠΈΡ‚ΠΎ Π² Ruby, Π² ΠΊΠΎΠΉΡ‚ΠΎ пишС fastlane, Π½ΠΈΡ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° - всички, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° писаха Π·Π° 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.
ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΡƒΠΊ.

Мобилно CICD изТивяванС: Π΅Π΄ΠΈΠ½ стандарт Π·Π° Π±ΡŠΡ€Π·Π° Π»Π΅Π½Ρ‚Π° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ прилоТСния

ΠŸΡ€ΠΈ CI ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ; Π΄ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΊΠ»ΡŽΡ‡ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

# 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

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° изпълним ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅, Π·Π°Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ със скриптовС. НС ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ…ΡƒΠ±Π°Π²ΠΎ:

git clone [email protected]/FastlaneCICD.git fastlane_temp

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

ΠžΡΡ‚Π°Π²ΠΈΡ… Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° сСга, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Fastlane ΠΈΠΌΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° изтСглянС Π½Π° Fastfile Ρ‡Ρ€Π΅Π· дСйствиС import_from_git, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π·Π° Fastfile, Π½ΠΎ Π½Π΅ ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Ако искатС β€žΠ½Π°ΠΈΡΡ‚ΠΈΠ½Π° ΠΊΡ€Π°ΡΠΈΠ²ΠΎβ€œ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой собствСн action.

ПодобСн Π½Π°Π±ΠΎΡ€ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ Π·Π° Android прилоТСния ΠΈ ReactNative, Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ са Π² Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π½ΠΎ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ iOS, android ΠΈ react_native.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΅ΠΊΠΈΠΏΡŠΡ‚ Π·Π° освобоТдаванС иска Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ някаква Π½ΠΎΠ²Π° ΡΡ‚ΡŠΠΏΠΊΠ°, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² скрипта сС записват Ρ‡Ρ€Π΅Π· MR Π² git, Π²Π΅Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° счупСнитС скриптовС ΠΈ ΠΊΠ°Ρ‚ΠΎ цяло сСга трябва Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±ΠΈΠ΅Ρ‚Π΅.

Π’ΠΎΠ²Π° Π΅ със сигурност

ΠŸΡ€Π΅Π΄ΠΈ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π²Π°Ρ…ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅ Π² ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° всички скриптовС, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° всички послСдствия ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅. Π‘Π΅ΡˆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‰ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡΡ‚Π° Π² изданията бяха ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ бяха Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° прослСдяванС Π² Π±ΡŠΡ€ΠΊΠΎΡ‚ΠΈΡΡ‚Π° ΠΎΡ‚ скриптовС Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. Π‘Π΅Π³Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ са свСдСни Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ сС разпространяват във всички прилоТСния навСднъТ. И ΠΎΡ‚Π½Π΅ΠΌΠ° 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π·Π° Π΄Π° поставитС Π½ΠΎΠ²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² процСса - настройтС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° шаблони Π² CI ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° програмиста.

ИзглСТда, Ρ‡Π΅ Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ с Fastfile Π·Π° Android ΠΈ подписа Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ остава нСобяснСн, Π°ΠΊΠΎ статията Π΅ интСрСсна, Ρ‰Π΅ напиша ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅. Π©Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ Π΄Π° видя Π²Π°ΡˆΠΈΡ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈΠ»ΠΈ прСдлоТСния β€žΠΊΠ°ΠΊ Π±ΠΈΡ…Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌβ€œ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π² Telegram Π±Π°ΡˆΠΊΠΈΡ€ΠΎΠ²Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€