Lane — co to je, vytvoření a použití ve Fastlane

Autor: IT Sectr Publikováno: 2026-04-14 Doba čtení: 10 min

Lane je pojmenovaný scénář automatizace ve Fastlane, který spojuje posloupnost akcí (actions) pro sestavení, testování nebo doručení mobilní aplikace. Každý lane je definován v Fastfile v jazyce Ruby a lze jej spustit jedním příkazem z terminálu nebo CI/CD systému. Podle Fastlane Docs, 2025 obsahuje 85% Fastfile více než tři lanes pro různá stádia CI/CD. Lane může přijímat parametry, volat jiné lanes a zpracovávat chyby provádění.

Hlavní body

  • Lane — pojmenovaný scénář automatizace v Fastfile v jazyce Ruby
  • Parametry — předávání hodnot pomocí options hashe při spuštění fastlane lane_name key:value
  • before_all/after_all — bloky pro spuštění kódu před a po každém lane
  • Private lane — scénář dostupný pouze pro volání z jiných lanes
  • Error handling — blok error pro zpracování chyb a odesílání oznámení

Co je Lane ve Fastlane

Lane je základní stavební prvek Fastlane, který definuje pojmenovaný scénář automatizace. Každý lane popisuje posloupnost akcí (actions), které se provádějí k dosažení konkrétního cíle: sestavit aplikaci, spustit testy, nahrát build do obchodu nebo nastavit prostředí. Lane se deklaruje v Fastfile a spouští se příkazem fastlane [název_lane] z kořenového adresáře projektu.

Koncept lane je převzat z Ruby DSL a zajišťuje čitelnost scénářů. Vývojář vidí celý CI/CD proces jako posloupnost volání actions srozumitelnými názvy a parametry. Lane může být jednoduchý (jeden příkaz) nebo složitý (větvení, cykly, volání jiných lanes).

Každý lane po provedení vrací výsledek — objekt obsahující stav provedení a data z actions. Výsledek lze použít v jiných lanes nebo předat CI/CD systému pro rozhodování. Pokud jakákoli akce v lane selže, provádění lane se zastaví a zavolá se blok error.

Syntaxe lane: deklarace a spuštění

Syntaxe deklarace lane následuje jednoduchý vzor Ruby DSL: klíčové slovo lane, název scénáře jako symbol Ruby (symbol), blok do ... end s tělem scénáře. Název lane musí být v rámci platformy jedinečný a skládat se z písmen, číslic a podtržítek.

Spuštění lane se provádí přes příkazový řádek: fastlane build (pro lane s názvem :build) nebo bundle exec fastlane build (pokud je Fastlane nainstalován přes Bundler). Pro platformové lanes použijte fastlane ios build nebo fastlane android build.

ruby
# Deklarace jednoduchého lane
lane :test do
  scan(scheme: 'App', devices: ['iPhone 15'])
end

lane :build_and_deploy do
  cocoapods
  test
  gym(scheme: 'App', export_method: 'app-store')
  pilot(skip_waiting_for_build_processing: true)
end

# Spuštění: fastlane build_and_deploy

Lane může obsahovat podmíněnou logiku na základě parametrů nebo proměnných prostředí. Použijte if/unless pro přeskočení kroků za určitých podmínek. K dispozici jsou také cykly each pro zpracování polí, což je užitečné pro sestavení více targetů nebo schémat aplikace v jednom lane.

Návrat hodnoty z lane

Lane může vracet hodnotu, která bude dostupná volajícímu kódu. Pro návrat se používá běžný Ruby return nebo poslední výraz v bloku lane. Vrácená hodnota může být řetězec, číslo, hash nebo výsledek akce. To umožňuje použít výsledek jednoho lane v jiném lane pro rozhodování.

Například lane :get_version může vrátit aktuální verzi aplikace z Info.plist a lane :deploy ji použít pro vytvoření zprávy ve Slacku. Vrácené hodnoty jsou zvláště užitečné v private lanes, kde je výsledek potřeba pro další zpracování ve volajícím lane.

Parametry lanes: předávání a zpracování

Parametry lane činí scénáře flexibilními a znovupoužitelnými. Lane přijímá parametry přes options hash, který se předává při spuštění z příkazového řádku: fastlane deploy scheme:AppStore version:2.1.0. Uvnitř lane jsou parametry dostupné jako options[:scheme] a options[:version].

Pro povinné parametry zkontrolujte existenci hodnoty na začátku lane a zavolejte UI.user_error! s jasnou zprávou. Pro volitelné parametry nastavte výchozí hodnoty pomocí operátoru ||. Fastlane také podporuje typované parametry pomocí metody options s určením typu, výchozí hodnoty a popisu.

ruby
# Lane se zpracováním parametrů
lane :deploy do |options|
  scheme = options[:scheme]
  version = options[:version] || '1.0.0'
  beta = options[:beta] || false

  UI.user_error!("Nebylo zadáno scheme") unless scheme

  match(type: beta ? 'adhoc' : 'appstore')
  gym(scheme: scheme, export_method: beta ? 'ad-hoc' : 'app-store')

  if beta
    pilot(distribute_external: true)
  else
    deliver(submit_for_review: true)
  end
