0Pricing
DevOps Bootcamp · บทเรียน

การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq

อ่านและแก้ไข YAML ของ Kubernetes และ CI โดยตรงด้วย yq พร้อมคงโครงสร้างและความคิดเห็นไว้

การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

yq คืออะไร และเหตุใดจึงใช้กับ YAML

yq เป็นตัวประมวลผล YAML แบบบรรทัดคำสั่งที่พกพาได้ คล้ายกับที่ jq ใช้จัดการ JSON โดยช่วยให้คุณอ่าน กรอง และแก้ไขไฟล์ YAML ได้โดยไม่ต้องเขียนสคริปต์ด้วย Python หรือ Ruby

มีเครื่องมือยอดนิยมสองรายการที่ใช้ชื่อ yq:

  • mikefarah/yq (Go) — มีการดูแลอย่างต่อเนื่อง รองรับ YAML, JSON, XML และ TOML บทเรียนนี้ใช้รุ่นนี้
  • kislyuk/yq (Python) — ตัวหุ้ม jq สำหรับ YAML ซึ่งมีไวยากรณ์แตกต่างกัน

ติดตั้งรุ่น Go:

  • brew install yq บน macOS
  • snap install yq บน Linux
  • หรือดาวน์โหลดไบนารีด้วยคำสั่ง: wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq && chmod +x /usr/local/bin/yq

ตรวจสอบด้วยคำสั่ง yq --version ซึ่งควรแสดง v4.x.x รุ่น 4 ใช้ไวยากรณ์นิพจน์แตกต่างจาก v3 ดังนั้นรุ่นจึงมีความสำคัญ

# Install yq (Go version) on Linux
wget -q https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 \
  -O /usr/local/bin/yq
chmod +x /usr/local/bin/yq

# Confirm version
yq --version

การอ่านค่าจาก YAML ของ Kubernetes Deployment

ก่อนแก้ไขสิ่งใด ให้เรียนรู้การ อ่าน ฟิลด์ YAML ก่อน เมื่อมี Kubernetes Deployment คุณสามารถดึงค่าที่ซ้อนกันอยู่ได้ด้วยเส้นทางแบบจุด

ตัวอย่าง deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: production
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: app
          image: my-app:1.0.0

คำสั่งหลักสำหรับอ่านค่า:

  • yq '.metadata.name' deployment.yaml — แสดงผล my-app
  • yq '.spec.replicas' deployment.yaml — แสดงผล 3
  • yq '.spec.template.spec.containers[0].image' deployment.yaml — แสดงผล my-app:1.0.0

โดยค่าเริ่มต้น ผลลัพธ์จะเป็นข้อความธรรมดา (ไม่มีเครื่องหมายอัญประกาศ) เพิ่มแฟล็ก -r หรือใช้ | yq -r หากต้องการสตริงดิบในสคริปต์

# Create a sample deployment YAML
cat > /tmp/deployment.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: production
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: app
          image: my-app:1.0.0
EOF

# Read individual fields
echo "App name:    $(yq '.metadata.name' /tmp/deployment.yaml)"
echo "Replicas:    $(yq '.spec.replicas' /tmp/deployment.yaml)"
echo "Image:       $(yq '.spec.template.spec.containers[0].image' /tmp/deployment.yaml)"

การแก้ไขไฟล์โดยตรงด้วยแฟล็ก -i

แฟล็กที่สำคัญที่สุดสำหรับการใช้งานจริงคือ -i (แก้ไขโดยตรง) หากไม่ใช้แฟล็กนี้ yq จะแสดงผลลัพธ์ไปยังเอาต์พุตมาตรฐานและปล่อยไฟล์ไว้เหมือนเดิม

ไวยากรณ์:

  • อ่านอย่างเดียว (เอาต์พุตมาตรฐาน): yq '.spec.replicas' file.yaml
  • แก้ไขไฟล์โดยตรง: yq -i '.spec.replicas = 5' file.yaml

ตัวดำเนินการกำหนดค่า = ใช้ตั้งค่า นิพจน์นี้เป็นตัวกรอง yq แบบเต็มรูปแบบ คุณจึงรวมการอ่านและการเขียนไว้ในการทำงานครั้งเดียวได้

