Partilhar via


Use variáveis e parâmetros com segurança em seu pipeline

Serviços de DevOps do Azure | Azure DevOps Server 2022 | Azure DevOps Server 2020

Saiba como utilizar com segurança variáveis e parâmetros para coletar informações de usuários de pipeline. Para obter mais informações, consulte os seguintes artigos:

Tenha cuidado com variáveis secretas. Os métodos recomendados para definir variáveis secretas incluem o uso da interface do usuário, a criação de um grupo de variáveis ou a utilização de um grupo de variáveis originado do Cofre de Chaves do Azure. Para obter mais informações, consulte definir variáveis secretas.

Variáveis

As variáveis servem como um método conveniente para coletar a entrada do usuário antecipadamente e facilitar a transferência de dados entre as etapas do pipeline. No entanto, tenha cuidado ao trabalhar com variáveis. Por padrão, as variáveis recém-criadas, definidas em YAML ou com script, são leitura-gravação. As etapas a jusante podem modificar valores de variáveis inesperadamente.

Por exemplo, considere o seguinte trecho de script:

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

Se uma etapa anterior for definida MyConfig como Debug & deltree /y c:, isso pode levar a consequências indesejadas. Embora este exemplo simplesmente exclua o conteúdo do seu agente de compilação, ele destaca o perigo potencial de tais configurações.

Você pode tornar as variáveis somente leitura. Variáveis de sistema como Build.SourcesDirectory, variáveis de saída de tarefa e variáveis de tempo de fila são sempre somente leitura. As variáveis criadas no YAML ou criadas em tempo de execução por um script podem ser designadas como somente leitura. Quando um script ou tarefa cria uma nova variável, ele pode passar o sinalizador isReadonly=true em seu comando de log para tornar a variável somente leitura.

No YAML, você pode especificar variáveis somente leitura usando a seguinte chave específica:

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

Variáveis de tempo de fila

Ao definir uma variável no editor da interface do usuário do Pipelines, você pode permitir que os usuários substituam seu valor durante a execução do pipeline. Essas variáveis são chamadas de variáveis de tempo de fila e são sempre definidas no editor de interface do usuário do Pipelines.

Captura de tela da definição de uma variável de tempo de fila.

As variáveis de tempo de fila são expostas ao usuário final quando ele executa manualmente um pipeline e pode alterar seus valores. Captura de tela da atualização do valor de uma variável de tempo de fila.

Os usuários precisam da permissão Editar configuração de compilação de fila no pipeline para especificar variáveis definidas no momento da fila.

Limitar variáveis que podem ser definidas no momento da fila

A interface do usuário e a API REST usadas para executar um pipeline fornecem meios para que os usuários definam novas variáveis no momento da fila.

Captura de tela da adição de uma variável de tempo de fila pouco antes de executar o pipeline.

Nos primeiros dias do Azure Pipelines, essa funcionalidade tinha os seguintes problemas:

  • Ele permitiu que os usuários definissem novas variáveis ainda não definidas pelo autor do pipeline na definição.
  • Permitiu que os utilizadores substituíssem as variáveis do sistema.

Para resolver esses problemas, definimos uma configuração para limitar as variáveis que podem ser definidas no momento da fila. Com essa configuração ativada, somente as variáveis explicitamente marcadas como "Configurável no momento da fila" podem ser definidas. Em outras palavras, você pode definir quaisquer variáveis no momento da fila, a menos que essa configuração esteja ativada.

A configuração é projetada para trabalhar nos níveis de organização e projeto.

  • Nível de organização:
    • Quando a configuração está ativada, ela impõe que apenas as variáveis explicitamente marcadas como "Configuráveis no momento da fila" possam ser modificadas para todos os pipelines em todos os projetos dentro da organização.
    • Os Administradores de Coleção de Projetos podem habilitar ou desabilitar essa configuração.
    • Aceda a esta definição em Configurações da organização>Configurações de pipelines.> Captura de tela de variáveis limitantes que podem ser definidas no tempo de fila no nível da organização.
  • Nível do projeto:
    • Semelhante ao nível da organização, habilitar essa configuração garante que apenas as variáveis marcadas como "Configurável no momento da fila" possam ser modificadas para todos os pipelines dentro do projeto específico.
    • Se a configuração no nível da organização estiver habilitada, ela se aplicará a todos os projetos e não poderá ser desativada.
    • Os administradores de projeto podem habilitar ou desabilitar essa configuração.
    • Acesse essa configuração em Configurações do projeto>, Configurações de pipelines.> Captura de tela de variáveis limitantes que podem ser definidas no tempo de fila no nível do projeto.

O exemplo a seguir mostra que a configuração está ativada e seu pipeline define uma variável chamada my_variable que não é configurável no momento da fila. Captura de tela da definição de uma variável em um pipeline clássico.

Em seguida, suponha que você deseja executar o pipeline. O painel Variáveis não mostra nenhuma variável e o botão Adicionar variável está ausente.

Captura de ecrã do painel de variáveis com a definição ativada.

Usar as chamadas da API REST Builds - Queue and the Runs - Run Pipeline para enfileirar uma execução de pipeline e definir o valor de my_variable ou de uma nova variável falha com um erro semelhante ao seguinte.

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

Parâmetros

Ao contrário das variáveis, um pipeline em execução não pode modificar os parâmetros do pipeline. Os parâmetros têm tipos de dados como number e string, e podem ser restritos a subconjuntos de valores específicos. Essa restrição é valiosa quando um aspeto configurável pelo usuário do pipeline só deve aceitar valores de uma lista predefinida, garantindo que o pipeline não aceite dados arbitrários.

Habilitar validação de parâmetros de argumentos de tarefas do shell

Os pipelines podem fazer referência a tarefas executadas dentro do pipeline. Algumas tarefas incluem um arguments parâmetro que permite especificar mais opções para a tarefa.

Quando a configuração Habilitar validação de parâmetros de argumentos de tarefas do shell está habilitada, o parâmetro arguments passa por revisão para garantir que o shell execute corretamente caracteres como ponto-e-vírgula, aspas e parênteses. Semelhante à opção Limitar variáveis que podem ser definidas no tempo de fila, você pode configurar a validação do parâmetro Habilitar argumentos de tarefas do shell no nível da organização ou do projeto em Configurações>Configurações de Pipelines>.

Quando esse recurso é ativado, qualquer problema de validação relacionado ao arguments parâmetro dispara uma mensagem de erro como a seguinte:

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

Para resolver esse problema, ajuste os argumentos escapando caracteres especiais, conforme indicado na mensagem de erro. Esta validação aplica-se ao arguments parâmetro nas seguintes tarefas específicas:

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

Próximos passos