CI/CD:完整实践与解答
需能阅读 YAML 与 Python 文件路径。以语法门禁示例区分事件、检出和检查:check.py 只对 examples/ 做 AST 解析,不执行例子。本地阅读以 Python 3.11+ 为基准;远端 YAML 面向公开 GitHub 仓库与 Ubuntu runner,未启用。 示例未在本轮执行;本页完整源码与README列出输入、阅读顺序和预期。
CI/CD 完整工作流
CI/CD完整工作流由GitHub Actions YAML和纯Python AST检查器组成。示例未执行;程序只解析examples目录中的Python文本,不导入或执行例子,不安装依赖,工作流不含部署步骤。
CI/CD 语法门禁练习
题目:工作流只做ast.parse后能声明所有例子通过吗?
参考答案
只能声明Python语法有效;未检查第三方依赖、输入输出和真实运行。把结论写在门禁说明中能避免将绿色状态误解成全覆盖。
CI/CD 工作流恢复
CI/CD工作流恢复应回退出错的配置并保留失败日志。重跑相同提交适用于暂时基础设施故障,不应掩盖确定性错误;本例没有触发任务,清理只移除复制目录。
完整源码、配置与输入
下列文件与仓库同源,包含完整实现和输入;不是运行证明。部分练习只需人工阅读配置,不强制构造模拟器。
.github/workflows/syntax.yml
yaml
name: course-python-syntax
on:
push:
pull_request:
permissions:
contents: read
jobs:
syntax:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Read current public repository revision
env:
REPOSITORY: ${{ github.repository }}
TARGET_SHA: ${{ github.sha }}
run: |
git init .
git remote add origin "https://github.com/${REPOSITORY}.git"
git fetch --depth=1 origin "$TARGET_SHA"
git checkout --detach FETCH_HEAD
- name: Parse examples without executing them
run: python3 check.py examplescheck.py
python
import ast
import sys
from pathlib import Path
def check(root):
files = sorted(root.rglob("*.py"))
if not files:
raise ValueError("no Python input files")
for path in files:
ast.parse(path.read_text(encoding="utf-8"), filename=str(path))
return len(files)
if __name__ == "__main__":
try:
if len(sys.argv) != 2:
raise ValueError("usage: python check.py DIRECTORY")
print(f"syntax files={check(Path(sys.argv[1]))}")
except (ValueError, OSError, SyntaxError) as exc:
print(str(exc), file=sys.stderr)
sys.exit(2)examples/sample.py
python
def double(value: int) -> int:
return value * 2requirements.txt
text
# Public GitHub repository for this checkout approach. Private repositories
# need separately reviewed authentication; this lesson does not provide it.
# GitHub-hosted Ubuntu runner with Git and Python 3; no package install.项目README与完整依赖
README提供前置、完整自跑或阅读方式、预期、失败案例与恢复清理。本轮没有执行任何示例、产品CLI、模型或外部API。
markdown
# CI/CD:完整教学包
示例未执行。全部输入为教学虚构资料,不能用于真实账号、生产数据或外部系统。
## 前置与依赖
本地Python3.11以上;GitHub托管Ubuntu与Git仅用于未来公开仓库工作流。无安装步骤或秘密。
## 文件与输入
- `.github/workflows/syntax.yml`:本包完整文件。
- `check.py`:本包完整文件。
- `examples/sample.py`:本包完整文件。
- `requirements.txt`:本包完整文件。
## 读者将来自跑或阅读
复制本包所有文件到独立目录,在该目录作为当前工作目录。以下是读者自用资料,本轮禁止执行。
```text
python check.py examples
```
## 正常预期
若将来独立授权运行,标准输出syntax files=1;GitHub工作流只解析源码,不执行sample.py。
## 失败案例与恢复
把sample.py的函数头冒号去掉,预期退出2并含SyntaxError信息;空目录也退出2。
## 清理及能力边界
YAML示例放入真实仓库会在push/PR触发任务,因此本课只保存在examples内,不启用。工作流使用网络检出代码仅是未来读者流程,本轮没有运行。
## 来源
- [官方依据](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax)(2026-10-17资料核对;不是运行证明)依据与适用范围
- 本课官方依据,资料核对日2026-10-17。
本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。