ProHoster > Blogi > antaminen > Mobiili-CICD-kokemus: yksi fastlane-standardi monille mobiilisovelluksille
Mobiili-CICD-kokemus: yksi fastlane-standardi monille mobiilisovelluksille
Haluaisin puhua mobiilisovellusten jatkuvasta integroinnista ja toimittamisesta fastlanen avulla. Kuinka toteutamme CI/CD:n kaikissa mobiilisovelluksissa, miten pääsimme perille ja mitä lopulta tapahtui.
Verkossa on jo tarpeeksi materiaalia työkalusta, jota meiltä niin puuttui alussa, joten en tarkoituksella kuvaile työkalua yksityiskohtaisesti, vaan viittaan vain siihen, mitä meillä oli silloin:
Tekninen ratkaisu CI/CD:n käyttöönottoon N-sovelluksille
Ensimmäinen osa on enemmän nostalgiaa vanhaan aikaan, ja toinen on kokemus, jota voit soveltaa itseesi.
Näin se tapahtui historiallisesti
Vuosi 2015
Aloitimme juuri mobiilisovellusten kehittämisen, mutta emme tienneet mitään jatkuvasta integroinnista, DevOpsista ja muista muodikkaista asioista. Kehittäjä itse julkaisi jokaisen sovelluspäivityksen koneeltaan. Ja jos se on Androidille melko yksinkertaista - koottu, allekirjoitettu .apk ja latasin sen Google Developer Consoleen, sitten iOS:lle tuolloinen Xcoden kautta levitetty työkalu jätti meille hienot illat - arkiston latausyritykset päättyivät usein virheisiin ja meidän piti yrittää uudelleen. Kävi ilmi, että edistynein kehittäjä ei kirjoita koodia useita kertoja kuukaudessa, vaan julkaisee sovelluksen.
Vuosi 2016
Kasvoimme aikuisiksi, meillä oli jo ajatuksia kuinka vapauttaa kehittäjät koko päivältä julkaisua varten, ja myös toinen sovellus ilmestyi, mikä vain työnsi meidät enemmän kohti automaatiota. Samana vuonna asensimme Jenkinsin ensimmäistä kertaa ja kirjoitimme joukon pelottavia skriptejä, jotka ovat hyvin samanlaisia kuin ne, jotka fastlane näyttää dokumentaatiossaan.
Valitettavasti tähän asti vain kehittäjämme tiesivät kuinka nämä skriptit toimivat ja miksi tätä loputonta avaimia tarvitaan, ja kun jokin taas meni rikki, he saivat "upeat illat" lokien analysointiin.
Vuosi 2017
Tänä vuonna opimme, että on olemassa sellainen asia kuin fastlane. Tietoa ei ollut niin paljon kuin nyt - kuinka aloittaa, miten sitä käytetään. Ja itse työkalu oli tuolloin vielä karkea: jatkuvat virheet pettyivät ja oli vaikea uskoa niiden lupaamaan maagiseen automaatioon.
Kuitenkin tärkeimmät apuohjelmat, jotka sisältyvät fastlane-ytimeen, ovat gym и pilot, onnistuimme käynnistämään sen.
Niitä on parannettu, jos vain siksi, ettei kaikkia tarvittavia parametreja ole xcodebuild, sinun on ilmoitettava - gym ymmärtää itsenäisesti missä ja mikä on. Ja hienosäätöä varten voit määrittää samat näppäimet kuin sisään xcodebuild, vain näppäinten nimeäminen on selkeämpi.
Tällä kertaa kuntosalin ja sisäänrakennetun xcpretty-muotoilijan ansiosta rakennuslokit ovat tulleet paljon luettavammiksi. Tämä alkoi säästää aikaa rikkoutuneiden kokoonpanojen korjaamiseen, ja joskus julkaisutiimi pystyi keksimään sen itse.
Valitettavasti kokoonpanon nopeusmittaukset xcodebuild и gym Emme tehneet sitä, mutta luotamme dokumentaatioon – jopa 30 % nopeutta.
Yksi prosessi kaikille sovelluksille
Vuosi 2018 ja nykyhetki
Vuoteen 2018 mennessä sovellusten rakentamis- ja käyttöönottoprosessi siirtyi kokonaan Jenkinsiin, kehittäjät lopettivat julkaisun koneistaan, ja vain julkaisutiimillä oli oikeus julkaista.
Halusimme jo parantaa testien ja staattisen analyysin käynnistämistä, ja skriptimme kasvoivat ja kasvoivat. Kasvoimme ja muuttuivat sovelluksiemme myötä. Tuolloin sovelluksia oli noin 10. Ottaen huomioon, että meillä on kaksi alustaa, se on noin 20 "elävää" skriptiä.
Joka kerta kun halusimme lisätä skriptiin uuden vaiheen, meidän piti kopioida ja liittää kappaleet kaikkiin komentotulkkikomentosarjaan. Ehkä olisimme voineet työskennellä huolellisemmin, mutta usein tällaiset muutokset päättyivät kirjoitusvirheisiin, jotka muuttuivat julkaisutiimin illaksi korjata skriptejä ja selvittää, mikä fiksu lisäsi tämän komennon ja mitä se oikeastaan tekee. Yleisesti ottaen ei voida sanoa, että yhden alustan kokoonpanon skriptit olisivat vähintäänkin samanlaisia. Vaikka he tekivät varmasti saman asian.
Uuden sovelluksen prosessin aloittamiseksi piti viettää päivä valitakseen "tuore" versio näistä komentosarjoista, korjata se ja sanoa, että "kyllä, se toimii".
Kesällä 2018 katselimme jälleen yhä kehittyvää fastlanea kohti.
Tehtävä #1: tee yhteenveto kaikista komentosarjan vaiheista ja kirjoita ne uudelleen Fastfileen
Kun aloitimme, käsikirjoituksemme näyttivät jalkakankaalta, joka koostui kaikista portaista ja kainalosauvoista yhdessä kuoren käsikirjoituksessa Jenkinsissä. Emme ole vielä siirtyneet putkistoon ja vaiheittain jakoon.
Tarkastelimme mitä meillä on ja tunnistimme 4 vaihetta, jotka sopivat CI/CD:n kuvaukseen:
rakentaa - riippuvuuksien asentaminen, arkiston kokoaminen,
Ja jos et mene yksityiskohtiin jättäen pois toiminnassa käytetyt näppäimet, saat tämän Fast-tiedoston:
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
Itse asiassa ensimmäinen Fastfilemme osoittautui hirviömäiseksi, kun otetaan huomioon joitain vielä tarvitsemamme kainalosauvat ja korvaamiemme parametrien lukumäärä:
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
Yllä olevassa esimerkissä vain osa parametreista, jotka meidän on määritettävä: nämä ovat koontiparametrit - skeema, kokoonpano, käyttöprofiilien nimet sekä jakeluparametrit - kehittäjätilin Apple ID, salasana, sovellustunnus ja niin edelleen. päällä. Ensimmäisenä arviona laitamme kaikki nämä avaimet erityisiin tiedostoihin - Gymfile, Matchfile и Appfile.
Nyt Jenkinsissä voit kutsua lyhyitä komentoja, jotka eivät sumenna näkymää ja ovat helposti luettavissa silmällä:
Mitä sinä sait? Selkeät komennot jokaisessa vaiheessa. Puhdistetut skriptit, siististi järjestetty fastlane-tiedostoihin. Iloitellen juoksimme kehittäjien luo ja pyysimme heitä lisäämään kaiken tarvitsemansa arkistoihinsa.
Mutta tajusimme ajoissa, että kohtaamme samat vaikeudet - meillä olisi vielä 20 kokoonpanoskriptiä, jotka tavalla tai toisella alkaisivat elää omaa elämäänsä, niitä olisi vaikeampi muokata, koska skriptit siirtyisivät arkistoihin, eikä meillä ollut pääsyä sinne. Ja yleensä, tuskaamme ei ole mahdollista ratkaista tällä tavalla.
Tehtävä #2: hanki yksi Fastfile N-sovellukselle
Nyt näyttää siltä, että ongelman ratkaiseminen ei ole niin vaikeaa - aseta muuttujat ja mennään. Kyllä, itse asiassa ongelma ratkesi näin. Mutta sillä hetkellä, kun sotimme sen, meillä ei ollut asiantuntemusta itse fastlanesta eikä Rubysta, johon fastlane on kirjoitettu, eikä hyödyllisiä esimerkkejä verkossa - kaikki, jotka kirjoittivat fastlanesta silloin, rajoittuivat esimerkkiin yhteen sovellukseen. yksi kehittäjä.
Fastlane pystyy käsittelemään ympäristömuuttujia, ja olemme jo kokeilleet tätä asettamalla avainnipun salasanan:
#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
Nyt, jotta voimme alkaa käyttää näitä avaimia fastlane-tiedostoissa, meidän oli keksittävä, kuinka ne toimitetaan sinne. Fastlanella on tähän ratkaisu: muuttujien lataus dotenv:n kautta. Dokumentaatio sanoo, että jos sinun on tärkeää ladata avaimia eri tarkoituksiin, luo useita asetustiedostoja fastlane-hakemistoon .env, .env.default, .env.development.
Ja sitten päätimme käyttää tätä kirjastoa hieman eri tavalla. Laitetaan kehittäjien arkistoon ei fastlane-skriptejä ja niiden metatietoja, vaan tämän sovelluksen ainutlaatuiset avaimet tiedostossa .env.appName.
itse Fastfile, Appfile, Matchfile и Gymfile, piilotimme sen erilliseen arkistoon. Siellä oli piilotettu ylimääräinen tiedosto, jossa oli muiden palveluiden salasanaavaimia - .env.
Voit nähdä esimerkin täällä.
CI:ssä puhelu ei ole juurikaan muuttunut; konfigurointiavain tietylle sovellukselle on lisätty:
Jätin tämän ratkaisun toistaiseksi, vaikka Fastlanella on ratkaisu Fastfilen lataamiseen toimintaimport_from_git, mutta se toimii vain Fastfilelle, mutta ei muille tiedostoille. Jos haluat "todella kaunista", voit kirjoittaa omasi action.
Samanlainen sarja tehtiin Android-sovelluksille ja ReactNativelle, tiedostot ovat samassa arkistossa, mutta eri haaroissa iOS, android и react_native.
Kun julkaisutiimi haluaa lisätä uuden askeleen, skriptin muutokset tallennetaan MR:n kautta gitissä, rikkinäisten skriptien syyllisiä ei enää tarvitse etsiä, ja yleensäkin nyt pitää yrittää rikkoa se.
Nyt se on varma
Aikaisemmin käytimme aikaa kaikkien komentosarjojen ylläpitoon, niiden päivittämiseen ja kaikkien päivitysten seurausten korjaamiseen. Oli suuri pettymys, kun julkaisujen virheiden ja seisokkien syyt olivat yksinkertaiset kirjoitusvirheet, joita oli niin vaikea seurata shell-skriptien sekamelskassa. Nyt tällaiset virheet on vähennetty minimiin. Muutokset otetaan käyttöön kaikkiin sovelluksiin kerralla. Ja uuden sovelluksen ottaminen prosessiin vie 15 minuuttia – luo malliputkisto CI:lle ja lisää avaimet kehittäjän arkistoon.
Vaikuttaa siltä, että Androidin Fastfilen ja sovelluksen allekirjoituksen pointti jää selittämättömäksi; jos artikkeli on mielenkiintoinen, kirjoitan jatkoa. Näen mielelläni kysymyksesi tai ehdotuksesi "miten ratkaisisit tämän ongelman" kommenteissa tai Telegramissa baškirova.