GitLab CI中Python subprocess.Popen执行二进制文件遇权限拒绝问题
GitLab-CI任务中subprocess调用二进制文件遇权限拒绝问题
问题场景
运行GitLab-CI任务时,执行以下Python脚本调用二进制文件:
def main(): proc = subprocess.Popen("./../binary_file --args value", stdout=subprocess.PIPE)
触发报错:
PermissionError: [Errno 13] Permission denied: './../binary_file'
已执行操作及结果
已尝试为二进制文件添加执行权限,操作和输出如下:
$ chmod +x ./binary_file $ ls -l ./binary_file -rwxr-xr-x 1 root root 30335023 Apr 1 14:16 ./binary_file $ whoami root
当前以root用户操作,文件权限已正确设置。
GitLab-CI配置
任务的script部分配置:
script: - chmod +x ./binary_file - ls -l ./binary_file - whoami - pipenv run python ./scripts/run_tests.py
可能的原因排查
- 相对路径错误:CI任务执行时的工作目录是项目根目录,Python脚本位于
./scripts/下,脚本里用./../binary_file会指向项目根目录的上级目录,但实际二进制文件在项目根目录下(从chmod +x ./binary_file的命令可知)。应将路径改为./binary_file(相对于脚本所在目录的上级,即项目根)或使用绝对路径。 - 目录权限不足:即使文件本身有执行权限,所在目录若没有
x权限,也无法访问文件。可执行ls -ld ./检查项目根目录权限,确保root用户拥有x权限。 - 安全模块限制:GitLab Runner所在环境可能开启了SELinux、AppArmor等安全模块,阻止root执行该二进制文件。可临时关闭安全模块测试(如
setenforce 0),或配置规则允许执行该文件。 - 二进制文件架构不兼容:若二进制文件是跨平台编译的,与CI Runner的系统架构不匹配,系统可能误报权限错误。可执行
file ./binary_file查看文件架构,或直接在CI环境中手动运行./binary_file验证是否能正常执行。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

