Mudassar-Malek/github-actions-platform

GitHub: Mudassar-Malek/github-actions-platform

集中化 GitHub Actions 共享库,解决多团队 CI 碎片化与安全扫描缺失问题。

Stars: 0 | Forks: 0

# github-actions 平台 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 功能 当你拥有 20 个以上的微服务仓库时,每个团队都会编写自己的 CI 工作流。他们互相复制粘贴,很快就会产生分歧,最终导致你有 20 种不同的方式来运行 pytest、20 种不同的 Docker 构建配置,并且没有人运行安全扫描,因为“太复杂了”。 这个仓库是平台团队的答案:一个集中存放 CI 模式的地方,版本化、可测试,所有团队都可以通过 `workflow_call` 使用。一次工作流中的修复会在下一次推送时传播到所有仓库。 ## 架构 ``` graph LR SR1[Service Repo A] -->|workflow_call| PL[github-actions-platform] SR2[Service Repo B] -->|workflow_call| PL SR3[Infra Repo] -->|workflow_call| PL PL --> PY[python-ci.yml\nlint → test → coverage → docker] PL --> TF[terraform-reusable.yml\nfmt → init → plan → apply] PL --> DS[docker-scan.yml\nTrivy + Grype → SARIF] ``` ## 可用工作流 | 工作流 | 文件 | 功能 | |--------|------|------| | Python CI | `python-ci.yml` | Ruff lint → mypy → pytest + 覆盖率 → Docker 构建/推送 | | Terraform | `terraform-reusable.yml` | fmt 检查 → init → 验证 → 计划 → 应用(需审批) | | Docker 扫描 | `docker-scan.yml` | Trivy + Grype 扫描 → SARIF 上传到 GitHub 安全页面 | ## 快速开始 ### 为任意服务仓库添加 Python CI ``` # .github/workflows/ci.yml 在您的服务仓库中 name: CI on: push: branches: [main] pull_request: branches: [main] jobs: ci: uses: YOUR_ORG/github-actions-platform/.github/workflows/python-ci.yml@main with: python-version: "3.11" docker-image-name: "your-org/your-service" secrets: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} ``` ### 为任意基础设施仓库添加 Terraform 计划/应用 ``` jobs: deploy: uses: YOUR_ORG/github-actions-platform/.github/workflows/terraform-reusable.yml@main with: environment: prod working-directory: environments/prod apply: true secrets: AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN_PROD }} ``` 请查看 `examples/` 目录获取完整、可直接复制的工作流文件。 ## 配置 所有输入均通过 `workflow_call` 参数暴露 —— 无硬编码值: | 输入参数 | 默认值 | 说明 | |----------|--------|------| | `python-version` | `"3.11"` | 用于测试的 Python 版本 | | `working-directory` | `"."` | 包含代码的目录 | | `run-integration-tests` | `false` | 是否启用集成测试任务 | | `docker-image-name` | `""` | 设置为启用 Docker 构建/推送 | | `terraform-version` | `"1.7.0"` | Terraform CLI 版本 | | `apply` | `false` | 设为 `true` 以运行 `terraform apply` | | `severity-threshold` | `"HIGH,CRITICAL"` | Trivy/Grype 扫描的严重性阈值 | ## 使用场景 请参考 [`docs/use-cases.md`](docs/use-cases.md) 获取分步示例: - 在 5 行内为新的 Python 微服务添加 CI - 在 PR 上触发 Terraform 计划,在合并时自动应用 - 对 Docker 镜像进行 CVE 扫描并上传 SARIF - 仅在主分支运行集成测试 - 将团队锁定到稳定版本的工作流 - 扩展共享工作流以支持自定义技术栈 ## 设计决策与权衡 **使用 `workflow_call` 而非组合动作** —— 组合动作在调用者的作业上下文中运行,无法拥有自己的作业矩阵或环境门控。`workflow_call` 会创建具有独立权限的隔离作业,这对 Terraform 应用审批门控至关重要。 **显式密钥传递** —— 可重用工作流不会自动继承调用方的密钥。显式的 `secrets:` 块使安全边界可见 —— 你能确切知道每个工作流可以访问哪些内容。 **按分支或标签版本化** —— 团队可以锁定到 `@main` 获取最新版本,或锁定到 `@v1.2.0` 获取稳定版本。破坏性变更会触发主版本号升级。团队可按自己的节奏升级。 ## 规模化下的改进计划 - 在本仓库中添加 **Dependabot 配置**,自动更新动作版本(如 `actions/checkout`、`hashicorp/setup-terraform`) - 通过 CI 中的 **`act`** 进行 **工作流测试** —— 测试可重用工作流本身,而不仅仅是使用它们的服务 - 添加 **变更日志**,让团队在升级前了解版本间的变更内容 ## 作者 **Mudassar Malek** — 高级 DevOps / SRE 工程师 | GitHub Actions | 平台工程 | CI/CD
标签:Angular, Docker, Docker 安全扫描, Docker 构建, EC2, ECS, FinTech, GitHub Actions, Grype, IaC, mypy, pytest, Python CI, Ruff, SARIF, Terraform, Terraform Apply, Terraform Plan, workflow_call, 代码复用, 共享库, 安全扫描, 安全防御评估, 工作流复用, 平台工程, 开源框架, 持续交付, 持续集成, 时序注入, 结构化查询, 自动化安全, 自动笔记, 覆盖率, 请求拦截, 逆向工具