用 block + always 组合可确保批量部署中 Token 必删:将生成、分发、使用 Token 的操作全置于 block 下,always 块内仅执行无条件清理(如删除文件、清空变量),且配合 token 生命周期约束与权限控制提升安全性。

用 block + always 组合,就能在批量部署中做到“不管成没成,Token 必删”——关键不是靠运气或事后脚本,而是把清理动作写进 playbook 的结构里,由 Ansible 强制保障执行。
把部署任务包进 block,隔离主逻辑
所有涉及生成、分发、使用临时 Token 的操作(比如调用 API 获取 token、写入配置文件、注入到服务环境变量),都集中放在 block: 下。这样它们成为一个原子性逻辑单元:任一任务失败,后续部署步骤立即停止,避免残留错误状态。
- 不推荐每个任务单独加
when或ignore_errors,容易漏掉清理入口 - 避免在 block 外零散写 token 相关任务,否则 always 无法覆盖
always 里只做一件事:无条件删除 Token 文件或变量
always 块必须独立存在,且只放真正“收尾”的清理动作。例如:
- 用
file: state=absent删除本地生成的/tmp/deploy-token.txt - 用
shell:执行rm -f /run/secrets/deploy_token(适用于容器场景) - 用
set_fact:清空内存中的 token 变量(配合no_log: true防泄漏)
注意:always 中的任务即使失败,Ansible 也只报 warning 不中断流程;如需绝对可靠,可加 ignore_errors: yes 并配合日志记录。
补充建议:Token 本身要带生命周期约束
仅靠 always 清理还不够稳健。建议从源头降低风险:
- 调用 token 接口时明确指定
expires_in: 300(5 分钟),让 token 自身过期 - 避免明文落盘,优先用
lookup('pipe', 'curl ...')直接传参,不落地 - 若必须写文件,用
mode: '0600'限定权限,防止被其他用户读取
这个模式不依赖人工检查或定时任务,每次运行 playbook 都自动触发清理,适合 CI/CD 流水线和无人值守部署。

















