@actions/upload-artifact
Peringatan
action/upload-artifact@v3 dijadwalkan tidak digunakan lagi pada tanggal 30 November 2024 . Pelajari lebih lanjut. Demikian pula, v1/v2 dijadwalkan untuk dihentikan pada tanggal 30 Juni 2024 . Harap perbarui alur kerja Anda untuk menggunakan tindakan artefak v4. Penghentian ini tidak akan memengaruhi versi GitHub Enterprise Server apa pun yang digunakan oleh pelanggan.
Unggah Artefak Tindakan dari Alur Kerja Anda. Didukung secara internal oleh paket @actions/artifact.
Lihat juga artefak unduhan.
@actions/upload-artifact
Penting
upload-artifact@v4+ saat ini belum didukung di GHES. Jika Anda menggunakan GHES, Anda harus menggunakan v3.
Rilis upload-artifact@v4 dan download-artifact@v4 merupakan perubahan besar pada arsitektur backend Artifacts. Mereka mengalami banyak peningkatan kinerja dan perilaku.
Untuk informasi selengkapnya, lihat dokumentasi @actions/artifact
.
Ada juga sub-tindakan baru, actions/upload-artifact/merge
. Untuk informasi lebih lanjut, lihat README tindakan tersebut.
Pada pelari yang dihosting sendiri, aturan firewall tambahan mungkin diperlukan.
Mengunggah ke Artifact dengan nama yang sama beberapa kali.
Karena cara Artefak dibuat dalam versi baru ini, tidak mungkin lagi mengunggah ke Artefak dengan nama yang sama beberapa kali. Anda harus membagi unggahan menjadi beberapa Artefak dengan nama berbeda, atau hanya mengunggah satu kali. Jika tidak, Anda akan menemui kesalahan.
Batas Artefak untuk pekerjaan individu. Setiap pekerjaan dalam alur kerja yang dijalankan kini memiliki batas 500 artefak.
Dengan v4.4
dan yang lebih baru, file tersembunyi dikecualikan secara default.
Untuk bantuan dalam mengatasi perubahan, lihat 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 :
Nama | Keterangan | Contoh |
---|---|---|
artifact-id | ID GitHub dari Artefak, dapat digunakan oleh REST API | 1234 |
artifact-url | URL untuk mengunduh Artefak. Dapat digunakan dalam banyak skenario seperti menautkan ke artefak dalam masalah atau permintaan penarikan. Pengguna harus masuk agar URL ini berfungsi. URL ini valid selama artefak belum kedaluwarsa atau artefak, proses, atau repositori belum dihapus | 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
Untuk wildcard yang didukung beserta perilaku dan dokumentasinya, lihat @actions/glob yang digunakan secara internal untuk mencari file.
Jika pola karakter pengganti digunakan, hierarki jalur akan dipertahankan setelah pola karakter pengganti pertama:
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
Jika beberapa jalur disediakan sebagai masukan, nenek moyang paling tidak umum dari semua jalur pencarian akan digunakan sebagai direktori akar artefak. Jalur pengecualian tidak memengaruhi struktur direktori.
Jalur file relatif dan absolut keduanya diperbolehkan. Jalur relatif di-root terhadap direktori kerja saat ini. Jalur yang dimulai dengan karakter wildcard harus diberi tanda kutip agar tidak ditafsirkan sebagai alias YAML.
Jika Anda mengunggah data berukuran besar atau mudah dikompres ke artefak Anda, Anda bisa mendapatkan manfaat dari penyesuaian tingkat kompresi. Secara default, tingkat kompresinya adalah 6
, sama dengan GNU Gzip.
Nilainya dapat berkisar dari 0 hingga 9:
Level yang lebih tinggi akan menghasilkan kompresi yang lebih baik, namun membutuhkan waktu lebih lama untuk menyelesaikannya. Untuk file besar yang tidak mudah dikompres, disarankan nilai 0
untuk upload yang jauh lebih cepat.
Misalnya, jika Anda mengunggah data biner acak, Anda dapat menghemat banyak waktu dengan memilih tidak ikut kompresi sama sekali, karena hal ini tidak akan memberikan manfaat:
- 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
Namun, jika Anda mengunggah data yang mudah dikompresi (seperti teks biasa, kode, dll), Anda dapat menghemat ruang dan biaya dengan memiliki tingkat kompresi yang lebih tinggi. Tapi ini akan lebih berat pada CPU sehingga lebih lambat untuk diunggah:
- 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
Jika suatu jalur (atau jalur), mengakibatkan tidak ada file yang ditemukan untuk artefak tersebut, tindakan akan berhasil tetapi mencetak peringatan. Dalam skenario tertentu, mungkin diinginkan untuk menggagalkan tindakan atau menyembunyikan peringatan. Opsi if-no-files-found
memungkinkan Anda menyesuaikan perilaku tindakan jika tidak ada file yang ditemukan:
- 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`
Berbeda dengan versi upload-artifact
sebelumnya, pengunggahan ke artefak yang sama melalui beberapa pekerjaan tidak didukung dengan 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
Nama artefak harus unik karena setiap artefak yang dibuat bersifat idempoten sehingga beberapa tugas tidak dapat mengubah artefak yang sama.
Dalam skenario matriks, berhati-hatilah agar tidak mengunggah artefak yang sama secara tidak sengaja, jika tidak, Anda akan mengalami kesalahan konflik. Sebaiknya beri nama artefak dengan awalan atau akhiran dari matriks:
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
Ini akan menghasilkan artefak seperti: binary-ubuntu-latest-a
, binary-windows-latest-b
, dan seterusnya.
Sebelumnya perilaku tersebut memungkinkan nama artefak sama sehingga mengakibatkan mutasi yang tidak terduga dan kerusakan yang tidak disengaja. Artefak yang dibuat oleh upload-artifact@v4 tidak dapat diubah.
Anda dapat menggunakan ~
pada input jalur sebagai pengganti $HOME
. Ekspansi gelombang pasang dasar didukung:
- run : |
mkdir -p ~/new/artifact
echo hello > ~/new/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifacts
path : ~/new/**/*
Variabel lingkungan bersama dengan ekspresi konteks juga dapat digunakan sebagai masukan. Untuk dokumentasi, lihat konteks dan sintaksis ekspresi:
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/**/*
Untuk variabel lingkungan yang dibuat pada langkah lain, pastikan untuk menggunakan sintaks ekspresi 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
Artefak dipertahankan selama 90 hari secara default. Anda dapat menentukan periode retensi yang lebih pendek menggunakan input 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
Periode retensi harus antara 1 dan 90 inklusif. Untuk informasi lebih lanjut, lihat kebijakan artefak dan penyimpanan log.
Jika pengunggahan artefak berhasil maka keluaran artifact-id
tersedia. ID ini adalah pengidentifikasi unik yang dapat digunakan dengan Artifact REST API.
- 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"
Meskipun Artefak tidak dapat dimutasi, Artefak dapat ditimpa sepenuhnya. Namun perlu diingat bahwa ini akan memberi Artefak ID baru, yang sebelumnya tidak akan ada lagi:
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
Secara default, file tersembunyi diabaikan oleh tindakan ini untuk menghindari pengunggahan informasi sensitif secara tidak sengaja.
Jika Anda perlu mengunggah file tersembunyi, Anda dapat menggunakan input include-hidden-files
. File apa pun yang berisi informasi sensitif yang tidak boleh ada dalam artefak yang diunggah dapat dikecualikan menggunakan path
:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
include-hidden-files : true
path : |
path/output/
!path/output/.production.env
File tersembunyi didefinisikan sebagai file apa pun yang dimulai dengan .
atau file dalam folder yang diawali dengan .
. Di Windows, file dan direktori dengan atribut tersembunyi tidak dianggap sebagai file tersembunyi kecuali file dan direktori tersebut memiliki ekstensi .
awalan.
Dalam satu tugas, ada batasan 500 artefak yang dapat dibuat untuk tugas tersebut.
Anda juga mungkin dibatasi oleh Artefak jika Anda telah melampaui kuota penyimpanan bersama. Penyimpanan dihitung setiap 6-12 jam. Lihat dokumentasi untuk info lebih lanjut.
Saat Artefak diunggah, semua file dikumpulkan menjadi arsip Zip yang tidak dapat diubah. Saat ini tidak ada cara untuk mengunduh artefak dalam format selain Zip atau mengunduh konten artefak individual.
Izin file tidak dipertahankan selama pengunggahan artefak. Semua direktori akan memiliki 755
dan semua file akan memiliki 644
. Misalnya, jika Anda membuat file dapat dieksekusi menggunakan chmod
dan kemudian mengunggah file tersebut, setelah pengunduhan, file tersebut tidak lagi dijamin akan ditetapkan sebagai file yang dapat dieksekusi.
Jika Anda harus mempertahankan izin, Anda dapat tar
semua file Anda sebelum artefak diunggah. Pasca pengunduhan, file tar
akan mempertahankan izin file dan sensitivitas huruf besar-kecil.
- 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
Di bagian bawah halaman ringkasan alur kerja, terdapat bagian khusus untuk artefak. Berikut tangkapan layar dari sesuatu yang mungkin Anda lihat:
Terdapat ikon tempat sampah yang dapat digunakan untuk menghapus artefak. Ikon ini hanya akan muncul bagi pengguna yang memiliki izin menulis ke repositori.
Ukuran artefak dilambangkan dalam byte. Ukuran artefak yang ditampilkan menunjukkan ukuran zip yang dibuat upload-artifact
selama unggahan.