Acerca de los artefactos de flujo de trabajo
Los artefactos te permiten hacer datos persistentes después de que se complete un job y comparten estos datos con otro job en el mismo flujo de trabajo. Un artefacto es un archivo o recopilación de archivos producidos durante una ejecución de flujo de trabajo. Por ejemplo, puedes utilizar artefactos para guardar tu compilación y probar el resultado después de que haya terminado una ejecución de flujo de trabajo. Todas las acciones y flujos de trabajo a las que se les llama desde dentro de una ejecución tienen acceso de escritura a los artefactos de dicha ejecución.
De forma predeterminada, GitHub almacena las bitácoras de compilación y artefactos durante 90 días y puedes personalizar este periodo de retención. Para obtener más información, vea «Límites de uso, facturación y administración». El período de retención de una solicitud de incorporación de cambios vuelve a empezar cada vez que alguien envía una nueva confirmación a la solicitud de incorporación de cambios.
Estos son algunos de los artefactos comunes que puedes subir:
- Archivos de registro y vaciados de memoria
- Resultados de prueba, fallas y capturas de pantalla
- Archivos binarios o comprimidos
- Resultado de la prueba de rendimiento y resultados de la cobertura del código
Almacenar artefactos consume espacio de almacenamiento en GitHub. El uso de GitHub Actions es gratuito para los ejecutores estándar de GitHub hospedados en repositorios públicos y para ejecutores autohospedados. En los repositorios privados, cada cuenta de GitHub recibe una cantidad determinada de minutos y almacenamiento gratuitos para usarlos con ejecutores hospedados por GitHub en función del plan de la cuenta. Cualquier uso que supere las cantidades incluidas se controla mediante límites de gasto. Para más información, consulta "Administrar la facturación para GitHub Actions".
Los artefactos se cargan durante una ejecución de flujo de trabajo y puedes ver el nombre y tamaño de estos en la IU. Cuando se descarga un artefacto utilizando la IU de GitHub, todos los archivos que se hayan subido de manera individual como parte del mismo se comprimirán en un solo archivo. Esto significa que los costos se calcularán con base en el tamaño del artefacto cargado y no en aquél del archivo comprimido.
GitHub proporciona dos acciones que puedes usar para cargar y descargar artefactos de construcción. Para más información, consulta las acciones upload-artifact y download-artifact .
Para compartir datos entre jobs:
- Carga de archivos: asigna un nombre al archivo cargado y carga los datos antes de que finalice el trabajo.
- Descarga de archivos: Solo puedes descargar artefactos que se cargaron durante la misma ejecución de flujo de trabajo. Cuando descargas un archivo, puedes referenciarlo por su nombre.
Los pasos de un job comparten el mismo ambiente en la máquina ejecutora, pero se ejecutan en su propio proceso individual. Para pasar datos entre pasos en un job, puedes usar entradas y salidas. Para más información sobre las entradas y salidas, consulta "Sintaxis de metadatos para Acciones de GitHub".
Comparar artefactos y caché de dependencias
Los artefactos y el almacenamiento en caché son similares porque brindan la posibilidad de almacenar archivos en GitHub, pero cada característica ofrece diferentes casos de uso y no se puede usar indistintamente.
- Usa el almacenamiento en caché cuando quieras reutilizar archivos que no cambian a menudo entre trabajos o ejecuciones de flujo de trabajo, como las dependencias de compilación de un sistema de administración de paquetes.
- Usa artefactos cuando quieras guardar los archivos que genera un trabajo para verlos una vez que ha finalizado la ejecución de un flujo de trabajo (por ejemplo, archivos binarios compilados o registros de compilación).
Para más información sobre el almacenamiento en caché de dependencias, consulta "Almacenar en caché las dependencias para agilizar los flujos de trabajo".
Cargar artefactos de construcción y evaluación
Puedes crear un flujo de trabajo de integración continua (CI) para construir y probar tu código. Para más información sobre el uso de GitHub Actions para realizar la CI, consulta "Acerca de la integración continua con Acciones de GitHub".
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.
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
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
Generación de atestaciones de artefactos para compilaciones
Las atestaciones de artefactos permiten crear garantías de integridad y procedencia no verificables para el software que compile. A su vez, las personas que consumen el software pueden comprobar dónde y cómo se compiló el software.
Al generar atestaciones de artefactos con el software, se crean notificaciones firmadas criptográficamente que establecen la procedencia de la compilación e incluyen la siguiente información:
- Vínculo al flujo de trabajo asociado al artefacto.
- El repositorio, la organización, el entorno, la confirmación de SHA y el evento desencadenante para el artefacto.
- Otra información del token de OIDC que se usa para establecer la procedencia. Para obtener más información, vea «Acerca del fortalecimiento de seguridad con OpenID Connect».
También puede generar atestaciones de artefactos que incluyan una lista de materiales de software asociada (SBOM). Asociar las compilaciones con una lista de las dependencias de código abierto usadas en ellas proporciona transparencia y permite a los consumidores cumplir con los estándares de protección de datos.
Puede acceder a las atestaciones después de ejecutar una compilación, debajo de la lista de artefactos que generó la compilación.
Para obtener más información, vea «Uso de atestaciones de artefactos para establecer la procedencia de las compilaciones».
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
:
- name: 'Upload Artifact' uses: actions/upload-artifact@v4 with: name: my-artifact path: my_file.txt retention-days: 5
- 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 o eliminar artefactos
Durante una ejecución de flujo de trabajo, puedes usar la acción download-artifact
para descargar artefactos que se hayan cargado previamente en la misma ejecución de flujo de trabajo.
Después de que se haya completado una ejecución de flujo de trabajo, puedes descargar o borrar los artefactos en GitHub o utilizando la API de REST. Para más información, consulta "Descargar los artefactos del flujo de trabajo," "Eliminar artefactos de flujo de trabajo" y "Puntos de conexión de API de REST para artefactos de Acciones de GitHub".
Descargar artefactos durante una ejecución de flujo de trabajo
La acción actions/download-artifact
se puede usar para descargar artefactos cargados previamente durante una ejecución de flujo de trabajo.
Nota: Solo puedes descargar artefactos de un flujo de trabajo que se cargaron durante la misma ejecución de flujo de trabajo.
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 archivomath-homework.txt
con el nombre del artefactohomework_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óndownload-artifact
descarga artefactos en el directorio del área de trabajo en la que se ejecuta el paso. Puedes usar el parámetro de entradapath
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 enmath-homework.txt
de nuevo, sobrescribiendo su contenido. - Carga el archivo
math-homework.txt
. A medida que los artefactos se consideran inmutables env4
, 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
.
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
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".