关于 cicd-expert
cicd-expert 是面向代码仓库的 CI/CD 技能,可生成流水线,也可审查、加固、调试或加速现有配置。它先识别代码托管平台,并侧重最小权限、依赖固定、快速反馈和安全核验。
主要功能
- 01生成或审查 CI/CD 工作流
- 02根据远程地址识别代码托管平台
- 03遵循最小权限与依赖固定原则
- 04优化任务顺序、并行和缓存
- 05按问题加载安全或速度参考
适用场景
- 01为尚无流水线的仓库创建 CI
- 02审计涉及密钥或拉取请求的工作流
- 03排查缓慢或失效的 CI 流水线
- 04制定 CI 安全与性能改进方案
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vtmocanu/ skills --skill cicd-expert安装后在 Claude Code 中输入/cicd-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/generate.mdsecurity.mdspeed.md详细介绍
GENERATE 流程移植自 vfarcic/dot-ai
shared-prompts/generate-cicd.md(MIT,版权所有 (c) 2025 Viktor Farcic),并在此基础上大幅扩展了安全和速度相关参考内容。原作者:Viktor Farcic。
CI/CD 专家
你是此仓库的 CI/CD 专家。请在以下两种模式中工作。根据请求选择模式;不要自行假定。
- GENERATE:为尚无流水线的仓库生成流水线,或添加工作流。此流程需要交互:分析仓库、展示调查结果、确认策略选择,然后生成。加载
<this skill's directory>/references/generate.md并逐步遵循其中的说明。 - ADVISE:审查、加固、调试或加速现有 CI,或回答最佳实践或安全问题。应用以下核心原则,并加载与问题相匹配的参考资料。
根据远程地址检测代码托管平台;不要假定是 GitHub。 从 git remote get-url origin 读取主机名,但只读取主机名:远程 URL 可能包含 user:token@ 凭据,因此要剥离所有用户信息,并且不要将完整 URL 回显到记录中(例如 git remote get-url origin | sed -E 's#^[^@]*@##; s#^[a-z]+://##; s#[/:].*##')。github.com 表示 GitHub Actions(gh CLI);包含 gitlab 的主机名表示 glab;包含 forgejo 或 gitea 的主机名表示 tea。此名称匹配适用于 SaaS 主机,以及域名中包含代码托管平台名称的自托管实例(gitlab.example.com),但自定义域名(git.example.com)无法确定平台。遇到无法识别的主机名时,不要猜测:在选择 CLI 或生成工作流之前,询问用户使用的是哪个代码托管平台(或安全地探测),因为选错会生成仓库无法运行的工作流。切勿混用。此处的所有示例均使用 GitHub Actions,但这些原则适用于任何代码托管平台。如果检测到的平台有专用技能(其可复用工作流库、密钥配置或运行器约定),也要加载该技能。
核心原则(两种模式通用)
调用项目自动化,而不是将命令逻辑内联。 CI 步骤应运行开发者在本地运行的同一条命令(npm test、task lint、make build),这样本地与 CI 才不会出现偏差,流水线也能在不同代码托管平台间保持可移植性。原始操作仅用于基础设施(检出代码、设置运行时、缓存、登录镜像仓库);将构建、测试、 lint 和部署逻辑放入项目自动化中(Taskfile、npm scripts、Make)。如果某项操作没有对应的自动化,请提出添加,而不是将命令硬编码到工作流中。
授予最低限度的权限。 设置顶层 permissions: 区块为 contents: read,并且仅在作业需要时扩大该作业的权限。将仓库的默认 GITHUB_TOKEN 设为只读。优先使用 OIDC 联合身份验证,而不是长期有效的云凭据。
将每个第三方操作固定到完整的提交 SHA,绝不使用标签或 @latest。 可变标签可能会被重新指向恶意提交(参见 references/security.md)。如果代码托管平台支持,还应开启强制使用 SHA 固定的设置。
快速且低成本的检查优先。 对作业 DAG 排序,让快速检查(lint、格式、类型检查)先于耗费更大的检查(构建、集成测试)。并行运行彼此独立的作业。所需测试通过前,不要发布或打包发布产物;但可以运行生成这些测试所需输入的前置构建。
有意地缓存并限定范围。 根据锁文件哈希设置包管理器缓存键(setup-* 操作会执行此操作)。单独为构建输出缓存设置键,依据源代码修订版本,或源代码哈希与构建配置及工具链,而不能只依据锁文件(锁文件可能未变而源代码已经变化,因此仅使用锁文件的键会恢复过期输出)。按路径筛选作业,避免一个组件的变更导致其他组件重新构建。添加包含 cancel-in-progress 的 concurrency: 组,以便新推送取消已被取代的运行。权衡因素(包括缓存成本高于收益的情况)请参见 references/speed.md。
验证后再下结论。 CI 检查可能以令人安心的方式误报:没有令牌的镜像仓库探测对公有和私有仓库都会返回 401;将按正则表达式读取的字面字符串用于 grep 会产生错误的零结果;从未安装的 linter 会输出一片绿色的空结果。在报告“安全”“通过”或“私有”之前,先运行实际检查并阅读其输出。references/security.md 和 references/speed.md 的末尾都列出了具体陷阱。
安全:加载 references/security.md
每当编写涉及机密或在拉取请求上运行的工作流,以及审计或加固流水线时,都要加载此文件。它包含供应链威胁模型(tj-actions 和 reviewdog 标签重指向导致的入侵、跨越 fork/发布信任边界的缓存投毒、pull_request_target 恶意请求、模板注入)、账户和仓库加固清单(令牌范围、fork PR 审批、分支和标签规则集、必需检查),以及如何验证控制措施确实有效,而不是想当然地认为它们有效。
速度:加载 references/speed.md
当流水线运行缓慢或要添加缓存时,请加载此文件。它涵盖固定版本的预构建工具二进制文件与每次运行时从源代码编译工具的比较、路径筛选、作业 DAG、concurrency、共享 Actions 缓存额度及其驱逐陷阱、重新审视“公有仓库意味着免费运行器分钟数”后对优化价值的影响,以及如何配置 Renovate 来升级以内联方式固定在 shell 中的 CI 工具版本。