end

# Spuštění: fastlane deploy scheme:MyApp beta:true version:2.1.0

Pro práci s proměnnými prostředí uvnitř lane použijte ENV['VARIABLE_NAME']. Fastlane automaticky načítá .env soubory z adresáře fastlane. Toto je standardní způsob předávání citlivých údajů — API klíčů, hesel a tokenů — v CI/CD prostředí bez jejich ukládání do Fastfile.

Validace parametrů

Pro spolehlivý provoz lane je nezbytná validace parametrů na vstupu. Použijte UI.user_error! s popisem problému, pokud povinný parametr chybí nebo má nesprávný typ. Fastlane poskytuje metodu options, která umožňuje nastavit typ (String, Boolean, Integer, Array), výchozí hodnotu a popis pro každý parametr — validace se provádí automaticky při spuštění lane.

Dodatečně můžete použít kontroly přes verify blok: verify do |value| value.length > 0 end pro parametry řetězce. Při nesprávném formátu Fastlane zobrazí jasnou zprávu s očekávaným formátem a předanou hodnotou, což usnadňuje ladění v CI/CD prostředí.

Spojování lanes: before_all, after_all a error handling

Fastlane poskytuje životní cyklus hooks pro spuštění kódu před a po každém lane. Blok before_all se spustí před každým lane v dané platformě nebo globálně. Blok after_all se spustí po úspěšném dokončení lane. Blok error se spustí při jakékoli chybě uvnitř lane.

Hooks umožňují centralizovat opakovanou logiku: instalace závislostí v before_all, odesílání oznámení v after_all, čištění dočasných souborů a oznamování chyb v bloku error. To snižuje duplicitu kódu a činí lanes čistšími.

ruby
# Hooks životního cyklu lanes
default_platform(:ios)

before_all do
  cocoapods(try_repo_update_on_error: true)
  ensure_git_status_clean
end

after_all do |lane|
  slack(message: "Lane #{lane} proběhlo úspěšně")
end

error do |lane, exception|
  slack(
    message: "Lane #{lane} selhalo s chybou: #{exception}",
    success: false
  )
end

