Skip to main content

Almacenamiento y uso compartido de datos con artefactos de flujo de trabajo

Usa artefactos para compartir datos entre trabajos de un flujo de trabajo y almacenar los datos una vez que se haya completado ese flujo de trabajo.

Requisitos previos

Para poder completar este tutorial, debes comprender los artefactos de flujo de trabajo. Consulta Artefactos del flujo de trabajo.

Cargar artefactos de construcción y evaluación

El resultado de la construcción y la prueba de tu código frecuentemente produce archivos que puedes usar para depurar fallas de prueba y códigos de producción que puedes implementar. Puedes configurar un flujo de trabajo para construir y probar el código subido a tu repositorio e informar un estado satisfactorio o de falla. Puedes cargar los resultados de construcción y prueba para usar en implementaciones, pruebas de depuración fallidas o fallos, y para visualizar la cobertura del conjunto de prueba.

Puedes usar la acción upload-artifact para cargar artefactos. Cuando cargues un artefacto, puedes especificar un archivo sencillo o un directorio, o varios archivos o directorios. También puedes excluir ciertos archivos o directorios y utilizar patrones de comodín. Te recomendamos que proporciones un nombre para cada artefacto pero, si no se lo das, entonces el nombre predeterminado que se utilizará será artifact. Para obtener más información sobre la sintaxis, consulta las acciones actions/upload-artifact y.

Ejemplo

Por ejemplo, tu repositorio o una aplicación web podrían contener archivos de SASS y TypeScript que debes convertir a CSS y JavaScript. Teniendo en cuenta que tu configuración de construcción envía los archivos compilados al directorio dist, puedes implementar los archivos en el directorio dist para tu servidor de aplicación web si todas las pruebas se completaron satisfactoriamente.

|-- hello-world (repository)
|   └── dist
|   └── tests
|   └── src
|       └── sass/app.scss
|       └── app.ts
|   └── output
|       └── test
|

En este ejemplo se muestra cómo crear un flujo de trabajo para un proyecto de Node.js que compila el código en el directorio src y ejecuta las pruebas en el directorio tests. Puedes suponer que la ejecución de npm test genera un informe de cobertura de código denominado code-coverage.html almacenado en el directorio output/test/.

El flujo de trabajo carga los artefactos de producción en el directorio dist, pero excluye cualquier archivo Markdown. También carga el informe code-coverage.html como otro artefacto.

YAML
name: Node CI

on: [push]

jobs:
  build_and_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm test
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: dist-without-markdown
          path: |
            dist
            !dist/**/*.md
      - name: Archive code coverage results
        uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: output/test/code-coverage.html

Configurar un periodo de retención de artefactos personalizado

Puedes definir un periodo de retención personalizado para los artefactos indivudales que crea un flujo de trabajo. Al usar un flujo de trabajo para crear un nuevo artefacto, puedes usar retention-days con la acción upload-artifact. En este ejemplo se muestra cómo configurar un período de retención personalizado de 5 días para el artefacto que se llama my-artifact:

YAML
  - name: 'Upload Artifact'
    uses: actions/upload-artifact@v4
    with:
      name: my-artifact
      path: my_file.txt
      retention-days: 5

El valor retention-days no puede superar el límite de retención establecido por el repositorio, la organización o la empresa.

Descargar artefactos durante una ejecución de flujo de trabajo

Puedes usar la acción actions/download-artifact para descargar artefactos cargados previamente durante una ejecución de flujo de trabajo.

Nota:

Si deseas descargar artefactos de un flujo de trabajo o ejecución de flujo de trabajo diferente, debes proporcionar un token y un identificador de ejecución. Consulta Descargar artefactos de otras ejecuciones de flujo de trabajo o repositorios en la documentación de la acción download-artifact.

Especificar el nombre de un artefacto para descargar un artefacto individual. Si cargaste un artefacto sin especificar un nombre, el nombre predeterminado es artifact.

- name: Download a single artifact
  uses: actions/download-artifact@v4
  with:
    name: my-artifact

También puedes descargar todos los artefactos en una ejecución de flujo de trabajo si no especificas un nombre para éstos. Esto puede ser útil si estás trabajando con muchos artefactos.

