如何解决Ansible playbook在GitHub Actions中无法运行的问题
问题根因
你使用的第三方Ansible检查Action存在明确缺陷,直接导致运行失败:
- 该Action运行时会强制覆写你项目根目录的
ansible.cfg,将清单文件路径硬编码为它自动生成的host.ini,你项目中原先配置的inventory.yml完全失效 - 它自动生成的
host.ini第一行存在非法的[]配置段,不符合INI格式规范,Ansible无法正常解析该清单 - 清单解析失败后Ansible只能识别内置的隐式localhost,而Ansible默认规则中隐式localhost不会匹配
all组,最终你的playbook没有匹配到主机直接跳过执行。
解决方案
推荐方案:替换第三方Action,复用本地配置
完全放弃这个有缺陷的第三方Action,自己编写CI步骤,100%复用你本地、Vagrant环境的配置,不需要改动原有playbook或清单:
修改.github/workflows/ansible-ubuntu-latest.yml内容如下:
name: Ansible check ubuntu:latest on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装Ansible run: | sudo apt update sudo apt install -y ansible - name: 语法检查(可选) run: ansible-playbook local.yml --syntax-check - name: 实际运行Playbook run: ansible-playbook local.yml --become
GitHub官方的Ubuntu runner默认sudo无密码,不需要输入become密码,直接运行即可和本地、Vagrant环境表现完全一致。
兼容方案:适配原有第三方Action
如果你一定要继续使用原Action,只需做1处小改动:
修改local.yml中的hosts: all改为hosts: localhost即可,你本来就是本地运行的playbook,匹配localhost完全符合使用场景。
内容的提问来源于stack exchange,提问作者Amedee Van Gasse
相关产品推荐
相关产品推荐

