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

Buildah Build and Push (สร้างและ Push อิมเมจด้วย Buildah)

สร้างและ push OCI container image แบบ rootless ด้วย Buildah

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

หมวดหมู่: Build (การสร้างอิมเมจและแคช)

รันไทม์ (Runtime): quay.io/buildah/stable:v1.33.2 (รันแบบ non-root, ตรึงด้วย digest)

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

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

เหมาะสำหรับสร้าง container image โดยไม่ต้องพึ่งพา Docker daemon และไม่จำเป็นต้องรันในสิทธิ์ root เหมาะกับ pipeline ทั่วไปที่ต้องการสร้างและส่งอิมเมจขึ้น registry อย่างปลอดภัย

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

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
IMAGEstring—ใช่ชื่อและ tag ของอิมเมจปลายทางในรูปแบบ registry/repository:tag
DOCKERFILEstring./Dockerfileไม่เส้นทาง (path) ของไฟล์ Dockerfile โดยคิดเทียบกับ build context
CONTEXTstring.ไม่ไดเรกทอรีที่ใช้เป็น build context สำหรับการ build
TLSVERIFYstringtrueไม่เปิดใช้งานการตรวจสอบ TLS (TLS verification) ในการติดต่อกับ registry
BUILD_EXTRA_ARGSstring""ไม่argument หรือ flag เพิ่มเติมสำหรับส่งให้คำสั่ง build
PUSH_EXTRA_ARGSstring""ไม่argument หรือ flag เพิ่มเติมสำหรับส่งให้คำสั่ง push
SKIP_PUSHstringfalseไม่สร้าง container image อย่างเดียวโดยไม่ push ไปยัง registry

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

  • source (จำเป็น): เชื่อมโยงจาก pipeline workspace source
  • dockerconfig (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace docker-credentials

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
IMAGE_DIGESTค่า digest (SHA256) ของอิมเมจที่สร้างเสร็จ
IMAGE_URLURL อ้างอิงแบบเต็มของอิมเมจที่ push ไปยัง registry

การทำงาน​

รันคำสั่ง buildah bud เพื่อสร้าง image และสั่ง buildah push เพื่อส่งไปยัง registry โดยทำงานภายใต้ security context แบบ non-root ที่เพิ่ม capability สำหรับ user namespace เท่าที่จำเป็น หากมีการตั้งค่า credential ของ registry เอาไว้ ระบบจะ mount dockerconfig workspace ให้โดยอัตโนมัติ (หากไม่มี credential ที่ตรงกัน การ push ไปยัง private registry จะล้มเหลว)

ตัวอย่าง​

สร้างและ push ไปยัง Harbor Registry​

ระบุปลายทางอิมเมจ ตำแหน่งไฟล์ Dockerfile และ build context

steps:
- name: build
uses: loha/buildah-build@v1
with:
IMAGE: 'registry.example.com/my-org/my-app:${COMMIT_SHA}'
DOCKERFILE: './Dockerfile'
CONTEXT: '.'

ตรวจสอบ Dockerfile โดยไม่ push​

เหมาะสำหรับขั้นตอน pull request ที่ต้องการทดสอบว่า build ผ่านโดยไม่ต้องส่งอิมเมจขึ้น registry จริง

steps:
- name: validate-image
uses: loha/buildah-build@v1
with:
IMAGE: 'registry.example.com/my-org/my-app:pr-${PR_NUMBER}'
SKIP_PUSH: 'true'

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

ปัญหา: push อิมเมจไปยัง private registry แล้วได้รับข้อผิดพลาด 401 Unauthorized

วิธีแก้: เพิ่ม registry credential ที่มีสิทธิ์ push ในระบบ Loha และตรวจสอบว่าชื่อ registry ในพารามิเตอร์ IMAGE ตรงกับการตั้งค่า credential


ปัญหา: ขั้นตอน build ล้มเหลวพร้อมข้อผิดพลาด operation not permitted บน overlayfs

วิธีแก้: เซิร์ฟเวอร์บางระบบอาจจำกัดการทำงานของ rootless overlayfs ให้แก้ไขโดยกำหนด BUILD_EXTRA_ARGS: "--storage-driver=vfs" ซึ่งแม้จะใช้เวลาเพิ่มขึ้นแต่มีความเข้ากันได้สูงกว่า