Delen via


Veilig variabelen en parameters in uw pijplijn gebruiken

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

Leer hoe u veilig variabelen en parameters gebruikt om invoer van pijplijngebruikers te verzamelen. Raadpleeg voor meer informatie de volgende artikelen:

Wees voorzichtig met geheime variabelen. De aanbevolen methoden voor het instellen van geheime variabelen zijn onder andere het gebruik van de gebruikersinterface, het maken van een variabelegroep of het gebruik van een variabelegroep die afkomstig is uit Azure Key Vault. Zie Geheime variabelen instellen voor meer informatie.

Variabelen

Variabelen fungeren als een handige methode om gebruikersinvoer vooraf te verzamelen en gegevensoverdracht tussen pijplijnstappen te vergemakkelijken. Wees echter voorzichtig bij het werken met variabelen. Nieuw gemaakte variabelen, ongeacht of deze zijn gedefinieerd in YAML of in scripts, zijn standaard lezen/schrijven. Downstreamstappen kunnen variabele waarden onverwacht wijzigen.

Denk bijvoorbeeld aan het volgende scriptfragment:

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

Als een voorgaande stap is ingesteld MyConfig Debug & deltree /y c:op, kan dit leiden tot onbedoelde gevolgen. Hoewel in dit voorbeeld alleen de inhoud van uw buildagent wordt verwijderd, wordt het potentiële gevaar van dergelijke instellingen gemarkeerd.

U kunt variabelen alleen-lezen maken. Systeemvariabelen zoals Build.SourcesDirectorytaakuitvoervariabelen en wachtrijtijdvariabelen zijn altijd alleen-lezen. Variabelen die zijn gemaakt in YAML of die tijdens runtime door een script worden gemaakt, kunnen worden aangeduid als alleen-lezen. Wanneer een script of taak een nieuwe variabele maakt, kan deze de vlag doorgeven in de isReadonly=true logboekregistratieopdracht om de variabele alleen-lezen te maken.

In YAML kunt u alleen-lezenvariabelen opgeven met behulp van de volgende specifieke sleutel:

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

Variabelen voor wachtrijtijd

Wanneer u een variabele definieert in de gebruikersinterface-editor voor pijplijnen, kunt u toestaan dat gebruikers de waarde ervan overschrijven tijdens de uitvoering van de pijplijn. Deze variabelen worden wachtrij-tijdvariabelen genoemd en worden altijd gedefinieerd in de gebruikersinterface-editor voor pijplijnen.

Schermopname van het definiëren van een variabele voor wachtrijtijd.

Variabelen voor wachtrijtijd worden beschikbaar gesteld aan de eindgebruiker wanneer ze handmatig een pijplijn uitvoeren en ze kunnen hun waarden wijzigen. Schermopname van het bijwerken van de waarde van een variabele in de wachtrijtijd.

Gebruikers moeten de samenstellingsmachtiging voor de wachtrij bewerken voor de pijplijn om variabelen op te geven die zijn ingesteld op het tijdstip van de wachtrij.

Variabelen beperken die kunnen worden ingesteld op het tijdstip van de wachtrij

De gebruikersinterface en REST API die worden gebruikt om een pijplijn uit te voeren, bieden gebruikers de mogelijkheid om nieuwe variabelen te definiëren op het moment van de wachtrij.

Schermopname van het toevoegen van een variabele voor wachtrijtijd vlak voordat u de pijplijn uitvoert.

In de vroege dagen van Azure Pipelines had deze functionaliteit de volgende problemen:

  • Gebruikers kunnen nieuwe variabelen definiëren die nog niet zijn gedefinieerd door de auteur van de pijplijn in de definitie.
  • Gebruikers konden systeemvariabelen overschrijven.

