Como faço para usar segredos nas ações do Github?

Oct 06 2020

Eu sinto que esta é uma pergunta realmente estúpida, mas não consigo descobrir. Eu configurei um projeto node.js realmente simples com API_KEYum segredo.

Na ação do nodejs yml , tenho o seguinte:

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }}
      env:  
        API_KEY: ${{ secrets.API_KEY }} 
    - run: export 
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

API_KEYnão apareceexport como eu esperava nem aparece quando eu console.log(process.env).

De acordo com a documentação , isso deve funcionar como está. Sinto que estou perdendo algo realmente simples.

Este não é um fork como sugerido nesta questão stackoverflow .

O que estou perdendo para obter a API_KEY disponível em meu script de nó?

Respostas

1 BenjaminW. Oct 06 2020 at 22:04

As variáveis ​​de ambiente podem ser definidas em três níveis:

  • Globalmente: um mapa de nível superior chamado env
  • Em um nível por trabalho: em jobs..env
  • Em um nível por etapa: em jobs..steps.env

A preferência é dada à variável mais específica disponível. Por exemplo:

env:
  VAR: I am global
jobs:
  job1:
    steps:
      - run: echo "$VAR" # "I am global" job2: env: VAR: I am on the job level steps: - run: echo "$VAR"  # "I am on the job level"
      - env:
          VAR: I am on the step level
        run: echo "$VAR" # "I am on the step level" - run: echo "$VAR"  # "I am on the job level"

Para definir uma variável de ambiente em uma etapa, dinamicamente, e torná-la disponível para outras etapas, você deve usar um arquivo de ambiente ( mudou recentemente com o uso de comandos de fluxo de trabalho, que agora estão obsoletos para variáveis ​​de ambiente):

steps:
  - name: Set the variable
    run: echo "foo=bar" >> "$GITHUB_ENV" - name: Print the variable run: echo "$foo"  # bar

A forma antiga, agora obsoleta, seria definida assim:

run: echo "::set-env name=foo::bar"

mas agora isso aciona um aviso de suspensão de uso.