Skip to main content
Glama
README.md3.06 kB
# 工作流架构与维护指南 ## 总览 - `publish-container.yml`:生产发布,触发 `push tags v*.*.*`、手动、定时。执行多架构构建、GHCR 推送、冒烟测试与报告。 - `test-publish.yml`:PR/定时验证,dry-run 多架构构建,不推送产物,校验标签生成与权限。 - `pipeline.yml`:仓库原有基础 CI(未改动)。 ## 关键设计决策(ADR) 1. **多架构构建方式**:采用 `docker/setup-buildx-action` + QEMU。理由:GitHub 托管 runner 默认支持,便于 registry 缓存复用。 2. **缓存策略**:三层缓存(registry、GHA、local)。理由:兼顾云端复用与单次 Job 提速,避免缓存失效导致全量重编译。 3. **标签策略**:`latest` + `vX.Y.Z` + `vX.Y` + `vX` + `SHA`。理由:同时满足生产稳定标签与可追溯性。 4. **权限最小化**:`contents:read`、`packages:write/read`、`id-token:write`。理由:仅在需要推送或签名时提升权限,减少泄露面。 5. **失败处理**:集中 `if: failure()` 通知 Slack/Email。理由:统一出口,避免遗漏告警。 6. **可选签名**:预置 Cosign 步骤,通过输入开关控制。理由:在需要合规时快速启用。 ## 运行流程概述 1. 检出代码,确保完整历史供 metadata 解析。 2. 初始化 QEMU 与 buildx,恢复 GHA/Registry 缓存。 3. metadata-action 生成标签与 OCI labels。 4. build-push-action 构建推送(生产)或 dry-run(测试)。 5. 生产发布后执行 manifest 检查与跨架构冒烟测试。 6. 上传报告并在失败时发送通知。 ## 维护要点 - **版本锁定**:所有外部 Action 已锁定具体版本(4.1.7/3.7.1 等)。升级前请在测试工作流验证。 - **缓存命中**:若频繁 cache miss,检查 key 计算中包含的文件是否经常变化,必要时拆分 key。 - **凭证管理**:默认使用 `GITHUB_TOKEN`。若需跨组织推送请改用具备 `write:packages` 的 PAT,设置为 `secrets.GHCR_TOKEN` 并替换登录步骤。 - **安全强化**:可将 `ENABLE_COSIGN_SIGNING` 默认置为 `true` 并配置 OIDC;可插入 Trivy 扫描步骤(放在 build 后、推送前)。 - **调试技巧**:在 `build-push-action` 中加入 `--progress=plain` 便于追踪;失败时查看上传的 `manifest.txt` 与 `smoke-tests.txt`。 ## 本地复现 ```bash # dry-run 与 CI 配置对齐 docker buildx build \ --file Dockerfile.example \ --platform linux/amd64,linux/arm64 \ --cache-from type=registry,ref=ghcr.io/<owner>/<repo>:buildcache \ --cache-to type=registry,ref=ghcr.io/<owner>/<repo>:buildcache,mode=max \ --tag ghcr.io/<owner>/<repo>:local \ --load . ``` ## 常见问题 - **QEMU 下载缓慢**:切换镜像源或预热缓存;必要时减少平台数量。 - **权限不足**:确认 workflow permissions 未被组织策略覆盖;在仓库设置中允许 GITHUB_TOKEN 写包。 - **artifact 丢失**:检查 `actions/upload-artifact` 是否因路径错误为空;本配置使用 `artifacts/` 目录集中产物。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Fu-Jie/MCP-OPENAPI-Pandoc'

If you have feedback or need assistance with the MCP directory API, please join our Discord server