สำคัญ: yq -i จะเขียนไฟล์ใหม่ทั้งหมด โดยทั่วไปความคิดเห็นที่อยู่ในบรรทัดเดียวกับฟิลด์จะยังคงอยู่ แต่กลุ่มความคิดเห็นที่อยู่เดี่ยว ๆ อาจถูกย้ายตำแหน่ง ควรบันทึก YAML เข้าสู่ระบบควบคุมเวอร์ชันก่อนแก้ไขไฟล์จำนวนมากโดยตรงเสมอ

ทดสอบโดยไม่ใช้ -i ก่อน แล้วค่อยเพิ่มแฟล็กนี้เมื่อพอใจกับผลลัพธ์

# Start with the deployment from the previous scene
echo 'Before:' && yq '.spec.replicas' /tmp/deployment.yaml

# Edit in place: scale to 5 replicas
yq -i '.spec.replicas = 5' /tmp/deployment.yaml

echo 'After:' && yq '.spec.replicas' /tmp/deployment.yaml

การอัปเดตแท็กรูปภาพคอนเทนเนอร์

งาน CI ที่พบได้บ่อยมากคือ การเพิ่มแท็กของอิมเมจ Docker ในรายการกำหนดค่า Kubernetes หลังจากสร้างอิมเมจใหม่ ด้วย yq งานนี้ทำได้ด้วยคำสั่งบรรทัดเดียว

รูปแบบมีดังนี้:

  • เลือกคอนเทนเนอร์ตามชื่อโดยใช้ select() เพื่อหลีกเลี่ยงการกำหนดดัชนีอาร์เรย์เป็นค่าตายตัวที่ 0
  • ใช้ |= (ตัวดำเนินการอัปเดต) หรือ = เพื่อตั้งค่าใหม่

การใช้ดัชนีอาร์เรย์ (เปราะบางหากรายการคอนเทนเนอร์เปลี่ยนแปลง):

  • yq -i '.spec.template.spec.containers[0].image = "my-app:2.1.0"' deployment.yaml

การใช้ select() (ทนทานกว่า):

  • yq -i '(.spec.template.spec.containers[] | select(.name == "app")).image = "my-app:2.1.0"' deployment.yaml

ในไปป์ไลน์ CI คุณจะส่งแท็กเป็นตัวแปรของเชลล์:

NEW_TAG="my-app:2.1.0"
CONTAINER_NAME="app"

# Robust update: target by container name, not index
yq -i \
  "(.spec.template.spec.containers[] | select(.name == \"${CONTAINER_NAME}\")).image = \"${NEW_TAG}\"" \
  /tmp/deployment.yaml

# Verify
yq '.spec.template.spec.containers[0].image' /tmp/deployment.yaml

การเพิ่มและลบฟิลด์

นอกจากการอัปเดตฟิลด์ที่มีอยู่แล้ว yq ยังสามารถ เพิ่ม คีย์ใหม่หรือ ลบ คีย์ที่มีอยู่ได้

การเพิ่มฟิลด์:

  • กำหนดค่าให้เส้นทางที่ยังไม่มีอยู่ได้โดยตรง: yq -i '.metadata.labels.version = "v2"' file.yaml
  • หากคีย์แม่ (labels) ยังไม่มี yq จะสร้างให้โดยอัตโนมัติ

การลบฟิลด์:

  • ใช้ฟังก์ชัน del(): yq -i 'del(.metadata.annotations)' file.yaml
  • ลบสมาชิกอาร์เรย์ตามดัชนี: yq -i 'del(.spec.template.spec.containers[1])' file.yaml

การเพิ่มสมาชิกลงในอาร์เรย์:

  • yq -i '.spec.template.spec.containers += [{"name": "sidecar", "image": "envoy:latest"}]' file.yaml
# Add a label to the deployment
yq -i '.metadata.labels.version = "v2"' /tmp/deployment.yaml
yq -i '.metadata.labels.managed-by = "ci-pipeline"' /tmp/deployment.yaml

