แคช แชร์ และดีบักเวิร์กโฟลว์
ในหน่วยนี้ คุณจะได้เรียนรู้วิธีการปรับประสิทธิภาพให้เหมาะสม ส่งผ่านข้อมูลระหว่างงาน และแก้ไขปัญหาเวิร์กโฟลว์โดยใช้บันทึกและโทเค็น
หากต้องการใช้กระบวนการนี้ คุณจะได้เรียนรู้วิธีการ:
- การขึ้นต่อกันของแคชสําหรับเวิร์กโฟลว์ที่รวดเร็วขึ้น
- ส่งผ่านข้อมูลวัตถุระหว่างงาน
- เปิดใช้งานการบันทึกการดีบักสําหรับลําดับงาน
- เข้าถึงบันทึกเวิร์กโฟลว์จาก GitHub UI และ REST API
- ใช้โทเค็นการติดตั้งสําหรับการรับรองความถูกต้องของแอป GitHub
การขึ้นต่อกันของแคชด้วยการดําเนินการแคช
เมื่อคุณสร้างเวิร์กโฟลว์ คุณมักจะจําเป็นต้องใช้ผลลัพธ์เดียวกันหรือดาวน์โหลดการอ้างอิงจากการเรียกใช้งานหนึ่งไปยังอีกโฟลว์หนึ่ง แทนที่จะดาวน์โหลดการขึ้นต่อกันเหล่านี้ซ้ําแล้วซ้ําอีก คุณสามารถแคชเพื่อให้เวิร์กโฟลว์ของคุณทํางานได้รวดเร็วและมีประสิทธิภาพมากขึ้น การขึ้นต่อกันของแคชจะลดเวลาในการเรียกใช้ขั้นตอนบางอย่างในเวิร์กโฟลว์ เนื่องจากงานบนรันเนอร์ที่โฮสต์ GitHub เริ่มต้นในสภาพแวดล้อมเสมือนที่สะอาดในแต่ละครั้ง
หากต้องการแคชการขึ้นต่อกันของงาน ให้ใช้การดําเนินการ cache ของ GitHub การดําเนินการนี้จะเรียกใช้แคชที่ระบุโดยคีย์ที่ไม่ซ้ํากันที่คุณระบุ เมื่อการดําเนินการพบแคช แล้วจะดึงไฟล์ที่แคชไว้ในเส้นทางที่คุณกําหนดค่า หากต้องการใช้ cache การดําเนินการ คุณต้องตั้งค่าพารามิเตอร์ที่เฉพาะเจาะจงสองถึงสามรายการ:
| พารามิเตอร์ | คำอธิบาย | จำเป็น |
|---|---|---|
Key |
อ้างอิงถึงตัวระบุคีย์ที่สร้างขึ้นเมื่อบันทึกและค้นหาแคช | ใช่ |
Path |
อ้างถึงเส้นทางของไฟล์บนตัวเรียกใช้เพื่อแคชหรือค้นหา | ใช่ |
Restore-keys |
ประกอบด้วยคีย์ทางเลือกที่มีอยู่เพื่อแคชถ้าไม่พบคีย์แคชที่ต้องการ | ไม่ใช่ |
steps:
- uses: actions/checkout@v2
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-cache-
ในตัวอย่างก่อนหน้า path ถูกตั้งค่าเป็น ~/.npm และ key รวมถึงระบบปฏิบัติการของผู้เรียกใช้และแฮช SHA-256 ของไฟล์ package-lock.json การใส่คํานําหน้าคีย์ด้วย ID (npm-cache ในตัวอย่างนี้) จะมีประโยชน์เมื่อคุณกําลังใช้การแสดงแทน restore-keys และมีแคชหลายรายการ
ส่งผ่านข้อมูลวัตถุระหว่างงาน
คล้ายกับแนวคิดของการแคชการขึ้นต่อกันภายในเวิร์กโฟลว์ของคุณ คุณสามารถส่งผ่านข้อมูลระหว่างงานภายในเวิร์กโฟลว์เดียวกัน คุณสามารถส่งผ่านข้อมูลโดยใช้ การดําเนินการ upload-artifact และdownload-artifact งานที่ขึ้นอยู่กับอาร์ติแฟกต์ของงานก่อนหน้านี้ต้องรอให้งานก่อนหน้านี้เสร็จสมบูรณ์ก่อนที่จะสามารถเรียกใช้ได้ วิธีการนี้มีประโยชน์ถ้าคุณมีชุดงานที่ต้องเรียกใช้ตามลําดับตามอาร์ติแฟกต์ที่อัปโหลดจากงานก่อนหน้านี้ ตัวอย่างเช่น job_2 ต้องการ job_1 โดยใช้ไวยากรณ์ needs: job_1
name: Share data between jobs
on: push
jobs:
job_1:
name: Upload File
runs-on: ubuntu-latest
steps:
- run: echo "Hello World" > file.txt
- uses: actions/upload-artifact@v2
with:
name: file
path: file.txt
job_2:
name: Download File
runs-on: ubuntu-latest
needs: job_1
steps:
- uses: actions/download-artifact@v2
with:
name: file
- run: cat file.txt
ตัวอย่างนี้มีสองงาน
job_1 เขียนข้อความบางอย่างใน file.txt ไฟล์ จากนั้นใช้การดําเนินการ actions/upload-artifact@v2 เพื่ออัปโหลดอาร์ติแฟกตินี้ และจัดเก็บข้อมูลสําหรับการใช้งานในอนาคตภายในเวิร์กโฟลว์
job_2 จําเป็นต้องใช้ job_1 เพื่อดําเนินการให้เสร็จสมบูรณ์โดยใช้ไวยากรณ์ needs: job_1 จากนั้นใช้การดําเนินการ actions/download-artifact@v2 เพื่อดาวน์โหลดอาร์ติแฟกต์นั้น แล้วพิมพ์เนื้อหาของ file.txt
เปิดใช้งานการบันทึกขั้นตอนดีบักในเวิร์กโฟลว์
ในบางกรณี บันทึกเวิร์กโฟลว์เริ่มต้นไม่มีรายละเอียดเพียงพอสําหรับคุณในการวินิจฉัยว่าเหตุใดการเรียกใช้เวิร์กโฟลว์ งาน หรือขั้นตอนจึงล้มเหลว ในสถานการณ์เหล่านี้ คุณสามารถเปิดใช้งานการบันทึกดีบักเพิ่มเติมสําหรับสองตัวเลือก: การเรียกใช้และขั้นตอน เปิดใช้งานการบันทึกการวินิจฉัยนี้โดยการตั้งค่าข้อมูลลับที่เก็บสองข้อมูลที่จําเป็นต้องมีadminการเข้าถึงที่เก็บtrue
- เมื่อต้องการเปิดใช้งานการบันทึกการวินิจฉัย ให้
ACTIONS_RUNNER_DEBUGตั้งค่าข้อมูลลับในที่เก็บที่ประกอบด้วยเวิร์กโฟลว์เป็นtrue - เมื่อต้องการเปิดใช้งานการบันทึกการวินิจฉัยขั้นตอน ตั้งค่าข้อมูลลับ
ACTIONS_STEP_DEBUGในที่เก็บที่ประกอบด้วยเวิร์กโฟลว์เพื่อtrue
เข้าถึงบันทึกเวิร์กโฟลว์ใน GitHub
เมื่อคุณคิดถึงการทํางานโดยอัตโนมัติที่ประสบความสําเร็จ คุณตั้งใจที่จะใช้เวลาน้อยที่สุดในการดูสิ่งที่เป็นอัตโนมัติเพื่อให้คุณสามารถมุ่งเน้นไปที่สิ่งที่เกี่ยวข้อง แต่บางครั้งสิ่งต่างๆ ไม่ได้เป็นไปตามที่วางแผนไว้ และคุณจําเป็นต้องตรวจสอบสิ่งที่เกิดขึ้น กระบวนการดีบักอาจทําให้ผิดหวัง
GitHub มีเค้าโครงที่ชัดเจนมีโครงสร้างเพื่อช่วยให้คุณย้ายระหว่างงานได้อย่างรวดเร็วในขณะที่คุณรักษาบริบทของขั้นตอนการดีบักปัจจุบัน
เมื่อต้องการดูบันทึกของเวิร์กโฟลว์ที่เรียกใช้ใน GitHub:
- ในที่เก็บของคุณ ไปที่แท็บ การดําเนินการ
- ในบานหน้าต่างด้านซ้าย ให้เลือกเวิร์กโฟลว์
- ในรายการของการเรียกใช้เวิร์กโฟลว์ ให้เลือกการเรียกใช้
- ภายใต้ งาน ให้เลือกงาน
- อ่านรายการบันทึกเอาต์พุต
ถ้าคุณมีหลายการเรียกใช้ภายในเวิร์กโฟลว์ คุณสามารถเลือกตัวกรอง สถานะ หลังจากที่คุณเลือกเวิร์กโฟลว์ของคุณ และตั้งค่าเป็น ความล้มเหลว เพื่อแสดงเฉพาะการเรียกใช้ที่ล้มเหลวในเวิร์กโฟลว์นั้น
เข้าถึงบันทึกเวิร์กโฟลว์จาก REST API
นอกจากการดูบันทึกผ่าน GitHub แล้ว คุณสามารถใช้ GitHub REST API เพื่อดูบันทึกสําหรับการเรียกใช้เวิร์กโฟลว์ เรียกใช้เวิร์กโฟลว์ใหม่ หรือแม้แต่ยกเลิกการทํางานของเวิร์กโฟลว์ได้ เมื่อต้องการดูบันทึกของการเรียกใช้เวิร์กโฟลว์โดยใช้ API ให้ส่ง GET คําขอไปยังจุดสิ้นสุดการบันทึก โปรดทราบว่าทุกคนที่มีการเข้าถึงแบบอ่านในที่เก็บสามารถใช้จุดสิ้นสุดนี้ได้ ถ้าที่เก็บเป็นแบบส่วนตัว คุณต้องใช้โทเค็นการเข้าถึงกับขอบเขต repo
ตัวอย่างเช่น GET การร้องขอเพื่อดูบันทึกการเรียกใช้เวิร์กโฟลว์ที่ระบุจะเป็นไปตามเส้นทางนี้:
GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs
ระบุเวลาที่จะใช้โทเค็นการติดตั้งจากแอป GitHub
เมื่อมีการติดตั้งแอป GitHub บนบัญชี คุณสามารถรับรองความถูกต้องเป็นการติดตั้งแอปโดยใช้ installation access token คําขอ REST และ GraphQL API ขั้นตอนนี้อนุญาตให้แอปเข้าถึงแหล่งข้อมูลที่การติดตั้งเป็นเจ้าของ โดยสมมติว่าแอปได้รับสิทธิ์การเข้าถึงและสิทธิ์ใช้งานที่เก็บที่จําเป็นแล้ว คําขอ REST หรือ GraphQL API ที่ทําโดยการติดตั้งแอปจะมีแอตทริบิวต์เป็นแอป
ในตัวอย่างต่อไปนี้ คุณแทนที่ INSTALLATION_ACCESS_TOKEN ด้วยโทเค็นการเข้าถึงการติดตั้ง:
curl --request GET \
--url "https://api.github.com/meta" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer INSTALLATION_ACCESS_TOKEN" \
--header "X-GitHub-Api-Version: 2022-11-28"
คุณยังสามารถใช้โทเค็นการเข้าถึงการติดตั้งเพื่อรับรองความถูกต้องสําหรับการเข้าถึง Git ที่ใช้ HTTP ได้ แอปของ Contents คุณต้องมีสิทธิ์ที่เก็บข้อมูล จากนั้นคุณสามารถใช้โทเค็นการเข้าถึงการติดตั้งเป็นรหัสผ่าน HTTP ได้
คุณแทนที่ TOKEN ในตัวอย่างด้วยโทเค็นการเข้าถึงการติดตั้ง:
git clone https://x-access-token:TOKEN@github.com/owner/repo.git