Segredos e variáveis

Um dos primeiros conceitos que encontramos ao iniciar no mundo da programação é o uso de variáveis. Isso se deve ao fato de que às vezes o nosso código precisa receber alguma entrada do usuário, além de facilitar a manutenção e leitura do código.

Com os workflows não é diferente. Para isso, existem os secrets e as variables.

Além disso, o Github Actions possui uma abstração chamada environments para facilitar o controle de secrets e variables em diferentes ambientes como dev, tst e prod, por exemplo.

secrets e variables

Um secret e uma variable são parâmetros que podem ser acessados pelo workflow e a principal diferença entre eles é que o secret, como o nome dá a entender, é secreto. Ou seja, depois de definido, apenas os workflows podem acessá-los. O próprio GHA vai ocultar os valores dos secrets se eles fossem exibidos no log. Se for um dado sensível, como uma credencial, crie um secret. Caso contrário, use uma variable.

Mas como fazemos para criar um secret? Vamos ver isso agora!

Níveis e criação dos parâmetros

Esses parâmetros podem ser definidos a nível de organização, repositório e ambientes. Se houver colisão de nomes, ou seja, um secret chamado SECRET_SECRETO_DO_JP a nível de organização e um outro chamado SECRET_SECRETO_DO_JP a nível do repositório, a preferência é sempre do secret do repositório! Se ainda houvesse um secret chamado SECRET_SECRETO_DO_JP a nível de ambiente, a preferência seria do ambiente!

Em resumo: quanto menor o escopo, maior a preferência.

Para a criação, basta ir na configuração do nível desejado:

  • repositório: aba de configurações do repositório > Segurança > Segredos e variáveis > Actions > Segredos / Variáveis > Novo segredo/variável
  • ambiente: aba de configurações do repositório > Ambientes > Selecione o ambiente > Segredos / Variáveis > Novo segredo/variável
  • organização: aba de configurações da organização > Segurança > Segredos e variáveis

Utilização

Os segredos e variáveis estão disponíveis através do objeto secrets e vars, respectivamente. Ou seja, para acessar o valor do secret SECRET_SECRETO_DO_JP, basta expandirmos o valor via ${{ secrets.SECRET_SECRETO_DO_JP }}.

Exemplos

Notificação de webhook

name: Notifica no slack
on: # ...
jobs:
  send-notification:
    runs-on: ubuntu-latest
    steps:
      - uses: slackapi/slack-github-action@v1.26.0
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

Credenciais da AWS

name: Autentica credencial da AWS
on: # ...
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4.0.2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
          aws-region: ${{ vars.AWS_DEFAULT_REGION }}
          role-to-assume: ${{ vars.AWS_ROLE_ARN }}
          role-duration-seconds: 3600