es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ocultar las variables de entorno creadas en Github al ejecutar un flujo de trabajo?

Creé un flujo de trabajo de Github que ejecuta un script de Python con una programación cron. En cada ejecución del flujo de trabajo, se genera un access_token, que es necesario durante la siguiente ejecución.

Para guardar el token, el script de Python escribe el token en el archivo GITHUB_ENV. En el siguiente paso, utilizo la acción hmanzur/actions-set-secret@v2.0.0 para guardar el token en un secreto de Github. Todo funciona bien.

Mi único problema es que el token se muestra en los registros del segundo paso como una variable de entorno.

Aquí hay una versión mínima del archivo de flujo de trabajo:

name: Tests
on:
  schedule:
    - cron: "0 1 * * *"
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python: ['3.9']
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python }}
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run tests
        working-directory: ./src
        run: python -m unittest
        env:
          ACCESS_TOKEN: ${{secrets.ACCESS_TOKEN}}
      - uses: hmanzur/actions-set-secret@v2.0.0
        with:
          name: 'ACCESS_TOKEN'
          value: ${{env.ACCESS_TOKEN}}
          repository: Me/MyRepository
          token: ${{ secrets.REPO_ACCESS_TOKEN }}

Intenté usar “::add-mask::”. Agregar “echo “ACCESS_TOKEN=::add-mask::$ACCESS_TOKEN” >> $GITHUB_ENV” solo agregó “::add-mask::” a la cadena.

¿Hay alguna forma de enmascarar todas las variables de entorno en el archivo GITHUB_ENV que pueda aplicar en el primer paso? ¿Puedo aplicar el enmascaramiento a la variable mientras escribo en el archivo GITHUB_ENV en Python? ¿O hay alguna forma de desactivar la visualización de las variables de entorno durante el flujo de trabajo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay varias formas de ocultar variables de entorno en las acciones de Github:

    1. En el archivo del flujo de trabajo, puedes utilizar la clave env para definir variables de entorno y luego usar el comando ::add-mask:: para ocultarlas. Por ejemplo:
    env:
      ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
    
    steps:
      - name: Ejecutar script
        run: python script.py $ACCESS_TOKEN
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          MY_SECRET: ${{ secrets.MY_SECRET }}
          ANOTHER_SECRET: ${{ secrets.ANOTHER_SECRET }}
    
      - name: Configurar secretos
        uses: hmanzur/actions-set-secret@v2.0.0
        with:
          name: 'ACCESS_TOKEN'
          value: ${{ env.ACCESS_TOKEN }}
          repository: Yo/MiRepositorio
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
    

    Y luego, en tu script de Python, puedes utilizar el diccionario os.environ para acceder a las variables de entorno y ocultarlas utilizando el comando ::add-mask::. Por ejemplo:

    import os
    
    access_token = os.environ['ACCESS_TOKEN']
    print(f"ACCESS_TOKEN={access_token}") # Esto estará oculto en los registros
    
    1. Otra opción es utilizar el comando ::add-mask:: al escribir la variable de entorno en el archivo GITHUB_ENV en tu script de Python. Por ejemplo:
    import os
    
    access_token = "mi_token"
    with open(os.environ['GITHUB_ENV'], 'a') as f:
        f.write(f'ACCESS_TOKEN={access_token}\n')
        f.write(f'::add-mask::{access_token}\n') # Esto ocultará la variable en los registros
    
    1. Alternativamente, puedes desactivar la visualización de las variables de entorno en los registros estableciendo la opción no-echo en true en el paso que utiliza la variable de entorno. Por ejemplo:
    steps:
      - name: Ejecutar script
        run: python script.py $ACCESS_TOKEN
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          MY_SECRET: ${{ secrets.MY_SECRET }}
        with:
          echo: false
    

    Esto evitará que las variables de entorno se muestren en los registros en absoluto.

Comments are closed.