Compartilhar via


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

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

Saiba como utilizar variáveis e parâmetros com segurança para coletar informações de usuários do 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 usar a interface do usuário, criar um grupo de variáveis ou utilizar um grupo de variáveis originado do Azure Key Vault. Para obter mais informações, consulte definir variáveis de ambiente.

Variáveis

As variáveis servem como um método conveniente para coletar informações 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 de leitura e gravação. As etapas downstream podem modificar valores de variáveis inesperadamente.

Por exemplo, considere o seguinte snippet 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 não intencionais. Embora este exemplo apenas exclua o conteúdo do seu agente de build, ele destaca o perigo potencial de tais configurações.

Você pode tornar as variáveis somente leitura. Variáveis do sistema como Build.SourcesDirectory, variáveis de saída de tarefa e variáveis de tempo de espera são sempre somente leitura. 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 variável, ele pode passar o sinalizador isReadonly=true no próprio comando de registro em 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 espera

Ao definir uma variável no editor de 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 espera.

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

Os usuários precisam de permissão para editar a configuração de enfileiramento de builds no pipeline e especificar as variáveis definidas de tempo de espera.

Limitar as variáveis que podem ser definidas no momento da colocação na fila

A interface do usuário e a API REST usadas para executar um pipeline fornecem meios para os usuários definirem novas variáveis durante o tempo de espera.

Captura de tela da adição de uma variável de tempo de espera 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.
  • Ela permitia que os usuários 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 tempo da fila. Com essa configuração ativada, somente as variáveis explicitamente marcadas como "Settable no momento da fila" podem ser definidas. Em outras palavras, você pode definir qualquer variável no momento da fila, a menos que essa configuração esteja ativada.

O cenário foi projetado para funcionar nos níveis de organização e projeto.

  • Nível da organização:
    • Quando a configuração está ativada, ela impõe que apenas variáveis explicitamente marcadas como "Settable 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.
    • Acesse essa configuração em Configurações da>organização Configurações de pipelines>. Captura de tela das variáveis limitantes que podem ser definidas no tempo de espera 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 "Settable 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 ativar ou desativar essa configuração.
    • Acesse essa configuração em Configurações do>projeto Configurações de pipelines>. Captura de tela de limitação de variáveis que podem ser definidas no tempo de espera no nível de 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 tela do painel variáveis com a configuração ativada.

O uso das chamadas de API REST Builds – Queue e 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 aspecto configurável pelo usuário do pipeline deve aceitar apenas valores de uma lista predefinida, garantindo que o pipeline não aceite dados arbitrários.

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

Os pipelines podem fazer referência a tarefas executadas no 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âmetro 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 Habilitar validação de parâmetro de argumentos de tarefas do shell no nível da organização ou do projeto em Configurações>Configurações Configurações de Pipelines.>

Quando esse recurso é ativado, qualquer problema de validação relacionado ao arguments parâmetro aciona 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. Essa validação se aplica ao arguments parâmetro nas seguintes tarefas específicas:

  • PowerShell
  • BatchScript
  • Bash
  • SSH
  • AzureFileCopy
  • WindowsMachineFileCopy

Próximas etapas