echo '--- Labels after adding ---'
yq '.metadata.labels' /tmp/deployment.yaml

# Delete one label
yq -i 'del(.metadata.labels.managed-by)' /tmp/deployment.yaml

echo '--- Labels after delete ---'
yq '.metadata.labels' /tmp/deployment.yaml

การทำงานกับไฟล์ YAML หลายเอกสาร

รายการกำหนดค่า Kubernetes มักรวมทรัพยากรหลายรายการไว้ในไฟล์เดียว โดยคั่นด้วย --- ตามค่าเริ่มต้น yq จะประมวลผล เอกสารทั้งหมด ในไฟล์ดังกล่าว

เทคนิคสำคัญ:

  • แสดงชนิดของเอกสารทั้งหมด: yq '.[].kind' multi.yaml — สังเกต .[] ที่อยู่ด้านหน้าเพื่อวนดูเอกสาร
  • เลือกเอกสารตามชนิด: yq 'select(.kind == "Service")' multi.yaml
  • แก้ไขเฉพาะเอกสารที่ตรงเงื่อนไขโดยตรง:

yq -i 'select(.kind == "Deployment").spec.replicas = 2' multi.yaml

เอกสารที่ไม่ตรงกับเงื่อนไขของ select() จะถูกส่งต่อโดยไม่เปลี่ยนแปลง ดังนั้น Service, ConfigMap และทรัพยากรอื่น ๆ ของคุณจะยังคงอยู่ครบถ้วน

หากต้องการแยกไฟล์หลายเอกสารเป็นไฟล์เดี่ยว คุณสามารถวนดูเอาต์พุตของ yq หรือใช้คำสั่งต่อไปนี้:

  • yq -s '.kind' multi.yaml — เขียนไฟล์หนึ่งไฟล์ต่อเอกสาร โดยตั้งชื่อตามค่าของ .kind
cat > /tmp/multi.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
---
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  port: 80
EOF

# Scale ONLY the Deployment, leave Service untouched
yq -i 'select(.kind == "Deployment").spec.replicas = 4' /tmp/multi.yaml

echo '--- Deployment replicas ---'
yq 'select(.kind == "Deployment").spec.replicas' /tmp/multi.yaml

echo '--- Service port (unchanged) ---'
yq 'select(.kind == "Service").spec.port' /tmp/multi.yaml

การแพตช์ YAML ของ GitHub Actions CI

