- หน้าแรก
- ตัวสร้างเอกสาร
- CI/CD และการกำกับดูแล
CI/CD และการกำกับดูแล
รีโพซิทอรีนี้ใช้เวิร์กโฟลว์ GitHub Actions สี่รายการและระบบเทมเพลตแบบรวมศูนย์สำหรับการกำกับดูแล
เวิร์กโฟลว์
หัวข้อที่มีชื่อว่า “เวิร์กโฟลว์”| เวิร์กโฟลว์ | ไฟล์ | ทริกเกอร์ | วัตถุประสงค์ |
|---|---|---|---|
| GitHub Pages Deploy | github-pages-deploy.yml | Push ไปยัง main (docs/**), ทริกเกอร์ด้วยตนเอง | บิลด์และเดพลอยเว็บไซต์เอกสารไปยัง GitHub Pages |
| Build and Publish Docker Image | build-image.yml | Push ไปยัง main (docker/**, package*.json), cron รายวัน, repository_dispatch | บิลด์อิมเมจ Docker, push ไปยัง GHCR และส่ง dispatch เพื่อรีบิลด์รีโพซิทอรีปลายทาง |
| Require Linked Issue | require-linked-issue.yml | เหตุการณ์ Pull request | บล็อก PR ที่ไม่ได้อ้างอิง GitHub issue |
| Enforce Repository Settings | enforce-repo-settings.yml | ทุก 6 ชั่วโมง, push ไปยังไฟล์กำหนดค่า settings, ทริกเกอร์ด้วยตนเอง | ใช้การตั้งค่ารีโพซิทอรีมาตรฐานจากเทมเพลต |
GitHub Pages Deploy
หัวข้อที่มีชื่อว่า “GitHub Pages Deploy”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 ทริกเกอร์การรีบิลด์รีโพซิทอรีปลายทาง
Build and Publish Docker Image
หัวข้อที่มีชื่อว่า “Build and Publish Docker Image”on: push: branches: [main] paths: - 'docker/**' - 'package.json' - 'package-lock.json' schedule: - cron: '0 6 * * *' repository_dispatch: types: [rebuild-image]ขั้นตอน:
- Checkout โค้ด
- เข้าสู่ระบบ
ghcr.ioโดยใช้docker/login-action - บิลด์และ push โดยใช้
docker/build-push-actionพร้อม context.และไฟล์docker/Dockerfile - แท็ก:
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 มีการเปลี่ยนแปลง การเปลี่ยนแปลงเฉพาะเอกสารจะไม่ทริกเกอร์การรีบิลด์อิมเมจ
Require Linked Issue
หัวข้อที่มีชื่อว่า “Require Linked Issue”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 สำหรับขั้นตอนการทำงานของผู้มีส่วนร่วมฉบับสมบูรณ์
Enforce Repository Settings
หัวข้อที่มีชื่อว่า “Enforce Repository Settings”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) |