Mudassar-Malek/github-actions-platform
GitHub: Mudassar-Malek/github-actions-platform
集中化 GitHub Actions 共享库,解决多团队 CI 碎片化与安全扫描缺失问题。
Stars: 0 | Forks: 0
# github-actions 平台
[](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, 代码复用, 共享库, 安全扫描, 安全防御评估, 工作流复用, 平台工程, 开源框架, 持续交付, 持续集成, 时序注入, 结构化查询, 自动化安全, 自动笔记, 覆盖率, 请求拦截, 逆向工具