流水线阶段、门禁与故障定位
确定流水线阶段、事件与权限
需能阅读 YAML 与 Python 文件路径。以语法门禁示例区分事件、检出和检查:check.py 只对 examples/ 做 AST 解析,不执行例子。本地阅读以 Python 3.11+ 为基准;远端 YAML 面向公开 GitHub 仓库与 Ubuntu runner,未启用。 示例未在本轮执行。
CI/CD 阶段
CI/CD阶段区分检查、构建、制品和部署。持续集成首先让同一提交接受可重复检查,部署涉及环境与授权;本课程只交付静态工作流,不触发远端任务或发布。
CI/CD 触发条件
CI/CD触发条件决定哪些提交进入检查。pull_request适合验证候选补丁,push保护主分支;路径过滤可能导致必须检查永远等待,需与分支保护要求一起设计。
CI/CD 最小权限
CI/CD最小权限从只读contents开始。检查源码不需要写仓库或部署权限;不可信贡献代码与秘密凭据隔离,不能为了获得秘密而把任意PR代码放进高权限事件。
依据与适用范围
- 本课官方依据,资料核对日2026-10-17。
以上依据用于解释本文列明的规则;示例未执行,不代表产品全部能力或跨平台验证。历史资料的版本、账号与界面位置需按目标环境确认。
区分依赖、缓存、制品与门禁
CI/CD 依赖固定
CI/CD依赖固定包括运行时和第三方Action。教材工作流不引用第三方Action,仅用runner内置Python作AST检查;runner镜像仍会变化,不能把静态YAML当作可复现执行环境的证明。
CI/CD 缓存与制品
CI/CD缓存是加速依赖恢复,制品是本次构建的可审阅输出。缓存命中不证明测试通过,制品应关联提交;不要把包含秘密的工作目录整体缓存或上传。
CI/CD 门禁状态
CI/CD门禁状态要区分失败、跳过和未运行。允许失败的任务不能作为关键质量门禁;矩阵展开与条件判断应确保至少一条实际检查路径,状态名称变化还会影响保护规则。
定位工作目录、泄露与平台差异
CI/CD 工作目录
CI/CD工作目录以仓库检出位置为基准,脚本相对路径依赖defaults.run.working-directory或具体步骤cwd。runner已有环境不能替代检出源码;本例明确先用原生git获取当前提交,读者自行授权后才可使用。
CI/CD 日志泄露
CI/CD日志泄露可能来自回显环境、调试命令或制品打包。平台遮罩不是完整防护,编码或拆分后的秘密仍可能出现;避免将令牌放入命令行和上传目录,若泄露需轮换而非只删日志。
CI/CD 平台差异
CI/CD平台差异包括Shell、路径分隔符和工具预装版本。Linux工作流不证明Windows或macOS通过;旧GitLab/Drone草稿的容器、注册表和部署命令只保留历史入口,不作为当前模板。
从 Gogs/Drone 草稿区分事件、调度和构建故障
Gogs Drone 同步激活后 CI 卡住怎样分层查?旧草稿记录“Gogs 建仓→Drone 同步仓库→激活仓库→配置推送 Webhook→测试投递→观察 CI”的链路,但明确写着流水线卡住、需要继续测试。仓库可见不等于激活成功,投递成功不等于 runner 已取到任务,任务启动也不等于构建及部署通过。排错按这几层保留对应事件、提交标识、调度状态与步骤日志,避免反复修改业务代码解决未触发事件。
旧 Drone YAML 能直接部署吗?原 Go 1.11.4 镜像、私有镜像名、明文主机和密钥字段均属于历史环境;Webhook 密钥没有配置依据,不能复制“不需要改密钥”的建议。构建步骤与部署步骤应分开,秘密从受控配置注入并限制使用范围。旧示例把删除镜像、构建及交互式容器启动放在一段脚本,不能证明非交互 runner、构建上下文、端口和目标环境可用。
撤回旧 .drone.yml 作为可运行部署模板的地位;保留的是注册、触发、调度、执行逐层定位的方法。本节未连接 Gogs/Drone、未投递 Webhook、未构建镜像,也不声明与当前平台配置兼容。
GitLab CI 与公司容器仓库草稿
以下保留原资料的历史版本范围。
公司历史草稿:仅包含局部流水线和原仓库登录命令,缺少完整任务与变量设置,不能直接作为可运行的 CI 模板。
docker 自动build
image: docker:latest
variables:
DOCKER_TLS_CERTDIR: "/certs"
service:https://www.jianshu.com/p/3c0cbb6c2936
https://blog.csdn.net/qq_24046745/article/details/94405188
kubectl create secret docker-registry regcred
--docker-server=registry.example.invalid
--docker-username=REGISTRY_USER_PLACEHOLDER
--docker-password=REGISTRY_PASSWORD_PLACEHOLDER
继续阅读
- CI/CD完整实践与解答
- 编辑器与IDE完整实践与解答
- 命令