¿Cómo uso secretos en Github Actions?

Oct 06 2020

Siento que esta es una pregunta realmente estúpida, pero parece que no puedo resolverlo. He configurado un proyecto node.js realmente simple con API_KEYun secreto.

En la acción de nodejs yml tengo lo siguiente:

    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_KEYno se muestraexport como esperaba ni se muestra cuando yo console.log(process.env).

Según la documentación , esto debería funcionar como está. Siento que me estoy perdiendo algo realmente simple.

Esta no es una bifurcación como se sugiere en esta pregunta de stackoverflow .

¿Qué me falta para que API_KEY esté disponible en mi script de nodo?

Respuestas

1 BenjaminW. Oct 06 2020 at 22:04

Las variables de entorno se pueden definir en tres niveles:

  • Globalmente: un mapa de nivel superior llamado env
  • A nivel de trabajo: en jobs..env
  • En un nivel por paso: en jobs..steps.env

Se da preferencia a la variable más específica disponible. Por ejemplo:

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 establecer una variable de entorno en un paso, de forma dinámica, y hacerla disponible para otros pasos, debe usar un archivo de entorno (esto ha cambiado recientemente desde el uso de comandos de flujo de trabajo, que ahora están en desuso para las variables de entorno):

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

La forma antigua, ahora obsoleta, lo configuraría así:

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

pero esto ahora activa una advertencia de obsolescencia.