@actions/upload-artifact
Avertissement
actions/upload-artifact@v3 devrait devenir obsolète le 30 novembre 2024 . Apprendre encore plus. De même, la dépréciation des versions v1/v2 est prévue pour le 30 juin 2024 . Veuillez mettre à jour votre flux de travail pour utiliser la version 4 des actions d'artefact. Cette dépréciation n’aura aucun impact sur les versions existantes de GitHub Enterprise Server utilisées par les clients.
Téléchargez des artefacts d'actions à partir de vos exécutions de workflow. Propulsé en interne par le package @actions/artifact.
Voir aussi télécharger-artefact.
@actions/upload-artifact
Important
upload-artifact@v4+ n'est pas encore pris en charge sur GHES. Si vous êtes sur GHES, vous devez utiliser la v3.
La sortie de upload-artifact@v4 et download-artifact@v4 sont des changements majeurs dans l'architecture backend d'Artifacts. Ils présentent de nombreuses améliorations de performances et de comportement.
Pour plus d'informations, consultez la documentation @actions/artifact
.
Il existe également une nouvelle sous-action, actions/upload-artifact/merge
. Pour plus d'informations, consultez le fichier README de cette action.
Sur les coureurs auto-hébergés, des règles de pare-feu supplémentaires peuvent être requises.
Téléchargement plusieurs fois vers le même artefact nommé.
En raison de la façon dont les artefacts sont créés dans cette nouvelle version, il n'est plus possible de les télécharger plusieurs fois vers le même artefact nommé. Vous devez soit diviser les téléchargements en plusieurs artefacts portant des noms différents, soit les télécharger une seule fois. Sinon, vous rencontrerez une erreur.
Limite d'artefacts pour une tâche individuelle. Chaque tâche d'une exécution de flux de travail est désormais limitée à 500 artefacts.
Avec v4.4
et versions ultérieures, les fichiers cachés sont exclus par défaut.
Pour obtenir de l’aide sur les modifications avec rupture, consultez 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 :
Nom | Description | Exemple |
---|---|---|
artifact-id | ID GitHub d'un artefact, peut être utilisé par l'API REST | 1234 |
artifact-url | URL pour télécharger un artefact. Peut être utilisé dans de nombreux scénarios, tels que la création de liens vers des artefacts dans des problèmes ou des demandes d'extraction. Les utilisateurs doivent être connectés pour que cette URL fonctionne. Cette URL est valide tant que l'artefact n'a pas expiré ou que l'artefact, l'exécution ou le référentiel n'a pas été supprimé. | 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
Pour les caractères génériques pris en charge ainsi que le comportement et la documentation, voir @actions/glob qui est utilisé en interne pour rechercher des fichiers.
Si un modèle générique est utilisé, la hiérarchie des chemins sera conservée après le premier modèle générique :
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 plusieurs chemins sont fournis en entrée, l'ancêtre le moins commun de tous les chemins de recherche sera utilisé comme répertoire racine de l'artefact. Les chemins d'exclusion n'affectent pas la structure des répertoires.
Les chemins de fichiers relatifs et absolus sont tous deux autorisés. Les chemins relatifs sont ancrés dans le répertoire de travail actuel. Les chemins commençant par un caractère générique doivent être mis entre guillemets pour éviter d'être interprétés comme des alias YAML.
Si vous téléchargez des données volumineuses ou facilement compressibles sur votre artefact, vous pouvez bénéficier d'un ajustement du niveau de compression. Par défaut, le niveau de compression est 6
, identique à celui de GNU Gzip.
La valeur peut aller de 0 à 9 :
Des niveaux plus élevés entraîneront une meilleure compression, mais prendront plus de temps. Pour les fichiers volumineux qui ne sont pas facilement compressés, une valeur de 0
est recommandée pour des téléchargements nettement plus rapides.
Par exemple, si vous téléchargez des données binaires aléatoires, vous pouvez gagner beaucoup de temps en désactivant complètement la compression, car cela n'en bénéficiera pas :
- 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
Mais si vous téléchargez des données facilement compressables (comme du texte brut, du code, etc.), vous pouvez économiser de l'espace et des coûts en ayant un niveau de compression plus élevé. Mais cela sera plus lourd sur le CPU donc plus lent à télécharger :
- 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 un ou plusieurs chemins ne permettent pas de trouver de fichiers pour l'artefact, l'action réussira mais affichera un avertissement. Dans certains scénarios, il peut être souhaitable de faire échouer l'action ou de supprimer l'avertissement. L'option if-no-files-found
permet de personnaliser le comportement de l'action si aucun fichier n'est trouvé :
- 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`
Contrairement aux versions antérieures de upload-artifact
, le téléchargement vers le même artefact via plusieurs tâches n'est pas pris en charge avec 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
Les noms d'artefacts doivent être uniques puisque chaque artefact créé est idempotent et que plusieurs tâches ne peuvent donc pas modifier le même artefact.
Dans les scénarios matriciels, veillez à ne pas télécharger accidentellement vers le même artefact, sinon vous rencontrerez des erreurs de conflit. Il serait préférable de nommer l'artefact avec un préfixe ou un suffixe issu de la matrice :
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
Cela entraînera des artefacts tels que : binary-ubuntu-latest-a
, binary-windows-latest-b
, etc.
Auparavant, le comportement permettait que les noms des artefacts soient les mêmes, ce qui entraînait des mutations inattendues et une corruption accidentelle. Les artefacts créés par upload-artifact@v4 sont immuables.
Vous pouvez utiliser ~
dans l'entrée du chemin en remplacement de $HOME
. L'extension de base des tildes est prise en charge :
- run : |
mkdir -p ~/new/artifact
echo hello > ~/new/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifacts
path : ~/new/**/*
Les variables d'environnement ainsi que les expressions de contexte peuvent également être utilisées pour la saisie. Pour la documentation, voir le contexte et la syntaxe de l'expression :
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/**/*
Pour les variables d'environnement créées à d'autres étapes, assurez-vous d'utiliser la syntaxe de l'expression 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
Les artefacts sont conservés pendant 90 jours par défaut. Vous pouvez spécifier une période de conservation plus courte à l'aide de l'entrée 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
La durée de conservation doit être comprise entre 1 et 90 inclus. Pour plus d’informations, consultez les stratégies de conservation des artefacts et des journaux.
Si le téléchargement d'un artefact réussit, une sortie artifact-id
est disponible. Cet ID est un identifiant unique qui peut être utilisé avec les API REST 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"
Bien qu'il ne soit pas possible de muter un artefact, il peut en écraser complètement un. Mais notez que cela donnera à l'Artefact un nouvel identifiant, l'ancien n'existera plus :
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
Par défaut, les fichiers cachés sont ignorés par cette action pour éviter de télécharger involontairement des informations sensibles.
Si vous devez télécharger des fichiers cachés, vous pouvez utiliser l'entrée include-hidden-files
. Tous les fichiers contenant des informations sensibles qui ne devraient pas figurer dans l'artefact téléchargé peuvent être exclus en utilisant le path
:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
include-hidden-files : true
path : |
path/output/
!path/output/.production.env
Les fichiers cachés sont définis comme tout fichier commençant par .
ou des fichiers dans des dossiers commençant par .
. Sous Windows, les fichiers et répertoires avec l'attribut masqué ne sont pas considérés comme des fichiers cachés à moins qu'ils n'aient l'extension .
préfixe.
Au sein d'une tâche individuelle, il existe une limite de 500 artefacts pouvant être créés pour cette tâche.
Vous pouvez également être limité par les artefacts si vous avez dépassé votre quota de stockage partagé. Le stockage est calculé toutes les 6 à 12 heures. Voir la documentation pour plus d'informations.
Lorsqu'un artefact est téléchargé, tous les fichiers sont assemblés dans une archive Zip immuable. Il n'existe actuellement aucun moyen de télécharger des artefacts dans un format autre qu'un Zip ou de télécharger le contenu d'artefacts individuels.
Les autorisations de fichiers ne sont pas conservées pendant le téléchargement d'artefacts. Tous les répertoires en auront 755
et tous les fichiers en auront 644
. Par exemple, si vous créez un fichier exécutable à l'aide de chmod
, puis téléchargez ce fichier, il n'est plus garanti que le fichier soit défini comme exécutable après le téléchargement.
Si vous devez conserver les autorisations, vous pouvez tar
tous vos fichiers ensemble avant le téléchargement de l'artefact. Après le téléchargement, le fichier tar
conservera les autorisations de fichier et le respect de la casse.
- 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
Au bas de la page de résumé du workflow se trouve une section dédiée aux artefacts. Voici une capture d'écran de quelque chose que vous pourriez voir :
Il existe une icône de poubelle qui peut être utilisée pour supprimer l'artefact. Cette icône n'apparaîtra que pour les utilisateurs disposant d'autorisations d'écriture sur le référentiel.
La taille de l'artefact est indiquée en octets. La taille de l'artefact affichée indique la taille du zip créé par upload-artifact
lors du téléchargement.