ข้ามไปยังเนื้อหาหลัก

Git Clone (โคลน Git Repository)

โคลน repository ที่เป็นจุดเริ่มต้นของ build หรือจาก Git URL อื่นลงใน workspace

การอ้างอิง (Reference): loha/git-clone@v1

หมวดหมู่: Source Control (การจัดการซอร์สโค้ด)

รันไทม์ (Runtime): alpine/git:2.43.0 (รันแบบ non-root, ตรึงด้วย digest)

สัญญาอนุญาต (License): Apache-2.0

ควรใช้เมื่อ​

ใช้เป็นขั้นตอนแรกของ pipeline เพื่อให้ขั้นตอนถัดไปมีซอร์สโค้ดพร้อมสำหรับ build, test หรือ deploy กำหนดค่าเองเมื่อต้องการระบุ branch, repository อื่น หรือ submodule ที่ต่างจากค่าเริ่มต้น

พารามิเตอร์​

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
urlstring—ใช่URL ของ Git repository ที่ต้องการโคลน
revisionstringmainไม่Git revision ที่ต้องการ checkout เช่น ชื่อ branch, tag หรือ commit SHA
depthstring1ไม่ความลึกในการทำ shallow clone (กำหนด 0 เพื่อดึงประวัติทั้งหมด)
submodulesstringtrueไม่กำหนดว่าจะให้ initialize และ checkout Git submodule ด้วยหรือไม่
sslVerifystringtrueไม่เปิดใช้งานการตรวจสอบใบรับรอง SSL (SSL verification)
subdirectorystring""ไม่ไดเรกทอรีย่อย (subdirectory) ภายใน workspace ที่จะใช้โคลน repository ลงไป
deleteExistingstringtrueไม่ลบเนื้อหาที่มีอยู่เดิมในไดเรกทอรีปลายทางก่อนเริ่มโคลน

พื้นที่ทำงาน (Workspaces)​

  • output (จำเป็น): เชื่อมโยงจาก pipeline workspace source
  • ssh-directory (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace ssh-credentials
  • basic-auth (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace git-credentials

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
commitCommit SHA ที่ถูก checkout ลงมาใช้งานจริง
urlURL ของ Git repository ที่ทำการโคลน
committer-dateเวลา timestamp (epoch) ของ commit

การทำงาน​

สั่งรันคำสั่ง git ภายในอิมเมจ alpine/git โดยทำ shallow clone ด้วย depth 1 เป็นค่าเริ่มต้นเพื่อประหยัดเวลาและลดระยะเวลาดาวน์โหลด หากต้องการประวัติ commit ทั้งหมด (เช่น ใช้กับ git describe หรือตรวจจับการเปลี่ยนแปลงใน monorepo) ให้ตั้ง depth: "0" ทั้งนี้ สำหรับ private repository สามารถใช้ workspace ssh-directory หรือ basic-auth เพื่อยืนยันตัวตนได้

ตัวอย่าง​

โคลน repository ที่เริ่ม pipeline​

กรณีการใช้งานทั่วไป: ใช้ URL และ revision ของ pipeline ที่ระบบ Loha ส่งต่อให้โดยอัตโนมัติ

steps:
- name: checkout
uses: loha/git-clone@v1
with:
url: '${REPO_URL}'
revision: '${COMMIT_SHA}'

ใช้ประวัติเต็มพร้อม submodules​

ใช้เมื่อจำเป็นต้องอ่านประวัติ git log ทั้งหมด หรือต้องการดึงโค้ดจาก submodule ร่วมด้วย

steps:
- name: checkout
uses: loha/git-clone@v1
with:
url: 'https://github.com/my-org/my-monorepo'
revision: 'main'
depth: '0'
submodules: 'true'

การแก้ปัญหา​

ปัญหา: โคลน private repository แล้วไม่ผ่านการยืนยันตัวตน (authentication failed)

วิธีแก้: กำหนดค่า workspace ssh-directory หรือ basic-auth พร้อมใส่ credential ของ repository ให้ถูกต้อง จากนั้นตรวจสอบสิทธิ์การเข้าถึงของ SSH key หรือ access token


ปัญหา: คำสั่ง git describe แจ้งว่าไม่พบ tag

วิธีแก้: ตั้งค่า depth: "0" เพื่อดึงประวัติของ git มาทั้งหมด เนื่องจากการทำ shallow clone แบบเริ่มต้นจะไม่มีข้อมูล tag ย้อนหลังเพียงพอ