V nedávných příspěvcích (zde a zde) jsem prezentoval PowerShellový modul zjednodušující některé administrační úkony ohledně Dynamics AX. Slíbil jsem také ukázat jeho využití v buildech s i bez Team Foundation Serveru.
Využití TFS Buildu má své výhody – třeba pro logování a oznamování výsledků, automatické vytváření pracovních položek při selhání buildu a podobně. Bez TFS si musíme vše potřebné implementovat sami – ale reálně TFS používá jen menšina firem, takže nějaké TFS-free řešení je často nezbytné.
Tento článek pojednává o jednom takovém skriptu – chci zejména předvést, jak snadno lze v PowerShellu vytvořit infrastrukturu pro logování průběhu buildu a odesílání výsledků.
Funkce
Skript jsem vyvinul a reálně používám pro aktualizace vývojových prostředí, ne pro plnohodnotné buildy. Dokáže zkompilovat AX aplikaci, aktualizovat křížové reference, restartovat AOS apod. Průběh buildu se loguje do souboru a pokud je to nastaveno, výsledky včetně logu jsou odeslány e-mailem.
Obsah logu vypadá například takto:
Dynamics AX 2012 Automated Build Run by: mdrab AX config: X:\AxConfig\DEV.axc ========== [19:20:24] Started [19:20:24] Restarting AOS [19:22:56] AOS restarted [19:22:56] Compiling application [22:22:48] Application compiled X++ compilation errors: 4 [22:22:48] Compiling IL [22:37:07] IL compiled [22:37:07] Synchronizing database [22:47:20] Database synchronized [22:47:20] Finished
Takto vypadá e-mail o úspěšném buildu (to v tomto skriptu znamená, že proběhly všechny kroky, ne nutně bez kompilačních chyb). Všimněte si přiloženého logu a výsledků kompilace.
Pokud build selže, obsahuje e-mail text výjimky a popis místa, kde k chybě došlo:
Download
Script je umístěn ve stejném CodePlexovém projektu jako DynamicsAxCommunity modul, konkrétně zde.
Předpoklady
Skript vyžaduje modul DynamicsAxCommunity – ten musí být nainstalován buďto v nějakém PowerShellovém profilu, nebo případně přímo ve skriptu. Předpokládá také, že je spuštěn na stejném počítači jako AOS.
Další požadavky závisí na prováděných akcích. Jde například o přístup do Dynamics AX (na to nezapomeňte zejména když vytváříte plánovanou úlohu běžící pod jiným uživatelem).
Popis skriptu
Skript vyžaduje jediný parametr – cestu ke klientské konfiguraci Dynamics AX:
param ( [Parameter(Mandatory=$true)] [string]$axConfigFile )
Skript je rozdělen do regionů, které názorně ukazují jeho strukturu:
V regionu Process definition můžete určit, které kroky se budou provádět:
$restartAos = $true $runCompilation = $true $runCompilationToIL = $true $runSynchronization = $true $runXref = $true
a jak dlouho se má čekat na jejich dokončení:
$compilationTimeout = (New-TimeSpan -Hours 4).TotalSeconds $ilCompilationTimeout = (New-TimeSpan -Minutes 30).TotalSeconds $synchronizationTimeout = (New-TimeSpan -Minutes 30).TotalSeconds $xrefTimeout = (New-TimeSpan -Hours 6).TotalSeconds $xrefIndexTimeout = (New-TimeSpan -Minutes 30).TotalSeconds
V regionu E-mail parameters určujete, zda se má odeslat e-mail s výsledky, SMTP server atd.
Ve Variables se inicializuje několik proměnných, například $logFileName.
Functions obsahuje dvě funkce – LogMessage
zapisující zprávu do logovacího souboru a SendEmail
odesílající e-mail s výsledky.
Region Error handling využívá příkaz trap
k zachycení a zalogování výjimek.
V Initialization se provádí trocha špinavé práce – validace vstupu a inicializace logovacího souboru.
Region Process provádí vlastní build. Vždy se kontroluje, zda se má patřičný krok provést, loguje se start a konec a volá se funkce z modulu DynamicsAxCommunity. Viz například synchronizaci databáze:
if ($runSynchronization) { LogMessage "Synchronizing database" -AppendTime Synchronize-AXDatabase -LogPath $logdir -Timeout $synchronizationTimeout LogMessage "Database synchronized" -AppendTime }
Nakonec region Send status e-mail odešle e-mail, pokud všechno proběhlo úspěšně.
Automatické spuštění
Pro automatické spouštění se výborně hodí plánovač úloh ve Windows – podporuje odložený start, periodické spouštění a případně i další aktivační události.
V plánovači úloh vytvořte novou úlohu a jako akci zvolte spuštění programu. V poli Program/script uveďte powershell.exe a do Add arguments zadejte -NonInteractive -File “cesta ke skriptu.ps1” “cesta ke konfiguraci.axc”. Nezapomeňte na Předpoklady.
Závěr
Tento skript není bůhvíjak univerzální – dělal jsem ho pro podmínky na mém projektu a velmi pravděpodobně vám nebude přesně vyhovovat. Ale jeho architekturu považuji za dostatečně jednoduchou i užitečnou zároveň – a je na vás, abyste si ho uzpůsobili po svém.
V tuto chvíli většina partnerů spravuje prostředí ručně, což má za následek neustálé potíže se špatně zkompilovanými aplikacemi, pozdě odhalenými chybami, zastaralými křížovými referencemi a tak dále. Automatizace je efektivním řešením těchto potíží – byla by chyba ji nevyužít.