发布时间:2026/8/23 16:38:12
pypyr流水线YAML语法完全解析:步骤、步骤组与成功/失败回调一次看懂 pypyr流水线YAML语法完全解析步骤、步骤组与成功/失败回调一次看懂【免费下载链接】pypyrpypyr task-runner cli api for automation pipelines. Automate anything by combining commands, different scripts in different languages applications into one pipeline process.项目地址: https://gitcode.com/gh_mirrors/py/pypyrpypyr 是一款用 YAML 定义自动化任务运行器task-runner的开源工具它把命令、脚本和应用编排成一条 pypyr 流水线pipeline顺序执行。本文完整解析 pypyr 流水线的 YAML 语法每个步骤step支持哪些字段、如何用步骤组step group拆分可复用流程以及on_success/on_failure两大回调如何兜底——一篇看懂直接上手。为什么用 YAML 写自动化pypyr 的定位传统 shell 脚本或 Makefile 写多了都知道头疼换平台就崩、变量传递混乱、错误处理靠硬扛。pypyr 的思路很直接——用一个 YAML 文件描述整条自动化流程然后一条命令跑完$ pip install --upgrade pypyr $ pypyr my-pipeline # 文件名不带 .yaml✅ 跨平台Linux / macOS / Windows 通吃CI 服务器和容器里同样能跑✅ 多语言混编同一条流水线里可以跑 shell 命令、Python 代码、调外部程序✅ 流程可控循环、条件、重试、失败兜底全部在 YAML 里声明想深入了解项目结构可从 pypyr/pipeline.py 开始它定义了一次流水线运行的运行时对象。流水线文件的最小骨架一个 pypyr 流水线 YAML 的最小形态只需要一个steps键# my-pipeline.yaml steps: - name: pypyr.steps.echo in: echoMe: 你好pypyr 流水线执行pypyr my-pipeline即可看到输出。如果想让流水线接收命令行参数加上可选的context_parsercontext_parser: pypyr.parser.keyvaluepairs steps: - name: pypyr.steps.echo in: echoMe: hello {who}随后pypyr my-pipeline whoworldYAML 里的{who}就会被自动替换成world——这就是 pypyr 的变量替换变量来自 context 上下文。步骤的两种写法简单与复杂简单步骤一行搞定步骤名就是步骤模块的完整名称没有参数时直接写一行steps: - pypyr.steps.echo - pypyr.steps.now复杂步骤name in 参数需要传参时用字典形式核心就两个字段steps: - name: pypyr.steps.cmd # 要执行的步骤模块 in: # 注入步骤的输入参数 cmd: echo 任意命令in参数的生命周期在源码里写得很清楚执行前注入 context执行完自动移除不会污染后续步骤见 pypyr/dsl.py。内置步骤如pypyr.steps.echo、pypyr.steps.cmd、pypyr.steps.py都位于 pypyr/steps/ 目录每个文件名就是一个步骤。步骤装饰器速查表一次看懂 7 个字段复杂步骤除了name和in还支持这些装饰器字段解析逻辑见 pypyr/dsl.py 的_init_from_dict字段默认值作用runTrue表达式为真才执行支持变量替换skipFalse表达式为真则跳过本步骤swallowFalse出错时吞掉异常流水线继续走onError无出错时附加的自定义错误信息description无运行时在控制台打印的步骤说明foreach无对列表逐项循环执行retry无失败自动重试可配退避策略while无条件成立则反复循环执行条件执行是最常用的场景例如steps: - name: pypyr.steps.cmd run: {deployEnabled} # 只有 deployEnabled 为 True 才执行 in: cmd: echo 执行部署容错场景用swallow某步骤失败不想中断整条流水线时- name: pypyr.steps.cmd swallow: True in: cmd: 可能失败的命令循环与重试让流水线自己跑foreach 循环列表里每项执行一遍当前项通过{i}引用steps: - name: pypyr.steps.cmd foreach: [once, twice, thrice] in: cmd: echo say {i}while 循环条件满足就重复跑内置{whileCounter}记录轮次max限制最多轮数steps: - name: pypyr.steps.cmd while: max: 3 in: cmd: echo 第 {whileCounter} 轮retry 重试失败后按退避策略fixed / linear / jitter重试pypyr/retries.py提供退避算法配置支持max、sleep、retryOn、stopOn等字段解析逻辑见 pypyr/dsl.py。步骤组把流水线切成可复用的块这是 pypyr YAML 语法里最容易被忽略、也最有价值的设计流水线 YAML 的每个顶层键都是一个步骤组steps只是默认名。steps: - name: pypyr.steps.echo in: echoMe: 主流程 - name: pypyr.steps.call in: call: groups: [sg1] # 调用同文件里的步骤组 sg1 sg1: # 自定义步骤组 - name: pypyr.steps.echo in: echoMe: 我是被调用的 sg1steps组默认最先执行pypyr.steps.call可跳转调用其他命名步骤组嵌套循环调用组里套组、组里再套循环的完整示例见 tests/pipelines/call/nestedfor.yaml步骤组的调度核心在 pypyr/stepsrunner.pyrun_step_group负责取出组内步骤逐个执行成功/失败回调on_success 与 on_failure流水线的收尾处理交给两个内置回调步骤组on_success所有步骤全部成功后执行on_failure任意步骤抛错时执行然后原始错误继续向上传播steps: - name: pypyr.steps.echo in: echoMe: A - name: pypyr.steps.py in: py: raise ValueError(arb) # 这里故意失败 - name: pypyr.steps.echo in: echoMe: 永远不会执行到 on_failure: - name: pypyr.steps.echo in: echoMe: 失败回调记录日志/发通知真实示例见 tests/pipelines/errors/fail-handler.yaml。回调机制的完整执行逻辑在 pypyr/stepsrunner.py顺序执行所有指定步骤组全部成功 → 跑on_success中途出错 → 跑on_failure失败处理器自己出错会被吞掉并记日志避免掩盖真正的错误原因见 pypyr/stepsrunner.py失败处理完毕原始异常继续抛出——所以失败回调适合记录、通知、清理而不要指望它修复流水线进阶技巧在on_failure里放一个pypyr.steps.stop步骤可以安静终止流水线而不抛出红色报错常用于预期内的失败场景相关测试覆盖在 tests/pipelines/errors/ 目录下。命令行指定步骤组与回调一条命令跑法以上steps/on_success/on_failure都是默认值见 pypyr/pipeline.py命令行可以全部覆盖参数定义见 pypyr/cli.py$ pypyr my-pipeline whoworld --groups steps sg1 --success done --failure cleanup参数默认含义--groupssteps要执行的步骤组可指定多个--successon_success成功回调步骤组名--failureon_failure失败回调步骤组名--log25日志级别10 打印完整堆栈这意味着你甚至可以在同一个流水线文件里定义多套流程用不同--groups组合调用而不必拆成多个文件。核心源码文件导读文件作用pypyr/dsl.py流水线 YAML 的领域模型步骤、循环、重试装饰器的解析与执行pypyr/stepsrunner.py步骤组调度器顺序执行 成功/失败回调pypyr/pipeline.py单次流水线运行实例与默认组名配置pypyr/pipedef.py流水线定义体与加载器元数据pypyr/cli.py命令行入口与参数解析pypyr/steps/全部内置步骤实现小结一张图记住 pypyr 流水线 YAMLpipeline.yaml ├── context_parser 可选命令行参数 → context 变量 ├── steps 默认步骤组 │ ├── name 步骤模块必填 │ ├── in 步骤输入参数 │ ├── run / skip 条件执行 │ ├── swallow 吞错继续 │ ├── onError 自定义错误信息 │ ├── foreach / while / retry 循环与重试 │ └── description 步骤说明 ├── 自定义步骤组 可被 call 调用 / --groups 指定 ├── on_success 成功回调 └── on_failure 失败回调掌握了steps、步骤装饰器、自定义步骤组和on_success/on_failure回调你就掌握了 pypyr 流水线 YAML 的全部核心语法——接下来只需浏览内置步骤清单把真实的自动化流程串起来即可。【免费下载链接】pypyrpypyr task-runner cli api for automation pipelines. Automate anything by combining commands, different scripts in different languages applications into one pipeline process.项目地址: https://gitcode.com/gh_mirrors/py/pypyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/23 16:33:12

