Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
I Azure Pipelines kan du tillåta användare att anpassa pipelinekörning genom att samla in sina indata med variabler och parametrar. Att acceptera användarindata kan dock också medföra säkerhetsrisker om de inte hanteras korrekt. I den här artikeln får du lära dig hur du på ett säkert sätt använder variabler och parametrar i din pipeline.
Den här artikeln är en del av en serie som hjälper dig att implementera säkerhetsåtgärder för Azure Pipelines. Mer information finns i Skydda Azure Pipelines.
Förutsättningar
| Kategori | Krav | 
|---|---|
| Azure DevOps | – Implementera rekommendationerna i Gör dina Azure DevOps säkra och Säkra Azure Pipelines.   – Grundläggande kunskaper om YAML och Azure Pipelines. Mer information finns i Skapa din första pipeline.  | 
| Behörigheter | – Ändra pipelinebehörigheter: Medlem i gruppen Projektadministratörer.  – Ändra organisationsbehörigheter: Medlem i gruppen Projektsamlingsadministratörer.  | 
Variabler
Variabler är ett bekvämt sätt att samla in användarindata i förväg och underlätta dataöverföring mellan pipelinesteg. Variabler som definieras i YAML-uppgifter eller -skript är dock skrivskyddade som standard. Värden som anges i uppströmssteg kan oväntat ändra underordnade värden.
Följande skriptfragment anropar till exempel en variabel med namnet MyConfig.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Om ett föregående steg anger MyConfig variabelvärdet till Debug & deltree /y c:tar körningen av det här skriptet bort innehållet i byggagenten och kan leda till oavsiktliga konsekvenser. Det här exemplet belyser den potentiella faran med sådana inställningar.
Systemvariabler som Build.SourcesDirectory och aktivitetsutdatavariabler är alltid skrivskyddade. Du kan också ange en variabel som skapats i ett skript eller en YAML-uppgift som skrivskyddad genom att skicka isReadonly=true flaggan i loggningskommandot.
I en YAML-variabeldefinition kan du ange en skrivskyddad variabel med hjälp av den specifika readonly nyckeln:
variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true
Var särskilt försiktig med hemliga variabler. De rekommenderade metoderna för att ange hemliga variabler är att använda användargränssnittet, skapa en variabelgrupp eller använda en variabelgrupp som kommer från Azure Key Vault. Mer information finns i Ange hemliga variabler.
Kötidsvariabler
När du definierar en variabel i Azure Pipelines-användargränssnittet kan du välja om du vill tillåta att användare åsidosätter värdet under pipelinekörningen. Variabler som gör det möjligt för användare att ange sitt värde vid kötid kallas kötidsvariabler och kan endast definieras i användargränssnittet för Azure Pipelines-variabler .
I den klassiska pipelineredigeraren definierar du kötidsvariabeln genom att markera kryssrutan för Settable vid kötid. I YAML-pipelines anger du dem genom att välja Låt användare åsidosätta det här värdet när de kör den här pipelinen.
Anmärkning
I en versionspipeline väljer du Settable vid lanseringstillfället. Mer information finns i Hur kan jag redigera variabler vid lansering?
              
              
              
              
            
När en användare kör pipelinen manuellt kan de välja kötidsvariabler och ändra värdena.
              
              
              
              
            
Användare måste ha behörighet att redigera köversionskonfiguration på en pipeline för att kunna definiera variabler som anges vid kötiden.
Begränsa variabler som kan ställas in vid kötid
Användargränssnittet för Azure Pipelines och REST-API:et som kör en pipeline ger användarna olika sätt att lägga till nya variabler i kö. Med den här möjligheten kan användare skapa variabler som pipelineförfattaren inte definierade, åsidosätta systemvariabler och ange värden för befintliga variabler i kö.
              
              
              
              
            
För att undvika problem som orsakas av dessa funktioner kan du begränsa variabler som kan ställas in vid kötid. Du kan aktivera inställningen Gränsvariabler som kan ställas in vid kötid så att användarna bara kan ange variabler som uttryckligen är markerade som Settable vid kötid eller Låt användare åsidosätta det här värdet när de kör pipelinen vid kötid.
Den här inställningen kan användas på organisations- och projektnivå.
              
              
              
              
            
Projektsamlingsadministratörer kan tillämpa den här inställningen på organisationsnivå i Inställningar för organisationsinställningar>Pipelines>. När inställningen är På kan endast variabler som uttryckligen markeras som Settable vid kötid anges vid kötid för alla pipelines i alla projekt i organisationen.
              
              
              
              
            
Projektadministratörer kan använda den här inställningen på projektnivå iInställningar för pipelines> för projektinställningar>. När inställningen är På kan endast variabler som uttryckligen markeras som Settable vid kötid anges vid kötid för alla pipelines i det här projektet. Om inställningen inte är aktiverad på organisationsnivå kan den aktiveras eller inaktiveras för enskilda projekt.
Om inställningen på organisationsnivå är aktiverad gäller den för alla projekt i organisationen och kan inte inaktiveras på projektnivå.
              
              
              
              
            
I följande exempel visas variablerna för en klassisk pipeline, där några av dem har markerats som Settable vid kötid. Variabeln BuildPlatform kan ställas in vid kötid, men BuildConfiguration det går inte.
              
              
              
              
            
När du kör den här pipelinen visas endast variablerna som markerats som Settable vid kötid på skärmen Variabler som ska väljas .
              
              
              
              
            
Om Gränsvariabler som kan anges vid kötiden är aktiverade på projekt- eller organisationsnivå visas inte knappen Lägg till variabel .
              
              
              
              
            
Användning av API: er för byggen – Kö eller Körningar – Kör pipeline för att köa en pipelinekörning och försöka ange värdet för en variabel som inte är markerad som Settable vid kötiden misslyckas med ett fel som liknar följande:
{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (BuildConfiguration). 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
}
Parametrar
En pipeline som körs kan inte ändra pipelineparametrar, till skillnad från variabler. Parametrar har datatyper som number och string, och kan begränsas till specifika värdeunderuppsättningar. Den här begränsningen är värdefull när en användarkonfigurerbar aspekt av pipelinen endast ska acceptera värden från en fördefinierad lista, vilket säkerställer att pipelinen inte accepterar godtyckliga data.
Aktivera validering av shell-uppgiftsargument
Pipelines kan referera till uppgifter som körs i pipelinen. Vissa uppgifter innehåller en arguments parameter som gör att användarna kan ange fler alternativ för uppgiften.
Om du använder verifieringsinställningen Aktivera gränssnittsuppgifter valideras argument parametrar för inbyggda gränssnittsuppgifter för att söka efter indata som kan mata in kommandon i skript. Kontrollen säkerställer att gränssnittet korrekt kör tecken som semikolon, citattecken och parenteser i följande pipelineuppgifter:
- PowerShell
 - BatchScript (på engelska)
 - Våldsamt slag
 - SSH (SSH)
 - AzureFileCopy
 - WindowsMachineFileCopy
 
Du kan använda Validering av argument för Aktivera gränssnittsuppgifter på organisationsnivå underInställningar för pipelines> för organisationsinställningar> eller på projektnivå underPipelineinställningar för>projektinställningar>. Om inställningen på organisationsnivå är aktiverad gäller den för alla projekt i organisationen och kan inte inaktiveras på projektnivå.
När den här inställningen är aktiverad utlöser alla valideringsproblem som rör en arguments parameter följande felmeddelande:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Lös problemet genom att justera argumentet genom att undvika specialtecken som anges i felmeddelandet.