Så här använder du variabler och parametrar på ett säkert sätt i pipelinen

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

I den här artikeln beskrivs hur du på ett säkert sätt använder variabler och parametrar för att samla in indata från pipelineanvändare. Om du vill veta mer om hur du använder variabler och parametrar kan du läsa:

Var försiktig med hemliga variabler. De rekommenderade sätten att ange hemliga variabler finns i användargränssnittet, i en variabelgrupp och i en variabelgrupp från Azure Key Vault. Mer information finns i ange hemliga variabler.

Variabler

Variabler kan vara ett bekvämt sätt att samla in information från användaren i förväg. Du kan också använda variabler för att skicka data från steg till steg i en pipeline.

Men använd variabler med försiktighet. Nyligen skapade variabler, oavsett om de definieras i YAML eller skrivs av ett skript, skrivs som standard. Ett nedströmssteg kan ändra värdet för en variabel på ett sätt som du inte förväntar dig.

Skriptet läser till exempel:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Ett föregående steg kan ställas in MyConfigDebug & deltree /y c:. Även om det här exemplet bara skulle ta bort innehållet i byggagenten kan du föreställa dig hur den här inställningen lätt kan bli mycket farligare.

Du kan göra variabler skrivskyddade. Systemvariabler som Build.SourcesDirectory, aktivitetsutdatavariabler och kötidsvariabler är alltid skrivskyddade. Variabler som skapas i YAML eller skapas vid körning av ett skript kan anges som skrivskyddade. När ett skript eller en uppgift skapar en ny variabel kan den isReadonly=true skicka flaggan i loggningskommandot för att göra variabeln skrivskyddad.

I YAML kan du ange skrivskyddade variabler med hjälp av en specifik nyckel:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Kötidsvariabler

När du definierar en variabel i redigeraren för pipelines-användargränssnittet kan du välja att låta användarna åsidosätta dess värde när de kör pipelinen. Vi kallar en sådan variabel för en kötidsvariabel. Kötidsvariabler definieras alltid i redigeraren för pipelines-användargränssnittet.

Skärmbild av hur du definierar en kötidsvariabel.

Kötidsvariabler exponeras för slutanvändaren när de kör en pipeline manuellt och de kan ändra sina värden. Skärmbild av uppdatering av värdet för en kötidsvariabel.

Användare behöver behörighet att redigera köversionskonfiguration på pipelinen för att ange variabler som angetts vid kötid.

Begränsa variabler som kan ställas in vid kötid

Användargränssnittet och REST-API:et som används för att köra en pipeline ger användarna möjlighet att definiera nya variabler i kö.

Skärmbild av att lägga till en kötidsvariabel precis innan du kör pipelinen.

När Azure Pipelines var nytt hade den här funktionen vissa problem:

  • Det gjorde det möjligt för användare att definiera nya variabler som inte uttryckligen definieras av pipelineförfattaren i definitionen.
  • Det gjorde det möjligt för användare att åsidosätta systemvariabler.

För att åtgärda dessa problem definierade vi en inställning för att begränsa variabler som kan ställas in vid kötid. Med den här inställningen aktiverad kan endast de variabler som uttryckligen markerats som ”Kan anges vid kötid” anges. Med andra ord kan du ange alla variabler vid kötid om inte den här inställningen är aktiverad.

Inställningen är utformad för att fungera på organisationsnivå och på projektnivå.

  1. Organisationsnivå. När inställningen är aktiverad framtvingar den att för alla pipelines i alla projekt i organisationen kan endast de variabler som uttryckligen är markerade som "Settable at queue time" anges. När inställningen är inaktiverad kan varje projekt välja om variabler som ska anges i kö ska begränsas eller inte. Inställningen är en växlingsknapp under Organisations Inställningar –> Pipelines –> Inställningar. Det är bara projektsamlingsadministratörer som kan aktivera eller inaktivera den. Skärmbild av begränsning av variabler som kan ställas in vid kötid på organisationsnivå.
  2. Projektnivå. När inställningen är aktiverad framtvingar den att endast de variabler som uttryckligen har markerats som "Settable at queue time" kan anges för alla pipelines i projektet. Om inställningen är aktiverad på organisationsnivå är den aktiverad för alla projekt och kan inte inaktiveras. Inställningen är en växlingsknapp under Project Inställningar –> Pipelines –> Inställningar. Endast projektadministratörer kan aktivera eller inaktivera det. Skärmbild av begränsning av variabler som kan ställas in vid kötid på projektnivå.

Låt oss titta på ett exempel. Anta att inställningen är på och att pipelinen definierar en variabel med namnet my_variable som inte kan ställas in vid kötiden. Skärmbild av att definiera en variabel i en klassisk pipeline.

Anta sedan att du vill köra pipelinen. Panelen Variabler visar inga variabler och knappen Lägg till variabel saknas.

Skärmbild av variabelpanelen med inställningen på.

Om du använder REST API-anropen Builds – Queue and the Runs – Run Pipeline för att köa en pipelinekörning och ange värdet my_variable för eller för en ny variabel misslyckas det med ett fel som liknar följande.

{
  "$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
}

Parametrar

Till skillnad från variabler kan pipelineparametrar inte ändras av en pipeline när den körs. Parametrar har datatyper som number och string, och de kan begränsas till en delmängd av värden. Det är användbart att begränsa parametrarna när en användarkonfigurerbar del av pipelinen endast ska ta ett värde från en begränsad lista. Konfigurationen säkerställer att pipelinen inte tar godtyckliga data.

Aktivera parameterverifiering för shell-uppgifter

Pipelines kan referera till uppgifter som körs i pipelinen. Flera aktiviteter som ingår i Azure DevOps har en argumentparameter som gör att du kan ange fler alternativ för aktiviteten.

När inställningen Aktivera shell tasks-argument parameterverifiering är aktiverad granskas argumentparametern för alla tecken som kanske inte körs korrekt av gränssnittet. Exempeltecken är semikolon, citattecken och parenteser.

På samma sätt som med alternativet Gränsvariabler som kan ställas in vid kötid kan parameterverifiering av parametervalidering av skaluppgifter konfigureras på organisationsnivå på Inställningar> Pipelines> Inställningar eller på projektnivå på Inställningar> Pipelines>Inställningar.

När det är aktiverat finns det ett identifierat valideringsproblem, ett felmeddelande som liknar följande loggas: 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 argumenten genom att undvika specialtecken som anges i felmeddelandet.

När Parameterverifiering av parametern Aktivera shell-uppgifter har aktiverats tillämpas valideringen på argumentparametern i följande uppgifter.

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Nästa steg

När du har skyddat dina indata måste du också skydda din delade infrastruktur.