ide-eval-resetter:30 秒让 JetBrains IDE 重新拥有全新 30 天试用

ide-eval-resetter:30 秒让 JetBrains IDE 重新拥有全新 30 天试用 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter ide-eval-resetter 是一款能把 JetBrains 全家桶 IDE 试用期重置回来的开源插件&…

2026/8/23 17:58:18

嵌入式远程Shell开发:从Socket通信到安全命令执行的完整实现

1. 项目概述:为什么我们需要一个嵌入式远程Shell?在嵌入式开发或者跨地域的工业设备维护场景里,你肯定遇到过这样的困境:设备部署在千里之外的现场,一个简单的日志查看、配置文件修改或者进程重启操作,都需…

2026/8/23 17:58:18

C++模板特化:从泛型到定制的进阶编程指南

1. 项目概述:从“泛型”到“特化”的思维跃迁 在C的世界里,模板(Template)无疑是实现泛型编程的利器,它让我们能写出与数据类型无关的通用代码。但很多朋友在熟练使用函数模板和类模板后,会遇到一个瓶颈&am…

2026/8/23 17:53:17

快速幂取模算法:从原理到实战,解决大数指数运算性能瓶颈

1. 从“暴力计算”到“快速幂”:一个性能瓶颈的诞生与解决 在密码学、计算机图形学乃至一些看似简单的算法竞赛题里,我们常常会遇到这样一个计算:给定一个底数 a ,一个非常大的指数 b ,以及一个模数 m &#xff…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…