You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:24:31