Bezpečné použití proměnných a parametrů v kanálu
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Naučte se bezpečně využívat proměnné a parametry ke shromažďování vstupu od uživatelů kanálu. Další informace najdete v následujících článcích:
- Definování proměnných
- Nastavení tajných proměnných
- Použití předdefinovaných proměnných
- Použití parametrů modulu runtime
- Použití typů šablon
Buďte opatrní pomocí tajných proměnných. Mezi doporučené metody nastavení tajných proměnných patří použití uživatelského rozhraní, vytvoření skupiny proměnných nebo využití skupiny proměnných ze služby Azure Key Vault. Další informace najdete v tématu nastavení tajných proměnných.
Proměnné
Proměnné slouží jako praktická metoda shromažďování uživatelských vstupů předem a usnadnění přenosu dat mezi kroky kanálu. Při práci s proměnnými ale buďte opatrní. Nově vytvořené proměnné, ať už definované v JAZYCE YAML nebo skriptované, jsou ve výchozím nastavení pro čtení i zápis. Podřízené kroky mohou neočekávaně měnit hodnoty proměnných.
Představte si například následující fragment kódu skriptu:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Pokud se předchozí krok nastaví MyConfig
na Debug & deltree /y c:
, může to vést k nezamýšleným důsledkům. I když tento příklad pouze odstraní obsah agenta sestavení, zvýrazní potenciální nebezpečí těchto nastavení.
Proměnné můžete nastavit jen pro čtení.
Systémové proměnné jako Build.SourcesDirectory
, výstupní proměnné úkolů a proměnné fronty jsou vždy jen pro čtení.
Proměnné vytvořené v YAML nebo vytvořené v době běhu pomocí skriptu lze určit jako jen pro čtení.
Když skript nebo úloha vytvoří novou proměnnou, může isReadonly=true
předat příznak v příkazu protokolování, aby proměnná byla jen pro čtení.
V YAML můžete zadat proměnné jen pro čtení pomocí následujícího konkrétního klíče:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Proměnné fronty a času
Při definování proměnné v editoru uživatelského rozhraní Pipelines můžete uživatelům povolit přepsání jeho hodnoty během provádění kanálu. Tyto proměnné se označují jako proměnné fronty a jsou vždy definovány v editoru uživatelského rozhraní Pipelines.
Proměnné fronty jsou koncovému uživateli zpřístupněny při ručním spuštění kanálu a můžou změnit jejich hodnoty.
Uživatelé potřebují oprávnění upravit konfiguraci sestavení fronty v kanálu k určení proměnných nastavených v době fronty.
Omezení proměnných, které je možné nastavit v době fronty
Uživatelské rozhraní a rozhraní REST API používané ke spuštění kanálu poskytují uživatelům možnost definovat nové proměnné v době fronty.
V prvních dnech služby Azure Pipelines měla tato funkce následující problémy:
- Umožňuje uživatelům definovat nové proměnné, které ještě nedefinuje autor kanálu v definici.
- Umožňovala uživatelům přepsat systémové proměnné.
Abychom tyto problémy vyřešili, definovali jsme nastavení pro omezení proměnných, které je možné nastavit v době fronty. Když je toto nastavení zapnuté, je možné nastavit pouze tyto proměnné, které jsou explicitně označené jako Settable at queue time (Nastavitelné v době fronty). Jinými slovy, můžete nastavit jakékoli proměnné v době fronty, pokud není toto nastavení zapnuté.
Nastavení je navržené tak, aby fungovalo na úrovni organizace a projektu.
- Úroveň organizace:
- Když je nastavení zapnuté, vynucuje, aby se pro všechny kanály ve všech projektech v organizaci explicitně označené jako Settable at queue time (Nastavitelné v době fronty) explicitně označovaly jenom proměnné.
- Správci kolekce projektů můžou toto nastavení povolit nebo zakázat.
- Přístup k tomuto nastavení najdete v části Nastavení> kanálů>organizace.
- Úroveň projektu:
- Podobně jako na úrovni organizace je povolením tohoto nastavení zajištěno, že u všech kanálů v rámci konkrétního projektu je možné upravit pouze proměnné označené jako Settable at queue time (Nastavit v době fronty).
- Pokud je nastavení na úrovni organizace povolené, platí pro všechny projekty a nejde ho vypnout.
- Správci projektů můžou toto nastavení povolit nebo zakázat.
- Přístup k tomuto nastavení v části Nastavení> kanálů projectu.>
Následující příklad ukazuje, že je nastavení zapnuté a váš kanál definuje proměnnou, my_variable
která není v době fronty nastavená.
Dále předpokládejme, že chcete kanál spustit. Panel Proměnné nezobrazuje žádné proměnné a chybí tlačítko Přidat proměnnou .
Použití sestavení – Fronta a Spuštění – Volání rozhraní REST API kanálu pro frontu spuštění kanálu a nastavení hodnoty my_variable
nebo nové proměnné selže s chybou podobnou následující.
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Parametry
Na rozdíl od proměnných nemůže spuštěný kanál upravovat parametry kanálu.
Parametry mají datové typy, například number
a string
a mohou být omezeny na konkrétní podmnožinu hodnot. Toto omezení je užitečné, když by uživatel konfigurovatelný aspekt kanálu měl přijímat pouze hodnoty z předdefinovaného seznamu a zajistit, aby kanál nepřijme libovolná data.
Povolení ověření parametru argumentů úloh prostředí
Kanály můžou odkazovat na úlohy spuštěné v rámci kanálu. Některé úkoly zahrnují arguments
parametr, který umožňuje zadat další možnosti úkolu.
Pokud je povolené nastavení Povolit ověření argumentů úkolů prostředí, projde parametr argumentů kontrolou, aby se zajistilo, že prostředí správně spouští znaky, jako jsou středníky, uvozovky a závorky. Podobně jako u proměnných limitu, které je možné nastavit v době fronty, můžete v části Nastavení> kanálu>kanálu nakonfigurovat ověření parametru povolit argumenty úkolů prostředí na úrovni organizace nebo projektu.
Pokud je tato funkce zapnutá, všechny problémy s ověřením související s parametrem arguments
aktivují chybovou zprávu, například následující:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Chcete-li tento problém vyřešit, upravte argumenty tak, že uvozíte speciální znaky, jak je uvedeno v chybové zprávě. Toto ověření se vztahuje na arguments
parametr v následujících konkrétních úlohách:
- PowerShell
- BatchScript
- Bash
- SSH
- AzureFileCopy
- WindowsMachineFileCopy