shell脚本与ansible是互补搭档:shell负责轻量即时操作(如环境预检、初始化)、定制逻辑调用及本地流水线;ansible专注跨主机声明式编排(如批量部署、配置同步)与远程状态管理,二者结合兼顾灵活性与工程化。

Shell 脚本和 Ansible 不是互斥工具,而是互补搭档。Shell 适合做轻量、即时、系统级的“胶水逻辑”,比如环境预检、临时文件清理、本地校验;Ansible 则负责跨主机、声明式、可追溯的“主干编排”,比如批量部署、配置同步、服务管控。把两者合理结合,既能保留 Shell 的灵活与高效,又能发挥 Ansible 的幂等性、模块化和工程化优势。
Shell 脚本做 Ansible 的前置准备器
很多 Ansible 任务依赖目标环境就绪——比如 SSH 免密已配、Python 已安装、临时目录已创建。这些琐碎但关键的初始化工作,用 Shell 脚本批量完成更直接。
- 写一个 setup_hosts.sh:自动在所有目标机上生成密钥、分发公钥、安装 Python3、关闭 SELinux(如需)
- 用
ssh+for循环执行,比写 Ansible Playbook 更快启动,尤其在首次纳管新集群时 - 脚本结尾可输出统一状态码,供后续 Ansible 流程判断是否继续
Ansible 中调用 Shell 脚本完成定制逻辑
不是所有操作都有现成 Ansible 模块。遇到复杂命令组合、私有工具调用或需要 Bash 特性(如数组、条件判断嵌套)时,用 shell 或 command 模块安全调用本地或远程脚本更自然。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 把脚本提前分发到目标机(用
copy模块),再用shell模块执行:shell: /opt/bin/health_check.sh - 注意加
args: executable: /bin/bash,避免默认 sh 不兼容语法 - 配合
register和failed_when做结果判断,保持幂等性和错误可控
用 Shell 封装 Ansible 执行入口,提升易用性
运维人员不总愿意记 Ansible 命令参数。写个简单 Shell 包装脚本,让团队一键触发标准化流程:
- 例如
deploy-nginx.sh --env prod --version 1.24,内部解析参数后调用ansible-playbook -i inventory/prod nginx.yml -e "version=1.24" - 可内置日志归档、执行时间统计、失败自动截图(
ansible --start-at-task调试支持) - 还能集成敏感信息处理:自动加载
ansible-vault解密环境变量,避免明文暴露
Shell 负责本地流水线,Ansible 负责远程状态管理
CI/CD 流水线中,Shell 是构建、测试、打包阶段的主力;Ansible 是部署、验证、回滚阶段的主力。二者天然分工:
- GitLab CI 中用 Shell 脚本编译二进制、运行单元测试、生成 RPM 包
- 测试通过后,用 Ansible Playbook 将包推送到目标机、替换服务、滚动重启、调用健康接口验证
- 若验证失败,Shell 脚本可触发 Ansible 回滚任务(
ansible-playbook rollback.yml)