Om deze problemen op te lossen, hebben we een instelling gedefinieerd om variabelen te beperken die tijdens de wachtrij kunnen worden ingesteld. Als deze instelling is ingeschakeld, kunnen alleen de variabelen die expliciet zijn gemarkeerd als 'Settable at queue time' worden ingesteld. Met andere woorden, u kunt eventuele variabelen instellen op het moment van de wachtrij, tenzij deze instelling is ingeschakeld.

De instelling is ontworpen om te werken op organisatie- en projectniveau.

  • Organisatieniveau:
    • Wanneer de instelling is ingeschakeld, wordt afgedwongen dat alleen variabelen die expliciet zijn gemarkeerd als 'Settable at queue time' kunnen worden gewijzigd voor alle pijplijnen in alle projecten binnen de organisatie.
    • Beheerders van projectverzamelingen kunnen deze instelling in- of uitschakelen.
    • Toegang tot deze instelling onder Instellingen voor organisatie-pijplijnen>>. Schermopname van het beperken van variabelen die op wachtrijtijd op organisatieniveau kunnen worden ingesteld.
  • Projectniveau:
    • Net als op organisatieniveau zorgt het inschakelen van deze instelling ervoor dat alleen variabelen die zijn gemarkeerd als 'Settable at queue time' kunnen worden gewijzigd voor alle pijplijnen binnen het specifieke project.
    • Als de instelling op organisatieniveau is ingeschakeld, is deze van toepassing op alle projecten en kan deze niet worden uitgeschakeld.
    • Projectbeheerders kunnen deze instelling in- of uitschakelen.
    • Toegang tot deze instelling onder Instellingen voor projectinstellingen>pijplijnen.> Schermopname van het beperken van variabelen die kunnen worden ingesteld op wachtrijtijd op projectniveau.

In het volgende voorbeeld ziet u dat de instelling is ingeschakeld en uw pijplijn definieert een variabele met de naam my_variable die niet is ingesteld tijdens de wachtrij. Schermopname van het definiëren van een variabele in een klassieke pijplijn.

Stel vervolgens dat u de pijplijn wilt uitvoeren. In het deelvenster Variabelen worden geen variabelen weergegeven en de knop Variabele toevoegen ontbreekt.

Schermopname van het deelvenster Variabelen met de instelling ingeschakeld.

Met behulp van builds - queue and the Runs - Run Pipeline REST API calls to queue a pipeline run and set the value of my_variable a new variable fail with an error similar to the following.

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

Parameters

In tegenstelling tot variabelen kan een actieve pijplijn geen pijplijnparameters wijzigen. Parameters hebben gegevenstypen zoals number en string, en ze kunnen worden beperkt tot specifieke waardesubsets. Deze beperking is waardevol wanneer een door de gebruiker configureerbaar aspect van de pijplijn alleen waarden uit een vooraf gedefinieerde lijst mag accepteren, zodat de pijplijn geen willekeurige gegevens accepteert.

Parametervalidatie voor shell-taken inschakelen

Pijplijnen kunnen verwijzen naar taken die in de pijplijn worden uitgevoerd. Sommige taken bevatten een arguments parameter waarmee u meer opties voor de taak kunt opgeven.

Wanneer de instelling Parametervalidatie voor shell-taken inschakelen is ingeschakeld, wordt de parameter argumenten gecontroleerd om ervoor te zorgen dat de shell tekens zoals puntkomma's, aanhalingstekens en haakjes correct uitvoert. Net als bij de optie Limietvariabelen die kunnen worden ingesteld bij de optie Voor wachtrijtijd, kunt u parametervalidatie voor shell-taken inschakelen configureren op organisatie- of projectniveau onder Instellingen> voor pijplijnen.>

Wanneer deze functie is ingeschakeld, activeren eventuele validatieproblemen met betrekking tot de arguments parameter een foutbericht zoals de volgende:

Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

U kunt dit probleem oplossen door de argumenten aan te passen door speciale tekens te ontsnappen, zoals aangegeven in het foutbericht. Deze validatie is van toepassing op de arguments parameter in de volgende specifieke taken:

  • Powershell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Volgende stappen