Skip to content
Latchkey

O que é interpolação de variáveis de ambiente? Explicado

A interpolação de variáveis de ambiente é a substituição do valor de uma variável em uma string, de modo que um marcador como um nome precedido de cifrão seja substituído por seu valor real.

A interpolação é como a configuração se torna dinâmica. Em vez de fixar um valor no código, você escreve um marcador que referencia uma variável de ambiente, e uma ferramenta o substitui pelo valor real em tempo de execução. O CI vive disso: os pipelines injetam secrets, números de build e nomes de branch por meio de interpolação. Mas quem faz a substituição - o shell, o mecanismo de CI ou uma ferramenta de configuração - muda as regras.

O que é interpolação

A interpolação substitui uma referência a uma variável, escrita como um marcador, pelo valor atual da variável quando o texto é processado. A forma clássica é um cifrão seguido de um nome. A interpolação transforma um template estático em um que se adapta ao ambiente em que é executado.

Quem faz a substituição

Em CI, geralmente há várias camadas que podem interpolar: o mecanismo de CI substitui sua própria sintaxe de expressão antes de o job rodar, e então o shell interpola suas variáveis quando o comando é executado. Saber qual camada trata um determinado marcador é essencial, porque elas têm sintaxe e momentos diferentes.

Armadilhas de aspas e valores ausentes

Dois bugs clássicos: esquecer de colocar aspas em um valor interpolado que contém espaços, o que o divide em múltiplos argumentos; e uma variável ausente expandindo para uma string vazia, o que pode transformar um comando em algo perigoso. Shells estritos podem ser configurados para gerar erro em variáveis indefinidas para detectar o segundo caso.

Interpolação em CI

O GitHub Actions interpola sua própria sintaxe de expressão (a forma de chaves duplas) no nível do mecanismo, e o shell interpola variáveis com cifrão em tempo de execução. Um erro frequente é confundi-las ou deixar o mecanismo interpolar entrada não confiável diretamente em um comando de shell, o que é um risco de injeção.

Two layers of interpolation
# Engine vs shell interpolation in a CI step
steps:
  - env:
      NAME: ${{ github.actor }}   # engine interpolates
    run: echo "Hello, $NAME"        # shell interpolates safely

Nota Latchkey

A interpolação de expressões e a de shell se comportam da mesma forma nos runners da Latchkey, e passar contexto não confiável por meio de uma env var (em vez de inseri-lo diretamente no comando) também é o padrão seguro ali.

Principais conclusões

  • A interpolação substitui o valor de uma variável no texto sempre que um marcador aparece.
  • Em CI, várias camadas interpolam - o mecanismo antes do run, o shell durante ele - com sintaxes diferentes.
  • Valores sem aspas ou ausentes causam bugs, e interpolar entrada não confiável em um comando é um risco de injeção.

Guias relacionados