Skip to content
← 返回CI/CD列表
CI/CD完整实践与解答

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 examples

check.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 * 2

requirements.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资料核对;不是运行证明)

依据与适用范围 ​

本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。