lane :deploy do
  match(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

Blok error přijímá dva argumenty: název lane (symbol) a objekt výjimky. Uvnitř bloku můžete odeslat oznámení do Slacku, zapsat log do souboru nebo spustit alternativní scénář obnovy. Pokud blok error skončí úspěšně, Fastlane nepovažuje build za neúspěšný na úrovni CI/CD.

Private lanes a znovupoužití

Private lane je lane deklarovaný pomocí private_lane místo lane, který se nezobrazuje v seznamu dostupných příkazů a nelze jej spustit přímo z terminálu. Private lanes jsou určeny pro zapouzdření opakujících se kroků, které jsou volány z několika veřejných lanes.

Private lanes jsou zvláště užitečné pro složité posloupnosti akcí, které musí být provedeny v přesně daném pořadí. Například private lane :setup_signing může být volán z lanes :build_dev, :build_staging a :build_production s různými parametry, ale sám o sobě nedává smysl jako samostatný příkaz.

ruby
# Private lanes pro znovupoužití
private_lane :setup_environment do |options|
  cocoapods(try_repo_update_on_error: true)
  match(type: options[:type], readonly: true)
  increment_build_number
end

lane :dev_build do
  setup_environment(type: 'development')
  gym(export_method: 'development')
end

lane :appstore_build do
  setup_environment(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

Private lanes mohou volat jiné private lanes a vytvářet tak hierarchii abstrakcí. Doporučuje se omezit hloubku vnoření na 2–3 úrovně pro zachování čitelnosti Fastfile. Dokumentujte každý private lane komentářem s popisem jeho účelu a očekávaných parametrů.

Příklady lanes pro iOS a Android

Podívejme se na praktické příklady lanes pro iOS a Android projekty. iOS lanes obvykle používají scan pro testy, match pro certifikáty, gym pro sestavení a pilot nebo deliver pro doručení. Android lanes používají gradle pro sestavení, supply pro publikování a firebase_test_lab pro cloudové testování.

ruby
// Lane pro kompletní CI/CD iOS aplikace
lane :ci_full_ios do
  scan(scheme: 'App', code_coverage: true)
  gym(scheme: 'App', export_method: 'app-store')
  pilot(distribute_external: true)
  slack(message: 'iOS CI/CD úspěšně dokončeno')
end

/* Lane pro kompletní CI/CD Android aplikace */
lane :ci_full_android do
  gradle(task: 'testReleaseUnitTest')
  gradle(task: 'bundleRelease')
  supply(track: 'internal')
end

Kombinováním lanes pro iOS a Android můžete vytvořit jednotný CI/CD proces pro cross-platformovou aplikaci. Použijte platformové bloky platform :ios a platform :android pro seskupení platformově specifických lanes a volejte je z společného orchestrator lane, který řídí pořadí provádění.

Nejlepší postupy psaní lanes

Při psaní lanes se doporučuje dodržovat soubor postupů, které zajišťují čitelnost, udržovatelnost a spolehlivost scénářů. První pravidlo — každý lane by měl provádět jeden úkol. Pokud lane dělá příliš mnoho, rozdělte jej na několik lanes a private lanes.

Druhé pravidlo — pojmenování lanes by mělo být sloveso nebo slovesná fráze: build, deploy, test, upload_screenshots. Vyhněte se abstraktním názvům jako process nebo do_all. Používejte podtržítka pro oddělení slov v názvu lane.

Třetí pravidlo — zpracovávejte chyby explicitně. Použijte UI.user_error! pro jasné zprávy o problémech. Nespoléhejte na standardní chybové zprávy Fastlane — poskytněte vývojáři kontext: „Nebyl nalezen soubor GoogleService-Info.plist — přidejte jej do projektu“ místo „File not found“.

PostupPopisPříklad
Jeden úkolLane provádí jednu logickou operacilane :run_tests, lane :build_ipa
ParametryVšechna nastavení přes options nebo ENVoptions[:scheme] || default
Hooksbefore_all/after_all pro společný kódcocoapods v before_all
KomentářeDokumentujte složité části# Sestavení s bitcode
ChybyJasné chybové zprávyUI.user_error!(„...“)

Čtvrté pravidlo — testujte lanes lokálně před spuštěním na CI/CD. Fastlane podporuje režim dry-run pomocí přepínače --dry-run, který ukazuje, které akce budou provedeny, bez skutečného spuštění. Použijte fastlane run_test pro izolované testování jednotlivých lanes před integrací.

Dokumentace lanes

Dokumentace každého lane je důležitým postupem pro týmový vývoj. Fastlane podporuje automatické generování dokumentace z bloku desc umístěného před deklarací lane. Text desc se zobrazuje při spuštění fastlane lanes a fastlane list, což pomáhá vývojářům pochopit účel každého scénáře bez čtení zdrojového kódu Fastfile.

Pro dokumentaci parametrů použijte Ruby komentáře s popisem očekávaných hodnot. Fastlane může generovat README.md s úplným seznamem lanes a jejich popisem pomocí příkazu fastlane generate_docs, což je vhodné pro adaptaci nových členů týmu na CI/CD procesy projektu.

Často kladené otázky

Co je Lane ve Fastlane?

Lane je pojmenovaný scénář automatizace ve Fastlane, deklarovaný v Fastfile v Ruby. Lane spojuje posloupnost actions pro provedení konkrétního úkolu: sestavení aplikace, spuštění testů nebo nasazení. Spouští se přes fastlane [název_lane] z terminálu nebo CI/CD systému.

Jak vytvořit Lane v Fastfile?

Použijte konstrukci lane :name do ... end v Fastfile. Uvnitř bloku přidejte volání actions s parametry. Lane může volat jiné lanes podle názvu. Pro spuštění zadejte fastlane name v terminálu z kořenového adresáře projektu, kde se nachází adresář fastlane s Fastfile.

Jak předat parametry do Lane?

Parametry se předávají přes příkazový řádek: fastlane build scheme:App version:2.0. Uvnitř lane jsou parametry dostupné přes options[:scheme] a options[:version]. Pro povinné parametry zkontrolujte existenci hodnoty na začátku lane, pro volitelné nastavte výchozí hodnoty.

Co je private lane ve Fastlane?

Private lane je lane deklarovaný pomocí private_lane místo lane. Nelze jej spustit přímo z příkazového řádku a slouží k zapouzdření opakujících se kroků volaných z jiných lanes. To snižuje duplicitu kódu a zjednodušuje údržbu Fastfile.

Jak zpracovávat chyby v Lane?

Použijte blok error globálně nebo uvnitř konkrétního lane pro zachycení výjimek. Fastlane předává do bloku název lane a objekt exception. Uvnitř bloku můžete odeslat oznámení, zapsat log nebo provést čištění. Použijte UI.user_error! pro generování jasných chybových zpráv.

Shrnutí

  • Lane — pojmenovaný scénář automatizace ve Fastlane v Ruby, spojující actions pro CI/CD úkoly
  • Syntaxe — lane :name do ... end s podporou parametrů přes options hash a proměnné prostředí
  • Hooks — bloky before_all, after_all a error pro centralizované zpracování životního cyklu lanes
  • Private lane — uzavřený scénář pro zapouzdření opakované logiky bez přímého spuštění
  • iOS lanes používají scan, gym, match, pilot pro testování, sestavení a doručení
  • Android lanes používají gradle a supply pro sestavení přes Gradle a publikování v Google Play
  • Nejlepší postupy: jeden lane — jeden úkol, explicitní parametry, jasné chyby, testování přes dry-run

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také