@actions/upload-artifact
Advertencia
action/upload-artifact@v3 está programado para dejar de estar disponible el 30 de noviembre de 2024 . Obtenga más información. De manera similar, la versión 1/v2 está programada para dejar de estar disponible el 30 de junio de 2024 . Actualice su flujo de trabajo para utilizar la versión 4 de las acciones de artefacto. Esta desaprobación no afectará ninguna versión existente de GitHub Enterprise Server que estén utilizando los clientes.
Cargue artefactos de acciones desde sus ejecuciones de flujo de trabajo. Desarrollado internamente por el paquete @actions/artifact.
Véase también descargar-artefacto.
@actions/upload-artifact
Importante
upload-artifact@v4+ aún no es compatible con GHES. Si estás en GHES, debes usar v3.
El lanzamiento de upload-artifact@v4 y download-artifact@v4 son cambios importantes en la arquitectura backend de Artifacts. Tienen numerosas mejoras de rendimiento y comportamiento.
Para obtener más información, consulte la documentación @actions/artifact
.
También hay una nueva subacción, actions/upload-artifact/merge
. Para obtener más información, consulte el archivo LÉAME de esa acción.
En los ejecutores autohospedados, es posible que se requieran reglas de firewall adicionales.
Subiendo al mismo artefacto con nombre varias veces.
Debido a la forma en que se crean los artefactos en esta nueva versión, ya no es posible cargar el mismo artefacto con el mismo nombre varias veces. Debes dividir las cargas en varios Artefactos con nombres diferentes o cargarlas solo una vez. De lo contrario, encontrará un error.
Límite de artefactos para un trabajo individual. Cada trabajo en una ejecución de flujo de trabajo ahora tiene un límite de 500 artefactos.
Con v4.4
y posteriores, los archivos ocultos se excluyen de forma predeterminada.
Para obtener ayuda con los cambios importantes, consulte MIGRATION.md.
- uses : actions/upload-artifact@v4
with :
# Name of the artifact to upload.
# Optional. Default is 'artifact'
name :
# A file, directory or wildcard pattern that describes what to upload
# Required.
path :
# The desired behavior if no files are found using the provided path.
# Available Options:
# warn: Output a warning but do not fail the action
# error: Fail the action with an error message
# ignore: Do not output any warnings or errors, the action does not fail
# Optional. Default is 'warn'
if-no-files-found :
# Duration after which artifact will expire in days. 0 means using default retention.
# Minimum 1 day.
# Maximum 90 days unless changed from the repository settings page.
# Optional. Defaults to repository settings.
retention-days :
# The level of compression for Zlib to be applied to the artifact archive.
# The value can range from 0 to 9.
# For large files that are not easily compressed, a value of 0 is recommended for significantly faster uploads.
# Optional. Default is '6'
compression-level :
# If true, an artifact with a matching name will be deleted before a new one is uploaded.
# If false, the action will fail if an artifact for the given name already exists.
# Does not fail if the artifact does not exist.
# Optional. Default is 'false'
overwrite :
# Whether to include hidden files in the provided path in the artifact
# The file contents of any hidden files in the path should be validated before
# enabled this to avoid uploading sensitive information.
# Optional. Default is 'false'
include-hidden-files :
Nombre | Descripción | Ejemplo |
---|---|---|
artifact-id | ID de GitHub de un artefacto, puede ser utilizado por la API REST | 1234 |
artifact-url | URL para descargar un artefacto. Se puede utilizar en muchos escenarios, como vincular artefactos en incidencias o solicitudes de extracción. Los usuarios deben iniciar sesión para que esta URL funcione. Esta URL es válida siempre que el artefacto no haya caducado o el artefacto, la ejecución o el repositorio no se hayan eliminado. | https://github.com/example-org/example-repo/actions/runs/1/artifacts/1234 |
steps :
- run : mkdir -p path/to/artifact
- run : echo hello > path/to/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/ # or path/to/artifact
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/**/[abc]rtifac?/*
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : |
path/output/bin/
path/output/test-results
!path/**/*.tmp
Para conocer los comodines admitidos junto con el comportamiento y la documentación, consulte @actions/glob, que se utiliza internamente para buscar archivos.
Si se utiliza un patrón comodín, la jerarquía de rutas se conservará después del primer patrón comodín:
path/to/*/directory/foo?.txt =>
∟ path/to/some/directory/foo1.txt
∟ path/to/some/directory/foo2.txt
∟ path/to/other/directory/foo1.txt
would be flattened and uploaded as =>
∟ some/directory/foo1.txt
∟ some/directory/foo2.txt
∟ other/directory/foo1.txt
Si se proporcionan varias rutas como entrada, el ancestro menos común de todas las rutas de búsqueda se utilizará como directorio raíz del artefacto. Las rutas de exclusión no afectan la estructura del directorio.
Se permiten rutas de archivo relativas y absolutas. Las rutas relativas están enraizadas en el directorio de trabajo actual. Las rutas que comienzan con un carácter comodín se deben citar para evitar que se interpreten como alias YAML.
Si está cargando datos grandes o fácilmente comprimibles en su artefacto, puede beneficiarse ajustando el nivel de compresión. Por defecto, el nivel de compresión es 6
, el mismo que GNU Gzip.
El valor puede variar de 0 a 9:
Los niveles más altos darán como resultado una mejor compresión, pero tardarán más en completarse. Para archivos grandes que no se comprimen fácilmente, se recomienda un valor de 0
para cargas significativamente más rápidas.
Por ejemplo, si estás cargando datos binarios aleatorios, puedes ahorrar mucho tiempo al desactivar completamente la compresión, ya que no beneficiará:
- name : Make a 1GB random binary file
run : |
dd if=/dev/urandom of=my-1gb-file bs=1M count=1000
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my-1gb-file
compression-level : 0 # no compression
Pero, si estás cargando datos que se comprimen fácilmente (como texto sin formato, código, etc.), puedes ahorrar espacio y costos al tener un nivel de compresión más alto. Pero esto será más pesado para la CPU, por lo que la carga será más lenta:
- name : Make a file with a lot of repeated text
run : |
for i in {1..100000}; do echo -n 'foobar' >> foobar.txt; done
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : foobar.txt
compression-level : 9 # maximum compression
Si una ruta (o rutas) no da como resultado que se encuentren archivos para el artefacto, la acción se realizará correctamente pero se imprimirá una advertencia. En determinados escenarios, puede ser conveniente suspender la acción o suprimir la advertencia. La opción if-no-files-found
le permite personalizar el comportamiento de la acción si no se encuentran archivos:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
path : path/to/artifact/
if-no-files-found : error # 'warn' or 'ignore' are also available, defaults to `warn`
A diferencia de versiones anteriores de upload-artifact
, la carga al mismo artefacto a través de múltiples trabajos no es compatible con v4
.
- run : echo hi > world.txt
- uses : actions/upload-artifact@v4
with :
# implicitly named as 'artifact'
path : world.txt
- run : echo howdy > extra-file.txt
- uses : actions/upload-artifact@v4
with :
# also implicitly named as 'artifact', will fail here!
path : extra-file.txt
Los nombres de los artefactos deben ser únicos ya que cada artefacto creado es idempotente, por lo que varios trabajos no pueden modificar el mismo artefacto.
En escenarios matriciales, tenga cuidado de no cargar accidentalmente el mismo artefacto, de lo contrario encontrará errores de conflicto. Lo mejor sería nombrar el artefacto con un prefijo o sufijo de la matriz:
jobs :
upload :
name : Generate Build Artifacts
strategy :
matrix :
os : [ubuntu-latest, windows-latest]
version : [a, b, c]
runs-on : ${{ matrix.os }}
steps :
- name : Build
run : ./some-script --version=${{ matrix.version }} > my-binary
- name : Upload
uses : actions/upload-artifact@v4
with :
name : binary-${{ matrix.os }}-${{ matrix.version }}
path : my-binary
Esto dará como resultado artefactos como: binary-ubuntu-latest-a
, binary-windows-latest-b
, etc.
Anteriormente, el comportamiento permitía que los nombres de los artefactos fueran los mismos, lo que provocaba mutaciones inesperadas y corrupción accidental. Los artefactos creados por upload-artifact@v4 son inmutables.
Puedes usar ~
en la entrada de la ruta como sustituto de $HOME
. Se admite la expansión de tilde básica:
- run : |
mkdir -p ~/new/artifact
echo hello > ~/new/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifacts
path : ~/new/**/*
También se pueden utilizar variables de entorno junto con expresiones de contexto para la entrada. Para obtener documentación, consulte contexto y sintaxis de expresión:
env :
name : my-artifact
steps :
- run : |
mkdir -p ${{ github.workspace }}/artifact
echo hello > ${{ github.workspace }}/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : ${{ env.name }}-name
path : ${{ github.workspace }}/artifact/**/*
Para las variables de entorno creadas en otros pasos, asegúrese de utilizar la sintaxis de expresión env
steps :
- run : |
mkdir testing
echo "This is a file to upload" > testing/file.txt
echo "artifactPath=testing/file.txt" >> $GITHUB_ENV
- uses : actions/upload-artifact@v4
with :
name : artifact
path : ${{ env.artifactPath }} # this will resolve to testing/file.txt at runtime
Los artefactos se conservan durante 90 días de forma predeterminada. Puede especificar un período de retención más corto utilizando la entrada retention-days
:
- name : Create a file
run : echo "I won't live long" > my_file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my_file.txt
retention-days : 5
El período de retención debe ser entre 1 y 90 inclusive. Para obtener más información, consulte Políticas de retención de registros y artefactos.
Si la carga de un artefacto se realiza correctamente, habrá disponible una salida artifact-id
. Este ID es un identificador único que se puede utilizar con las API REST de Artifact.
- uses : actions/upload-artifact@v4
id : artifact-upload-step
with :
name : my-artifact
path : path/to/artifact/content/
- name : Output artifact ID
run : echo 'Artifact ID is ${{ steps.artifact-upload-step.outputs.artifact-id }}'
jobs :
job1 :
runs-on : ubuntu-latest
outputs :
output1 : ${{ steps.artifact-upload-step.outputs.artifact-id }}
steps :
- uses : actions/upload-artifact@v4
id : artifact-upload-step
with :
name : my-artifact
path : path/to/artifact/content/
job2 :
runs-on : ubuntu-latest
needs : job1
steps :
- env :
OUTPUT1 : ${{needs.job1.outputs.output1}}
run : echo "Artifact ID from previous job is $OUTPUT1"
Aunque no es posible mutar un artefacto, se puede sobrescribirlo por completo. Pero tenga en cuenta que esto le dará al Artefacto una nueva ID, la anterior ya no existirá:
jobs :
upload :
runs-on : ubuntu-latest
steps :
- name : Create a file
run : echo "hello world" > my-file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact # NOTE: same artifact name
path : my-file.txt
upload-again :
needs : upload
runs-on : ubuntu-latest
steps :
- name : Create a different file
run : echo "goodbye world" > my-file.txt
- name : Upload Artifact
uses : actions/upload-artifact@v4
with :
name : my-artifact # NOTE: same artifact name
path : my-file.txt
overwrite : true
De forma predeterminada, esta acción ignora los archivos ocultos para evitar cargar información confidencial sin querer.
Si necesita cargar archivos ocultos, puede utilizar la entrada include-hidden-files
. Cualquier archivo que contenga información confidencial que no debería estar en el artefacto cargado se puede excluir mediante la path
:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
include-hidden-files : true
path : |
path/output/
!path/output/.production.env
Los archivos ocultos se definen como cualquier archivo que comience con .
o archivos dentro de carpetas que comienzan con .
. En Windows, los archivos y directorios con el atributo oculto no se consideran archivos ocultos a menos que tengan el archivo .
prefijo.
Dentro de un trabajo individual, existe un límite de 500 artefactos que se pueden crear para ese trabajo.
También puede estar limitado por artefactos si ha excedido su cuota de almacenamiento compartido. El almacenamiento se calcula cada 6-12 horas. Consulte la documentación para obtener más información.
Cuando se carga un artefacto, todos los archivos se ensamblan en un archivo Zip inmutable. Actualmente no hay forma de descargar artefactos en un formato que no sea Zip o descargar contenidos de artefactos individuales.
Los permisos de archivos no se mantienen durante la carga de artefactos. Todos los directorios tendrán 755
y todos los archivos tendrán 644
. Por ejemplo, si crea un archivo ejecutable usando chmod
y luego lo carga, ya no se garantiza que el archivo posterior a la descarga se establezca como ejecutable.
Si debe conservar los permisos, puede tar
todos sus archivos juntos antes de cargar el artefacto. Después de la descarga, el archivo tar
mantendrá los permisos del archivo y distinguirá entre mayúsculas y minúsculas.
- name : ' Tar files '
run : tar -cvf my_files.tar /path/to/my/directory
- name : ' Upload Artifact '
uses : actions/upload-artifact@v4
with :
name : my-artifact
path : my_files.tar
En la parte inferior de la página de resumen del flujo de trabajo, hay una sección dedicada a los artefactos. Aquí hay una captura de pantalla de algo que podrías ver:
Hay un ícono de papelera que se puede usar para eliminar el artefacto. Este icono sólo aparecerá para los usuarios que tengan permisos de escritura en el repositorio.
El tamaño del artefacto se indica en bytes. El tamaño del artefacto mostrado indica el tamaño del zip que upload-artifact
crea durante la carga.