ไฟล์การตั้งค่า CI (.github/workflows/*.yml, .gitlab-ci.yml) ก็เป็น YAML เช่นกัน คำสั่ง yq เดิมจึงใช้ได้ แต่เส้นทางอาจซ้อนกันหลายระดับ

งานแพตช์ CI ที่พบบ่อย:

  • กำหนดรุ่นของตัวรัน: อัปเดต runs-on ในงานทั้งหมด
  • อัปเดตรุ่นของแอ็กชัน: ค้นหาขั้นตอนที่ใช้แอ็กชันหนึ่ง ๆ แล้วเพิ่มรุ่นในฟิลด์ uses
  • สลับแฟล็ก: เปิดหรือปิดการตั้งค่าในระดับเวิร์กโฟลว์

ตัวอย่าง: อัปเดตทุกขั้นตอนที่ใช้ actions/checkout เป็น v4:

yq -i '(.jobs[].steps[] | select(.uses == "actions/checkout@v3")).uses = "actions/checkout@v4"' .github/workflows/ci.yml

สำนวนนี้ — วนดูด้วย [] จำกัดผลด้วย select() และกำหนดค่าด้วย = — เป็นรูปแบบหลักสำหรับการแก้ไข YAML ที่มีโครงสร้างทุกชนิด

cat > /tmp/ci.yml << 'EOF'
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
      - run: npm test
  lint:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - run: npm run lint
EOF

# Bump all checkout steps from v3 → v4
yq -i '(.jobs[].steps[] | select(.uses == "actions/checkout@v3")).uses = "actions/checkout@v4"' \
  /tmp/ci.yml

# Verify both jobs were updated
yq '.jobs[].steps[] | select(.uses | test("checkout")).uses' /tmp/ci.yml

การใช้ตัวแปรสภาพแวดล้อมในนิพจน์ yq

การเขียนค่าตายตัวในนิพจน์ yq ทำให้สคริปต์เปราะบาง yq รองรับการแทรกตัวแปรของเชลล์ด้วย ฟังก์ชัน env() หรือ รูปแบบย่อ strenv()

  • env(VAR_NAME) — อ่านตัวแปรสภาพแวดล้อมและแปลงเป็นชนิด YAML ที่เหมาะสม (ตัวเลขยังคงเป็นตัวเลข สตริงยังคงเป็นสตริง)
  • strenv(VAR_NAME) — ส่งคืนสตริงเสมอ เหมาะสำหรับแท็กอิมเมจ

วิธีนี้ช่วยหลีกเลี่ยงปัญหาการใส่เครื่องหมายอัญประกาศเมื่อต้องแทรกตัวแปรภายในสตริงเชลล์ที่ใช้เครื่องหมายอัญประกาศคู่และมีเส้นทาง YAML อยู่ภายใน

รูปแบบ:

export IMAGE_TAG="my-app:3.0.0"
yq -i '.spec.template.spec.containers[0].image = strenv(IMAGE_TAG)' deployment.yaml

ใช้ env() เมื่อตั้งค่าฟิลด์ตัวเลข เช่น replicas เพื่อคงชนิดข้อมูล YAML ไว้ (เป็นจำนวนเต็ม ไม่ใช่สตริงที่มีเครื่องหมายอัญประกาศ)

export APP_IMAGE="my-app:3.0.0"
export REPLICA_COUNT=6

# Set image using strenv() — result is a YAML string
yq -i '.spec.template.spec.containers[0].image = strenv(APP_IMAGE)' \
  /tmp/deployment.yaml

# Set replicas using env() — result is a YAML integer
yq -i '.spec.replicas = env(REPLICA_COUNT)' \
  /tmp/deployment.yaml

# Confirm types are correct in the output
yq '.spec.replicas, .spec.template.spec.containers[0].image' /tmp/deployment.yaml

การผสานไฟล์ YAML สองไฟล์

บางครั้งคุณจำเป็นต้องนำไฟล์แพตช์ (YAML สำหรับเขียนทับค่าขนาดเล็ก) ไปใช้กับการกำหนดค่าพื้นฐาน เช่น การเขียนทับค่าที่แตกต่างกันตามสภาพแวดล้อมในกระบวนการทำงานรูปแบบ Kustomize

yq สามารถผสานไฟล์สองไฟล์เข้าด้วยกันได้โดยใช้ตัวดำเนินการผสาน *:

  • yq '. *= load("patch.yaml")' base.yaml — ผสานแพตช์เข้ากับค่าพื้นฐานแบบลงลึก และเขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน
  • เพิ่ม -i เพื่ออัปเดตค่าพื้นฐานในไฟล์เดิม: yq -i '. *= load("patch.yaml")' base.yaml

ลักษณะการผสาน:

  • ค่าชนิดสเกลาร์ในแพตช์จะเขียนทับค่าพื้นฐาน
  • แมปปิงจะถูกผสานแบบลงลึก (คีย์ที่ไม่มีในแพตช์จะยังคงอยู่)
  • ซีเควนซ์ (อาร์เรย์) จะถูกแทนที่ตามค่าเริ่มต้น ไม่ได้ต่อท้าย ให้ใช้ *+ หากต้องการต่อท้ายแทน

รูปแบบนี้ช่วยแทนที่สคริปต์ sed ที่เปราะบางและทำงานผิดพลาดเมื่อการเว้นวรรคเปลี่ยนแปลง

cat > /tmp/base.yaml << 'EOF'
app:
  name: my-service
  port: 8080
  debug: false
database:
  host: localhost
  port: 5432
EOF

cat > /tmp/patch.yaml << 'EOF'
app:
  port: 9090
  debug: true
database:
  host: db.production.svc
EOF

# Deep-merge patch into base (stdout preview first)
yq '. *= load("/tmp/patch.yaml")' /tmp/base.yaml

# Apply in place
yq -i '. *= load("/tmp/patch.yaml")' /tmp/base.yaml

การตรวจสอบ YAML และการแปลงเป็น JSON

ก่อนนำ YAML ที่ใช้แพตช์ไปใช้กับคลัสเตอร์ แนวทางปฏิบัติที่ดีคือควรตรวจสอบความถูกต้อง และเลือกแปลงเป็น JSON เพื่อใช้กับเครื่องมืออื่นได้

ตรวจสอบไวยากรณ์:

  • yq '.' file.yaml && echo "Valid" — yq จะจบการทำงานด้วยรหัส 1 เมื่อเกิดข้อผิดพลาดในการแยกวิเคราะห์ จึงใช้ในขั้นตอนตรวจสอบของ CI ได้

แปลง YAML เป็น JSON:

  • yq -o=json '.' file.yaml — แสดงผล JSON ที่จัดรูปแบบให้อ่านง่าย
  • ส่งต่อไปยัง jq เพื่อประมวลผล JSON เพิ่มเติม: yq -o=json '.' file.yaml | jq '.metadata.name'

แปลง JSON เป็น YAML:

  • yq -P '.' file.json — แฟล็ก -P บังคับให้เอาต์พุตเป็น YAML (จัดรูปแบบให้อ่านง่าย) เมื่ออินพุตเป็น JSON

การแปลงเหล่านี้ทำให้ yq เป็นสะพานเชื่อมระหว่างเครื่องมือที่ใช้ YAML เป็นหลัก (Helm, kubectl) กับเครื่องมือที่ใช้ JSON เป็นหลัก (Terraform, AWS CLI, jq)

# Validate YAML (exits 0 on success, 1 on parse error)
if yq '.' /tmp/deployment.yaml > /dev/null 2>&1; then
  echo "YAML is valid"
else
  echo "YAML parse error!" >&2
  exit 1
fi

# Convert to JSON and query with jq
yq -o=json '.' /tmp/deployment.yaml \
  | jq '{name: .metadata.name, image: .spec.template.spec.containers[0].image}'

# Round-trip: JSON snippet back to YAML
echo '{"replicas": 7, "strategy": "RollingUpdate"}' \
  | yq -P '.'

สคริปต์แพตช์การนำ CI ไปใช้งานฉบับสมบูรณ์

เมื่อนำเทคนิคทั้งหมดมารวมกัน จะได้สคริปต์ CI ที่ใช้งานได้จริงสำหรับแพตช์ไฟล์กำกับการทำงานของ Deployment ใน Kubernetes ซึ่งเป็นส่วนหนึ่งของไปป์ไลน์ GitOps

สคริปต์นี้จะ:

  1. ตรวจสอบ YAML อินพุตก่อนดำเนินการใด ๆ กับไฟล์
  2. ใช้ env() / strenv() สำหรับการแทนค่าตัวแปรทั้งหมด
  3. อัปเดตแท็กอิมเมจของคอนเทนเนอร์โดยใช้ select() ที่อ้างอิงจากชื่อ
  4. เพิ่มจำนวนเรพลิกา
  5. ประทับคำอธิบายประกอบ deploy-time ด้วยเวลาประทับปัจจุบัน
  6. ตรวจสอบเอาต์พุตอีกครั้งก่อนคอมมิต

รูปแบบนี้ช่วยให้มั่นใจได้ว่า แม้ไปป์ไลน์จะทำงานพร้อมกัน แต่แต่ละขั้นตอนก็เป็นการดำเนินการแบบอะตอมิกและตรวจสอบย้อนหลังได้

#!/usr/bin/env bash
set -euo pipefail

MANIFEST="/tmp/deployment.yaml"
export NEW_IMAGE="my-app:$(date +%Y%m%d)-abc1234"
export NEW_REPLICAS=3
export DEPLOY_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
export CONTAINER="app"

# 1. Validate before patching
yq '.' "$MANIFEST" > /dev/null

# 2. Update image (by container name)
yq -i \
  '(.spec.template.spec.containers[] | select(.name == strenv(CONTAINER))).image = strenv(NEW_IMAGE)' \
  "$MANIFEST"

# 3. Set replicas
yq -i '.spec.replicas = env(NEW_REPLICAS)' "$MANIFEST"

# 4. Stamp annotation
yq -i '.metadata.annotations."deploy-time" = strenv(DEPLOY_TIME)' "$MANIFEST"

# 5. Validate result
yq '.' "$MANIFEST" > /dev/null && echo "Patch applied successfully"

# 6. Show diff summary
yq '{image: .spec.template.spec.containers[0].image, replicas: .spec.replicas}' "$MANIFEST"

ตรวจสอบความรู้: การแก้ไขหลายเอกสารอย่างปลอดภัย

ทดสอบความเข้าใจของคุณเกี่ยวกับการแก้ไขไฟล์ YAML ของ Kubernetes ที่มีหลายเอกสารด้วย yq

ทบทวนบทเรียน: การแก้ไข YAML ด้วย yq

คุณเรียนบทเรียนเรื่องการแก้ไขไฟล์การกำหนดค่า YAML ด้วย yqจบแล้ว ต่อไปนี้คือสรุปเนื้อหาทั้งหมดแบบกระชับ:

  • การติดตั้ง: ใช้ไบนารี Go ของ mikefarah/yq (v4) และตรวจสอบด้วย yq --version
  • การอ่าน: ใช้เส้นทางแบบจุด เช่น .spec.replicas และเข้าถึงอาร์เรย์ด้วย [0] หรือวนซ้ำด้วย []
  • การแก้ไขในไฟล์เดิม: แฟล็ก -i จะเขียนไฟล์ใหม่ทับไฟล์เดิม ควรดูตัวอย่างผลลัพธ์โดยไม่ใช้ -i ก่อนเสมอ
  • การระบุเป้าหมายอย่างทนทาน: ควรใช้ select(.name == "app") แทนดัชนีอาร์เรย์ที่กำหนดตายตัว
  • การเพิ่ม / ลบ: กำหนดค่าให้เส้นทางใหม่เพื่อสร้างเส้นทางนั้น และใช้ del() เพื่อลบฟิลด์
  • ไฟล์หลายเอกสาร: ใช้ select(.kind == "...") เพื่อเลือกทรัพยากรหนึ่งรายการ โดยไม่แก้ไขรายการอื่น
  • ตัวแปร CI: ใช้ strenv(VAR) สำหรับสตริง และ env(VAR) สำหรับค่าที่มีชนิดข้อมูล เพื่อหลีกเลี่ยงข้อผิดพลาดจากการใส่เครื่องหมายคำพูดในเชลล์
  • การผสาน: . *= load("patch.yaml") จะผสานไฟล์เขียนทับแบบลงลึกโดยไม่ทำให้คีย์ที่ไม่ได้แพตช์สูญหาย
  • การตรวจสอบและการแปลง: ใช้ yq '.' เป็นด่านตรวจไวยากรณ์ และใช้ -o=json กับ -P สำหรับแปลงรูปแบบ

รูปแบบหลักสำหรับแพตช์ YAML ใน CI คือ: ตรวจสอบ → เลือก → กำหนดค่า → ตรวจสอบ เมื่อนำไปใช้ร่วมกับ strenv() และ select() คุณก็ไม่จำเป็นต้องหันไปใช้คำสั่ง sed แบบบรรทัดเดียวที่เปราะบางอีก

คำถามที่พบบ่อย

บทเรียน “การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq”

อ่านและแก้ไข YAML ของ Kubernetes และ CI โดยตรงด้วย yq พร้อมคงโครงสร้างและความคิดเห็นไว้ คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกรองและเลือก JSON ด้วยไปป์ไลน์ jq
  2. การแปลงและสร้างออบเจกต์ JSON ด้วย jq
  3. การใช้ REST API ด้วย curl และ jq ร่วมกัน
  4. การแก้ไขไฟล์การกำหนดค่า YAML ด้วย yq
← กลับไปที่ DevOps Bootcamp