GitLab Docker Runner运行Ansible Playbook遇目录读取错误求助
问题分析与解决建议
问题核心
报错ERROR! an error occurred while trying to read the file '/builds/volkov_pm/ansible': [Errno 21] Is a directory的根源是**-e @$VARIABLES参数中的$VARIABLES指向了一个目录,而非Ansible期望的变量文件**。
Ansible的-e @<path>语法用于加载外部变量文件(YAML/JSON格式),如果<path>是目录,Ansible会尝试读取它作为文件,从而触发"Is a directory"错误。
解决步骤
检查
$VARIABLES变量定义
登录GitLab项目的「Settings → CI/CD → Variables」,确认VARIABLES变量的值:- 确保它指向一个具体的变量文件(比如
/builds/volkov_pm/ansible/vars.yaml),而非项目根目录/builds/volkov_pm/ansible。 - 如果变量是在
.gitlab-ci.yml的其他部分定义的,检查赋值是否正确。
- 确保它指向一个具体的变量文件(比如
临时验证变量值
在CI脚本中添加调试命令,确认$VARIABLES的实际内容:script: - echo "VARIABLES value: $VARIABLES" - ansible-playbook --become -e @$VARIABLES -i $INVENTORY --private-key $KUBERNETES_PRIVATE runner_cleaner/task.yaml -vvvvv运行任务后查看输出,确认变量是否指向了错误的路径。
如果需要加载目录下的所有变量文件
若你的需求是加载某个目录下的所有变量文件,Ansible 2.4及以上版本支持给目录路径添加末尾斜杠:ansible-playbook --become -e @$VARIABLES/ -i $INVENTORY --private-key $KUBERNETES_PRIVATE runner_cleaner/task.yaml -vvvvv注意:目录下必须都是有效的YAML/JSON变量文件,否则会触发其他解析错误。
额外验证
如果修正变量后仍有问题,可单独测试变量文件的有效性:
ansible-playbook --become -e @/path/to/your/vars.yaml -i $INVENTORY --private-key $KUBERNETES_PRIVATE runner_cleaner/task.yaml -vvvvv
直接使用硬编码的变量文件路径,排除变量替换的问题。
内容的提问来源于stack exchange,提问作者Rumotameru
相关产品推荐
相关产品推荐

