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

Jenkins流水线执行Shell脚本遇Permission Denied问题求助

排查思路与解决方案

核心问题分析

报错//: Permission denied说明Shell尝试执行**根目录(//等价于/)**作为命令,而目录无法被执行,因此触发权限拒绝。结合你的执行日志和脚本内容,重点排查以下方向:


具体排查步骤

1. 检查脚本的实际完整内容

你提供的脚本代码可能遗漏了隐藏行或特殊字符,比如不小心插入了单独的//行(非注释)。在流水线的sh步骤中添加cat -A命令,查看脚本的完整内容(包括隐藏字符):

cat -A scripts/test-report.sh

cat -A会显示所有不可见字符(如Windows换行符^M),如果发现单独的//行,直接删除即可。

2. 修复BAZEL_OPTS的传递与使用

你在流水线中定义了BAZEL_OPTS,但脚本里的bazel build命令并未使用该变量,导致CI配置未生效。同时,确认BAZEL_OPTS的赋值是否正确:

  • 在流水线中添加echo $BAZEL_OPTS,验证变量值是否为--config=ci --config=remote_cache_ci
  • 修改脚本中的bazel build命令,加入BAZEL_OPTS:
    bazel build $BAZEL_OPTS $target
    

3. 验证脚本的Shebang与容器环境

  • 检查容器中是否存在bash:在流水线中添加which bash,如果返回空,说明容器只有sh,需将脚本的Shebang从#!/bin/bash改为#!/bin/sh
  • 若脚本是Windows环境编辑的,可能存在CRLF换行符,导致Shell解析错误。使用dos2unix scripts/test-report.sh转换为LF换行符(或在流水线中添加该命令)

4. 确认Jenkins用户的权限范围

  • 查看当前用户信息:id,确认是否为jenkins用户
  • 检查项目根目录权限:ls -ld /home/jenkins/agent/workspace/team/code-coverage-WIP,确保用户有读写执行权限
  • 检查Bazel缓存目录权限:如果使用远程缓存,确认remote_cache_ci配置的路径(在.bazelrc中)是否允许当前用户访问

快速验证方案

先在流水线中替换为以下最小化测试脚本,定位问题:

sh '''
  pwd
  id
  cat -A scripts/test-report.sh
  echo "BAZEL_OPTS: $BAZEL_OPTS"
  which bash
  bash scripts/test-report.sh  # 直接用bash执行脚本,避免Shebang问题
'''.stripIndent()

内容的提问来源于stack exchange,提问作者AhmFM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:15:28