Přeskočit na hlavní obsah
Verze: 0.25.0

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.

Kdy použít co
PotřebaPoužijte
Plánované běhy, kdy editor zůstává otevřený na stanici nebo na VMOrchestrator
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 CESTASoubor .json se scénářem. Povinné.
--profile CESTAProfil robota, proti kterému se scénář spustí. Povinné.
--prod / --testOstrý nebo testovací režim. Výchozí je --prod, takže scénář běží ostře, dokud nepředáte --test.
--run-log CESTAUloží 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 CESTASoubor .vault vyexportovaný z Editoru, ze kterého běh vezme tajemství. Viz Tajemství bez klíčenky.
--config CESTASoubor 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, -lAIVIRO__LOG_TO_CONSOLELoguje do konzole — to chcete ve výstupu CI.
--debugAIVIRO__DEBUGZapne 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"
varování

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.

tip

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.

varování

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​

HodnotaVýznam
SCENARIO_FILE, PROFILE_FILECesty 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 @flowNázev, pod kterým flow uvidíte v Prefectu.
entrypointMusí přesně odpovídat umístění a názvu souboru, jinak jej server nenajde.
git_branchVětev, ze které se má scénář brát.
cronKdy se má scénář spouštět. Hodnota None znamená jen ruční spouštění.
is_prodTrue pro ostrý běh, False pro testovací.
varování

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:

ParametrVýznam
scenarioCesta k .json, nebo už načtený scénář.
profileCesta k profilu, nebo načtený objekt profilu.
robotExistující robot, proti kterému se má běžet, místo profile. Musí být zadán právě jeden z profile / robot.
is_prodTrue (výchozí) pro ostrý běh, False pro testovací.
run_log_pathKam zapsat záznam běhu .zip.
wait_afterKolik sekund počkat po dokončení scénáře.
config_variablesProměnné vložené do běhu před jeho startem — obdoba --config v API.
vault_exportVyexportovaný 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.

tip

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 .vault př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.