@actions/upload-artifact
คำเตือน
actions/upload-artifact@v3 มีกำหนดเลิกใช้งานในวันที่ 30 พฤศจิกายน 2024 เรียนรู้เพิ่มเติม ในทำนองเดียวกัน v1/v2 มีกำหนดเลิกใช้งานในวันที่ 30 มิถุนายน 2024 โปรดอัปเดตเวิร์กโฟลว์ของคุณเพื่อใช้เวอร์ชัน 4 ของการดำเนินการกับอาร์ติแฟกต์ การเลิกใช้งานนี้จะไม่ส่งผลกระทบต่อ GitHub Enterprise Server เวอร์ชันที่มีอยู่ใดๆ ที่ลูกค้าใช้งาน
อัปโหลด Actions Artifacts จากการรันเวิร์กโฟลว์ของคุณ ขับเคลื่อนภายในโดยแพ็คเกจ @actions/artifact
ดูเพิ่มเติมที่การดาวน์โหลด-สิ่งประดิษฐ์
@actions/upload-artifact
สำคัญ
upload-artifact@v4+ ยังไม่รองรับ GHES ในขณะนี้ หากคุณอยู่บน GHES คุณต้องใช้ v3
การเปิดตัว upload-artifact@v4 และ download-artifact@v4 เป็นการเปลี่ยนแปลงครั้งใหญ่ในสถาปัตยกรรมแบ็กเอนด์ของ Artifacts มีการปรับปรุงประสิทธิภาพและพฤติกรรมมากมาย
สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบ @actions/artifact
นอกจากนี้ยังมีการกระทำย่อยใหม่ actions/upload-artifact/merge
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ README ของการดำเนินการนั้น
สำหรับนักวิ่งที่โฮสต์เอง อาจจำเป็นต้องมีกฎไฟร์วอลล์เพิ่มเติม
การอัปโหลดไปยัง Artifact ที่มีชื่อเดียวกันหลายครั้ง
เนื่องจากวิธีการสร้างอาร์ติแฟกต์ในเวอร์ชันใหม่นี้ จึงไม่สามารถอัปโหลดไปยังอาร์ติแฟกต์ที่มีชื่อเดียวกันหลายครั้งได้อีกต่อไป คุณต้องแบ่งการอัปโหลดออกเป็นอาร์ติแฟกต์หลายรายการโดยใช้ชื่อที่แตกต่างกัน หรืออัปโหลดเพียงครั้งเดียว มิฉะนั้นคุณ จะ พบข้อผิดพลาด
ขีดจำกัดของสิ่งประดิษฐ์สำหรับแต่ละงาน แต่ละงานในการรันเวิร์กโฟลว์ขณะนี้มีขีดจำกัดที่ 500 อาร์ติแฟกต์
ด้วย v4.4
และใหม่กว่า ไฟล์ที่ซ่อนไว้จะถูกแยกออกตามค่าเริ่มต้น
หากต้องการความช่วยเหลือในการเปลี่ยนแปลงที่ร้ายแรง โปรดดูที่ 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 :
ชื่อ | คำอธิบาย | ตัวอย่าง |
---|---|---|
artifact-id | รหัส GitHub ของอาร์ติแฟกต์สามารถใช้ได้โดย REST API | 1234 |
artifact-url | URL สำหรับดาวน์โหลดอาร์ติแฟกต์ สามารถใช้ในหลายสถานการณ์ เช่น การเชื่อมโยงไปยังสิ่งประดิษฐ์ในประเด็นต่างๆ หรือการดึงคำขอ ผู้ใช้จะต้องเข้าสู่ระบบเพื่อให้ URL นี้ทำงานได้ URL นี้ใช้ได้ตราบใดที่อาร์ติแฟกต์ยังไม่หมดอายุ หรืออาร์ติแฟกต์ การรัน หรือที่เก็บยังไม่ได้ถูกลบ | 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
สำหรับไวด์การ์ดที่รองรับพร้อมกับลักษณะการทำงานและเอกสาร โปรดดูที่ @actions/glob ซึ่งใช้ภายในเพื่อค้นหาไฟล์
หากใช้รูปแบบไวด์การ์ด ลำดับชั้นของเส้นทางจะถูกรักษาไว้หลังจากรูปแบบไวด์การ์ดแรก:
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
หากมีการระบุหลายเส้นทางเป็นอินพุต บรรพบุรุษร่วมที่น้อยที่สุดของเส้นทางการค้นหาทั้งหมดจะถูกนำมาใช้เป็นไดเร็กทอรีรากของอาร์ติแฟกต์ เส้นทางที่แยกไม่ส่งผลต่อโครงสร้างไดเร็กทอรี
อนุญาตทั้งเส้นทางไฟล์แบบสัมพัทธ์และแบบสัมบูรณ์ เส้นทางสัมพัทธ์ถูกรูทกับไดเร็กทอรีการทำงานปัจจุบัน เส้นทางที่ขึ้นต้นด้วยอักขระตัวแทนควรอ้างอิงเพื่อหลีกเลี่ยงการตีความว่าเป็นนามแฝง YAML
หากคุณกำลังอัปโหลดข้อมูลขนาดใหญ่หรือบีบอัดได้ง่ายไปยังอาร์ติแฟกต์ของคุณ คุณอาจได้รับประโยชน์จากการปรับระดับการบีบอัด ตามค่าเริ่มต้น ระดับการบีบอัดจะเป็น 6
ซึ่งเหมือนกับ GNU Gzip
ค่าสามารถอยู่ในช่วงตั้งแต่ 0 ถึง 9:
ระดับที่สูงขึ้นจะส่งผลให้การบีบอัดดีขึ้น แต่จะใช้เวลานานกว่าจึงจะเสร็จสิ้น สำหรับไฟล์ขนาดใหญ่ที่ไม่สามารถบีบอัดได้ง่าย แนะนำให้ใช้ค่า 0
เพื่อการอัพโหลดที่รวดเร็วยิ่งขึ้น
ตัวอย่างเช่น หากคุณกำลังอัปโหลดข้อมูลไบนารีแบบสุ่ม คุณสามารถประหยัดเวลาได้มากโดยการเลือกไม่ใช้การบีบอัดทั้งหมด เนื่องจากจะไม่เกิดประโยชน์:
- 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
แต่หากคุณอัปโหลดข้อมูลที่บีบอัดได้ง่าย (เช่น ข้อความธรรมดา โค้ด ฯลฯ) คุณสามารถประหยัดพื้นที่และค่าใช้จ่ายได้โดยมีระดับการบีบอัดที่สูงขึ้น แต่สิ่งนี้จะหนักกว่าบน CPU ดังนั้นการอัพโหลดจึงช้ากว่า:
- 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
หากเส้นทาง (หรือเส้นทาง) ส่งผลให้ไม่พบไฟล์สำหรับอาร์ติแฟกต์ การดำเนินการจะสำเร็จแต่จะพิมพ์คำเตือนออกมา ในบางสถานการณ์ อาจเป็นที่พึงปรารถนาที่จะดำเนินการล้มเหลวหรือระงับคำเตือน ตัวเลือก if-no-files-found
ช่วยให้คุณปรับแต่งพฤติกรรมของการดำเนินการได้หากไม่พบไฟล์:
- 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`
ไม่เหมือนกับ upload-artifact
เวอร์ชันก่อนหน้า การอัปโหลดไปยังสิ่งประดิษฐ์เดียวกันผ่านงานหลายงาน ไม่ได้ รับการสนับสนุนด้วย 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
ชื่ออาร์ติแฟกต์ต้องไม่ซ้ำกัน เนื่องจากอาร์ติแฟกต์ที่สร้างขึ้นแต่ละรายการจะมีค่าคงที่ ดังนั้นงานหลายงานจึงไม่สามารถแก้ไขอาร์ติแฟกต์เดียวกันได้
ในสถานการณ์เมทริกซ์ โปรดระวังอย่าอัปโหลดไปยังอาร์ติแฟกต์เดียวกันโดยไม่ตั้งใจ ไม่เช่นนั้นคุณจะพบข้อผิดพลาดข้อขัดแย้ง เป็นการดีที่สุดที่จะตั้งชื่อสิ่งประดิษฐ์ ด้วย คำนำหน้าหรือคำต่อท้ายจากเมทริกซ์:
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
ซึ่งจะส่งผลให้เกิดสิ่งประดิษฐ์เช่น: binary-ubuntu-latest-a
, binary-windows-latest-b
และอื่น ๆ
ก่อนหน้านี้พฤติกรรม ที่อนุญาต ให้ชื่อสิ่งประดิษฐ์เหมือนกัน ซึ่งส่งผลให้เกิดการกลายพันธุ์ที่ไม่คาดคิดและความเสียหายโดยไม่ตั้งใจ อาร์ติแฟกต์ที่สร้างโดย upload-artifact@v4 จะไม่เปลี่ยนรูป
คุณสามารถใช้ ~
ในอินพุตเส้นทางแทน $HOME
รองรับการขยายตัวหนอนพื้นฐาน:
- run : |
mkdir -p ~/new/artifact
echo hello > ~/new/artifact/world.txt
- uses : actions/upload-artifact@v4
with :
name : my-artifacts
path : ~/new/**/*
ตัวแปรสภาพแวดล้อมพร้อมกับนิพจน์บริบทยังสามารถใช้สำหรับอินพุตได้ สำหรับเอกสารประกอบ โปรดดูบริบทและไวยากรณ์นิพจน์:
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/**/*
สำหรับตัวแปรสภาพแวดล้อมที่สร้างขึ้นในขั้นตอนอื่น ตรวจสอบให้แน่ใจว่าใช้ไวยากรณ์นิพจน์ 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
อาร์ติแฟกต์จะถูกเก็บไว้เป็นเวลา 90 วันตามค่าเริ่มต้น คุณสามารถระบุระยะเวลาการเก็บรักษาที่สั้นลงได้โดยใช้อินพุตจำนวน 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
ระยะเวลาการเก็บรักษาต้องอยู่ระหว่าง 1 ถึง 90 สำหรับข้อมูลเพิ่มเติม โปรดดูนโยบายการเก็บรักษาสิ่งประดิษฐ์และบันทึก
หากการอัปโหลดอาร์ติแฟกต์สำเร็จ เอาต์พุต artifact-id
จะพร้อมใช้งาน รหัสนี้เป็นตัวระบุเฉพาะที่สามารถใช้กับ 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"
แม้ว่าจะไม่สามารถกลายพันธุ์อาร์ติแฟกต์ได้ แต่ก็สามารถเขียนทับอาร์ติแฟกต์ได้ทั้งหมด แต่โปรดทราบว่าสิ่งนี้จะทำให้ Artifact มี ID ใหม่ โดย ID ก่อนหน้านี้จะไม่มีอีกต่อไป:
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
ตามค่าเริ่มต้น การดำเนินการนี้จะละเว้นไฟล์ที่ซ่อนไว้เพื่อหลีกเลี่ยงการอัปโหลดข้อมูลที่ละเอียดอ่อนโดยไม่ได้ตั้งใจ
หากคุณต้องการอัปโหลดไฟล์ที่ซ่อน คุณสามารถใช้อินพุต include-hidden-files
ได้ ไฟล์ใดๆ ที่มีข้อมูลที่ละเอียดอ่อนซึ่งไม่ควรอยู่ในอาร์ติแฟกต์ที่อัปโหลดสามารถยกเว้นได้โดยใช้ path
:
- uses : actions/upload-artifact@v4
with :
name : my-artifact
include-hidden-files : true
path : |
path/output/
!path/output/.production.env
ไฟล์ที่ซ่อนถูกกำหนดให้เป็นไฟล์ใดๆ ที่ขึ้นต้นด้วย .
หรือไฟล์ภายในโฟลเดอร์ที่ขึ้นต้นด้วย .
- บน Windows ไฟล์และไดเร็กทอรีที่มีแอตทริบิวต์ที่ซ่อนไว้จะไม่ถือว่าเป็นไฟล์ที่ซ่อนเว้นแต่จะมีนามสกุล .
คำนำหน้า
ภายในแต่ละงาน มีการจำกัดสิ่งประดิษฐ์ที่สามารถสร้างได้ 500 ชิ้นสำหรับงานนั้น
คุณอาจถูกจำกัดโดยอาร์ติแฟกต์หากคุณใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเกินโควต้า พื้นที่เก็บข้อมูลจะคำนวณทุกๆ 6-12 ชั่วโมง ดูเอกสารประกอบสำหรับข้อมูลเพิ่มเติม
เมื่ออัปโหลดอาร์ติแฟกต์ ไฟล์ทั้งหมดจะถูกประกอบเข้าเป็นไฟล์ ZIP ที่ไม่เปลี่ยนรูปแบบ ขณะนี้ยังไม่มีวิธีการดาวน์โหลดอาร์ติแฟกต์ในรูปแบบอื่นนอกเหนือจาก Zip หรือดาวน์โหลดเนื้อหาอาร์ติแฟกต์แต่ละรายการ
สิทธิ์ของไฟล์จะไม่ได้รับการดูแลในระหว่างการอัปโหลดสิ่งประดิษฐ์ ไดเร็กทอรีทั้งหมดจะมี 755
และไฟล์ทั้งหมดจะมี 644
ตัวอย่างเช่น หากคุณสร้างไฟล์ที่เรียกใช้งานได้โดยใช้ chmod
แล้วอัปโหลดไฟล์นั้น จะไม่รับประกันว่าไฟล์ดังกล่าวจะถูกตั้งค่าเป็นไฟล์เรียกทำงานภายหลังการดาวน์โหลดไฟล์อีกต่อไป
หากคุณต้องรักษาสิทธิ์ไว้ คุณสามารถ tar
ไฟล์ทั้งหมดของคุณเข้าด้วยกันก่อนที่จะอัปโหลดอาร์ติแฟกต์ หลังดาวน์โหลด ไฟล์ tar
จะรักษาสิทธิ์ของไฟล์และคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
- 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
ที่ด้านล่างของหน้าสรุปเวิร์กโฟลว์ มีส่วนเฉพาะสำหรับอาร์ติแฟกต์ นี่คือภาพหน้าจอของสิ่งที่คุณอาจเห็น:
มีไอคอนถังขยะที่สามารถใช้เพื่อลบสิ่งประดิษฐ์ได้ ไอคอนนี้จะปรากฏสำหรับผู้ใช้ที่มีสิทธิ์ในการเขียนไปยังพื้นที่เก็บข้อมูลเท่านั้น
ขนาดของสิ่งประดิษฐ์จะแสดงเป็นไบต์ ขนาดอาร์ติแฟกต์ที่แสดงหมายถึงขนาดของไฟล์ ZIP ที่ upload-artifact
สร้างขึ้นระหว่างการอัปโหลด