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

CI/CD และการกำกับดูแล

รีโพซิทอรีนี้ใช้เวิร์กโฟลว์ GitHub Actions สี่รายการและระบบเทมเพลตแบบรวมศูนย์สำหรับการกำกับดูแล

เวิร์กโฟลว์ไฟล์ทริกเกอร์วัตถุประสงค์
GitHub Pages Deploygithub-pages-deploy.ymlPush ไปยัง main (docs/**), ทริกเกอร์ด้วยตนเองบิลด์และเดพลอยเว็บไซต์เอกสารไปยัง GitHub Pages
Build and Publish Docker Imagebuild-image.ymlPush ไปยัง main (docker/**, package*.json), cron รายวัน, repository_dispatchบิลด์อิมเมจ Docker, push ไปยัง GHCR และส่ง dispatch เพื่อรีบิลด์รีโพซิทอรีปลายทาง
Require Linked Issuerequire-linked-issue.ymlเหตุการณ์ Pull requestบล็อก PR ที่ไม่ได้อ้างอิง GitHub issue
Enforce Repository Settingsenforce-repo-settings.ymlทุก 6 ชั่วโมง, push ไปยังไฟล์กำหนดค่า settings, ทริกเกอร์ด้วยตนเองใช้การตั้งค่ารีโพซิทอรีมาตรฐานจากเทมเพลต
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

มอบหมายไปยังเวิร์กโฟลว์ที่ใช้ซ้ำได้ในรีโพซิทอรีเทมเพลต:

jobs:
docs:
uses: f5-sales-demo/docs-control/.github/workflows/github-pages-deploy.yml@main

สิทธิ์: contents: read, packages: read, pages: write, id-token: write ใช้กลุ่ม concurrency pages พร้อม cancel-in-progress: true เพื่อหลีกเลี่ยงการเดพลอยที่ล้าสมัย

จะทริกเกอร์เมื่อ push เฉพาะเมื่อไฟล์ภายใต้ docs/ มีการเปลี่ยนแปลง สามารถทริกเกอร์ด้วยตนเองผ่าน workflow_dispatch ซึ่งเป็นวิธีที่งาน dispatch ใน build-image.yml ทริกเกอร์การรีบิลด์รีโพซิทอรีปลายทาง

on:
push:
branches: [main]
paths:
- 'docker/**'
- 'package.json'
- 'package-lock.json'
schedule:
- cron: '0 6 * * *'
repository_dispatch:
types: [rebuild-image]

ขั้นตอน:

  1. Checkout โค้ด
  2. เข้าสู่ระบบ ghcr.io โดยใช้ docker/login-action
  3. บิลด์และ push โดยใช้ docker/build-push-action พร้อม context . และไฟล์ docker/Dockerfile
  4. แท็ก: ghcr.io/<owner>/<repo>:latest และ ghcr.io/<owner>/<repo>:<sha>

หลังจากบิลด์สำเร็จ งาน dispatch จะทริกเกอร์ github-pages-deploy.yml ผ่าน workflow_dispatch บนรีโพซิทอรีปลายทางทุกรายการที่ระบุไว้ในไฟล์กำหนดค่า downstream-repos.json ของรีโพซิทอรีเทมเพลต สิ่งนี้ช่วยให้แน่ใจว่ารีโพซิทอรีเนื้อหาทั้งหมดรีบิลด์เอกสารด้วยอิมเมจตัวบิลด์ที่อัปเดตแล้ว

cron รายวันช่วยให้แน่ใจว่าอิมเมจเป็นปัจจุบันแม้ไม่มีการเปลี่ยนแปลงโค้ด (รับการอัปเดต dependency) เหตุการณ์ repository_dispatch อนุญาตให้ระบบภายนอกทริกเกอร์การรีบิลด์

จะทริกเกอร์เมื่อ push เฉพาะเมื่อไฟล์ docker/ หรือ package*.json มีการเปลี่ยนแปลง การเปลี่ยนแปลงเฉพาะเอกสารจะไม่ทริกเกอร์การรีบิลด์อิมเมจ

on:
pull_request_target:
types: [opened, edited, reopened, synchronize]

ใช้ nearform-actions/github-action-check-linked-issues@v1 เพื่อบังคับให้ทุก PR อ้างอิง GitHub issue (เช่น Closes #42 ในคำอธิบาย) PR ของ Dependabot จะถูกยกเว้นผ่าน:

exclude-branches: "dependabot/**"

ข้อความกำหนดเองจะแจ้งผู้มีส่วนร่วมเกี่ยวกับรูปแบบที่คาดหวังหากการตรวจสอบล้มเหลว ดู CONTRIBUTING.md สำหรับขั้นตอนการทำงานของผู้มีส่วนร่วมฉบับสมบูรณ์

on:
schedule:
- cron: '0 */6 * * *'
push:
branches: [main]
paths:
- '.github/config/repo-settings.json'
workflow_dispatch:

มอบหมายไปยังเวิร์กโฟลว์ที่ใช้ซ้ำได้ในรีโพซิทอรีเทมเพลต:

jobs:
enforce:
uses: f5-sales-demo/docs-control/.github/workflows/enforce-repo-settings.yml@main
secrets:
repo-admin-token: ${{ secrets.REPO_ADMIN_TOKEN }}

ทำงานทุก 6 ชั่วโมงและเมื่อมีการเปลี่ยนแปลงไฟล์กำหนดค่า settings ใช้กฎการป้องกันสาขา การตั้งค่าการผสาน และการกำหนดค่ารีโพซิทอรีอื่นๆ จาก .github/config/repo-settings.json

รีโพซิทอรี f5-sales-demo/docs-control เป็นแหล่งข้อมูลความจริงเดียวสำหรับ:

  • คำจำกัดความเวิร์กโฟลว์ที่ใช้ซ้ำได้ (เดพลอยเอกสาร, บังคับใช้การตั้งค่ารีโพซิทอรี)
  • ไฟล์ที่จัดการซึ่งซิงค์ข้ามรีโพซิทอรีทั้งหมดในองค์กร
  • การกำหนดค่ามาตรฐานและกฎการป้องกันสาขา

ตัวบิลด์นี้และรีโพซิทอรีเนื้อหาทั้งหมดสืบทอดพฤติกรรม CI/CD จากเทมเพลต

รีโพซิทอรีเทมเพลตสามารถ push ไฟล์ที่จัดการ (เช่น คำจำกัดความเวิร์กโฟลว์และไฟล์กำหนดค่า) ไปยังรีโพซิทอรีปลายทาง สิ่งนี้ช่วยให้รีโพซิทอรีทั้งหมดสอดคล้องกันโดยไม่ต้องอัปเดตด้วยตนเอง การซิงค์ทำงานผ่านเวิร์กโฟลว์แยกต่างหากในรีโพซิทอรีเทมเพลต

เวิร์กโฟลว์ enforce-repo-settings ใช้กฎการป้องกันสาขาจากเทมเพลต ซึ่งรวมถึง:

  • การตรวจสอบสถานะที่จำเป็นก่อนการผสาน
  • การตรวจสอบ linked issue ที่จำเป็น
  • แนะนำให้ใช้ squash merge
  • ลบสาขา head อัตโนมัติหลังการผสาน
ซีเคร็ตแหล่งที่มาวัตถุประสงค์
GITHUB_TOKENอัตโนมัติ (GitHub)ใช้โดยเวิร์กโฟลว์ส่วนใหญ่สำหรับ checkout, การเผยแพร่แพ็กเกจ และการเรียก API
REPO_ADMIN_TOKENด้วยตนเอง (ซีเคร็ตรีโพซิทอรี)จำเป็นสำหรับ enforce-repo-settings และงาน dispatch เพื่อแก้ไขการป้องกันสาขา การตั้งค่ารีโพซิทอรี และทริกเกอร์เวิร์กโฟลว์ปลายทาง (ต้องการสิทธิ์ admin)