Spuštění scénáře mimo editor
Scénář, který si v editoru uložíte, je obyčejný soubor .json. Dá se spustit i bez otevřeného
okna editoru — jedním příkazem, plánovačem, nebo přes Prefect. Robot přitom dělá přesně to, co
byste viděli v editoru; jen se nic nekreslí na obrazovku.
| Potřeba | Použijte |
|---|---|
| Plánované běhy, kdy editor zůstává otevřený na stanici nebo na VM | Orchestrator |
| Běhy úplně bez okna editoru — CI, server, externí plánovač | tuto stránku |
Spuštění jedním příkazem
Kromě scénáře potřebujete profil robota — ten, který si ukládáte v dialogu
Otevřít prostředí; je to také soubor .json.
aiviro-editor run --scenario faktury.json --profile robot_profile.json
Oba přepínače jsou povinné.
| Přepínač | Efekt |
|---|---|
--scenario CESTA | Soubor .json se scénářem. Povinné. |
--profile CESTA | Profil robota, proti kterému se scénář spustí. Povinné. |
--prod / --test | Ostrý nebo testovací režim. Výchozí je --prod, takže scénář běží ostře, dokud nepředáte --test. |
--run-log CESTA | Uloží záznam běhu (stavy akcí a logy) do zadaného .zip. Otevřete ho v prohlížeči logů přes Soubor → Otevřít externí log. |
--vault-file CESTA | Soubor .vault vyexportovaný z Editoru, ze kterého běh vezme tajemství. Viz Tajemství bez klíčenky. |
--config CESTA | Soubor YAML nebo JSON s názvy proměnných a hodnotami, které se do běhu vloží před jeho startem. Viz Hodnoty podle prostředí. |
Dva přepínače platí pro příkaz jako celek a lze je předat i přes prostředí:
| Přepínač | Proměnná prostředí | Efekt |
|---|---|---|
--log-to-console, -l | AIVIRO__LOG_TO_CONSOLE | Loguje do konzole — to chcete ve výstupu CI. |
--debug | AIVIRO__DEBUG | Zapne vývojářské prvky rozhraní. Bez okna nemá využití. |
Spuštění aiviro-editor bez podpříkazu otevře desktopové rozhraní.
Návratové kódy
Příkaz skončí kódem 0 při úspěchu a 1 při chybě, takže se dá zapojit do jakéhokoli
plánovače nebo skriptu. Při chybě navíc vypíše na chybový výstup Scenario failed: <souhrn>.
aiviro-editor run --scenario faktury.json --profile robot_profile.json --run-log run.zip || echo "selhalo"
Interaktivní akce v tomto režimu neprojdou. Scénář obsahující Vstupní formulář skončí chybou Interactive action encountered in headless mode — bez okna totiž není komu otázku položit. Takové akce omezte na Povoleno (jen Test), aby v produkci nikdy neběžely.
Cesty ke scénáři i profilu můžete zadat absolutně, nebo relativně ke složce, ve které příkaz spouštíte.
Tajemství bez klíčenky
Běh bez Editoru dřív neměl k trezoru přístup vůbec: každé tajemství se vyhodnotilo jako prázdná hodnota, takže scénář, který potřebuje přihlašovací údaje, mimo Editor spustit nešel.
--vault-file to řeší. V Editoru zapíše Exportovat trezor v dialogu Bezpečný trezor
soubor .vault; ten předáte běhu a jeho tajemství zůstanou v paměti jen po dobu daného
běhu:
aiviro-editor run --scenario faktury.json --profile robot_profile.json --vault-file secrets.vault
Do klíčenky stroje se nezapisuje nic, takže CI worker nebo kontejner zůstane čistý a klíčenku vůbec nepotřebuje — což byla dosud právě u kontejnerů největší překážka.
Každé tajemství je zároveň scénáři dostupné jako proměnná pod názvem svého klíče, takže se hodnota z trezoru čte stejně jako běžná proměnná.
Pokud tajemství, které scénář požaduje, v souboru chybí, běh zapíše varování a pokračuje dál, místo aby skončil — u prvního běhu scénáře bez Editoru se proto dívejte do logu, ne jen na návratový kód.
Soubor .vault jsou vaše přihlašovací údaje v přenositelném souboru. Nedávejte ho do gitu,
předávejte ho běhu ze správce tajemství svého CI a po doběhnutí ho smažte.
Hodnoty podle prostředí
--config vloží do běhu proměnné ještě před jeho startem. Tak nasměrujete jeden scénář na
testovací i ostré prostředí, aniž byste sahali do samotného scénáře:
# config-test.yaml
invoice_folder: C:\data\test\invoices
portal_url: https://test.example.com
account_number: "123456789"
aiviro-editor run --scenario faktury.json --profile robot_profile.json --config config-test.yaml
Funguje i JSON — soubor může být v obou formátech. Klíče jsou názvy proměnných, hodnoty to, s čím proměnné do běhu vstupují.
Oba soubory se ověřují dřív, než se sáhne na robota: poškozený config nebo soubor trezoru je odmítnut se srozumitelnou hláškou, místo aby běh spadl v půlce, když už má otevřenou aplikaci.
Pravidelné spouštění přes Prefect
Pro pravidelné běhy se scénář zabalí do Prefect flow. Níže je šablona — zkopírujte ji do
souboru ve složce flows/ svého projektu, například flows/flow_faktury.py, a upravte
hodnoty popsané pod výpisem.
import aiviro
from aiviro.modules.prefect_v3.storage import AiviroGitDockerStorage
from aiviro_editor.headless.runner import run_editor_scenario
from prefect import flow
from src import get_file_path, get_work_dir
SCENARIO_FILE = "scenarios/faktury.json"
PROFILE_FILE = "data/robot_profile.json"
@flow(log_prints=True, name="Zpracovani faktur")
def main() -> None:
result = run_editor_scenario(
get_file_path(SCENARIO_FILE),
profile=get_file_path(PROFILE_FILE),
is_prod=True,
)
if not result.success:
raise RuntimeError("Scenario failed: " + result.error_summary)
if __name__ == "__main__":
main.from_source(
source=AiviroGitDockerStorage(project_path=get_work_dir(), git_branch="main"),
entrypoint="flows/flow_faktury.py:main",
).deploy(
name="main",
work_pool_name="aiviro-local",
work_queue_name="default",
cron="0 6 * * *",
job_variables={aiviro.AIVIRO_DEBUG_KEY: "0"},
)
Co si v kopii upravit
| Hodnota | Význam |
|---|---|
SCENARIO_FILE, PROFILE_FILE | Cesty ke scénáři a profilu robota. Píší se od kořene projektu a používají lomítka /, protože je čte server. |
name u @flow | Název, pod kterým flow uvidíte v Prefectu. |
entrypoint | Musí přesně odpovídat umístění a názvu souboru, jinak jej server nenajde. |
git_branch | Větev, ze které se má scénář brát. |
cron | Kdy se má scénář spouštět. Hodnota None znamená jen ruční spouštění. |
is_prod | True pro ostrý běh, False pro testovací. |
Scénář i profil musí být uložené v projektu a nahrané v gitu — server je při běhu čte odtamtud, ne z vašeho počítače.
Python API
run_editor_scenario je jednorázová obálka a přijímá víc, než ukazuje šablona:
| Parametr | Význam |
|---|---|
scenario | Cesta k .json, nebo už načtený scénář. |
profile | Cesta k profilu, nebo načtený objekt profilu. |
robot | Existující robot, proti kterému se má běžet, místo profile. Musí být zadán právě jeden z profile / robot. |
is_prod | True (výchozí) pro ostrý běh, False pro testovací. |
run_log_path | Kam zapsat záznam běhu .zip. |
wait_after | Kolik sekund počkat po dokončení scénáře. |
config_variables | Proměnné vložené do běhu před jeho startem — obdoba --config v API. |
vault_export | Vyexportovaný trezor, ze kterého běh vezme tajemství — obdoba --vault-file v API. |
Vrací výsledek s poli success, error_summary a run_log_path.
Když potřebujete spustit víc scénářů proti jednomu robotovi, použijte přímo EditorRunner
místo opakovaného volání run_editor_scenario — robota připojí jednou a znovu ho použije, čímž
u každého scénáře ušetříte celé připojení a nastartování.
Kontrolní seznam před nasazením bez editoru
- Všechny přihlašovací údaje jsou v trezoru a běh se k nim dostane: buď
klíče existují v klíčence stroje, který bude scénář spouštět, nebo předáte vyexportovaný
soubor
.vaultpřepínačem--vault-file, který žádnou klíčenku nepotřebuje. - V produkci neběží žádný Vstupní formulář ani jiná interaktivní akce.
- Scénář končí hlášením — viz Aby scénář přežil běh bez obsluhy.
- Je nastavené
--run-log, aby po neúspěšném běhu zůstalo co číst. - Profil robota na cílovém stroji má správnou adresu, přihlašovací údaje a monitor.