- name: Download all workflow run artifacts
  uses: actions/download-artifact@v4

Si descargas todos los artefactos de una ejecución de flujo de trabajo, se creará un directorio para cada uno de ellos utilizando su nombre.

Para obtener más información sobre la sintaxis, consulta las acciones actions/download-artifact y.

Paso de datos entre trabajos de un flujo de trabajo

Puedes usar las acciones upload-artifact y download-artifact para compartir datos entre los trabajos de un flujo de trabajo. Este flujo de trabajo de ejemplo ilustra cómo pasar datos entre jobs en el mismo flujo de trabajo. Para obtener más información, consulta las acciones actions/upload-artifact y download-artifact .

Los jobs que dependen de los artefactos de un trabajo anterior deben esperar que el trabajo dependiente se complete exitosamente. Este flujo de trabajo usa la palabra clave needs para asegurarse de que job_1, job_2 y job_3 se ejecutan secuencialmente. Por ejemplo, job_2 necesita job_1 mediante la sintaxis needs: job_1.

El job 1 realiza estos pasos:

  • Realiza un cálculo matemático y guarda el resultado en un archivo de texto denominado math-homework.txt.
  • Usa la acción upload-artifact para cargar el archivo math-homework.txt con el nombre del artefacto homework_pre.

El job 2 usa el resultado del trabajo anterior:

  • Descarga el artefacto homework_pre cargado en el trabajo anterior. De manera predeterminada, la acción download-artifact descarga artefactos en el directorio del área de trabajo en la que se ejecuta el paso. Puedes usar el parámetro de entrada path para especificar un directorio de descarga diferente.
  • Lee el valor en el archivo math-homework.txt, realiza un cálculo matemático y guarda el resultado en math-homework.txt de nuevo, sobrescribiendo su contenido.
  • Carga el archivo math-homework.txt. A medida que los artefactos se consideran inmutables en v4, el artefacto se pasa a una entrada diferente, homework_final, como un nombre.

El job 3 muestra el resultado cargado en el trabajo anterior:

  • Descarga el artefacto artefacto homework.
  • Imprime el resultado de la ecuación matemática en el registro.

La operación matemática completa realizada en este ejemplo de flujo de trabajo es (3 + 7) x 9 = 90.

YAML
name: Share data between jobs

on: [push]

jobs:
  job_1:
    name: Add 3 and 7
    runs-on: ubuntu-latest
    steps:
      - shell: bash
        run: |
          expr 3 + 7 > math-homework.txt
      - name: Upload math result for job 1
        uses: actions/upload-artifact@v4
        with:
          name: homework_pre
          path: math-homework.txt

  job_2:
    name: Multiply by 9
    needs: job_1
    runs-on: windows-latest
    steps:
      - name: Download math result for job 1
        uses: actions/download-artifact@v4
        with:
          name: homework_pre
      - shell: bash
        run: |
          value=`cat math-homework.txt`
          expr $value \* 9 > math-homework.txt
      - name: Upload math result for job 2
        uses: actions/upload-artifact@v4
        with:
          name: homework_final
          path: math-homework.txt

  job_3:
    name: Display results
    needs: job_2
    runs-on: macOS-latest
    steps:
      - name: Download math result for job 2
        uses: actions/download-artifact@v4
        with:
          name: homework_final
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value

La ejecución de flujo de trabajo archivará cualquier artefacto que haya generado. Para más información sobre cómo descargar artefactos archivados, consulta Descargar los artefactos del flujo de trabajo.

Validación de artefactos

Cada vez que usas la acción upload-artifact, devuelve una salida denominada digest. Se trata de un código hash SHA256 del artefacto que has cargado durante una ejecución de flujo de trabajo.

Cuando después se usa la acción download-artifact para descargar ese artefacto, calcula automáticamente el código hash de ese artefacto descargado y valida que coincide con la salida del paso upload-artifact.

Si el código hash no coincide, la ejecución mostrará una advertencia en la interfaz de usuario y en los registros de trabajo.

Para ver el código hash SHA256, abre los registros del trabajo de artefacto de carga o comprueba la salida del artefacto que aparece en la interfaz de usuario de la ejecución de flujo de trabajo.