这里尽量提供最少的必要信息,所以我遗漏了很多。周围有很多类似的问题,但最常见的答案(使用chmod +x
)对我不起作用。
我有一个Python脚本和一个shell脚本,它们位于GitHub Enterprise存储库中:
接下来,在Jenkins中,我 checkout 这个存储库中的代码。Jenkins文件中的两个关键步骤如下:
dir ("$WORK/python")
{
sh "chmod +x test.sh"
sh "python3 foo.py -t '${AUTH}'"
}
在这里,$WORK
是Jenkins节点上代码 checkout 的位置,python
(是的,名字很糟糕)是Python和shell脚本所在的存储库中的文件夹。现在,foo.py
以这种方式调用shell脚本:
try:
cmd = f'test.sh {repo_name}'
subprocess.Popen(cmd.split())
except Exception as e:
print(f'Error during repository scan: {e}')
在这里,repo_name
只是我在上面定义的一个参数,我要求shell脚本处理它,当我在Jenkins中运行这个作业时,从技术上讲,它执行无误,但上面的异常分支确实运行了:
11:37:24 Error during repository scan - [Errno 13] Permission denied: 'test.sh'
我想确认Jenkinsfile中的chmod
正在运行,所以我打开了代码 checkout 到的计算机的终端,发现执行权限确实设置正确:
-rw-r--r-- 1 adm domain users 4106 Feb 6 14:24 foo.py
-rwxr-xr-x 1 adm domain users 619 Feb 6 14:37 test.sh
我一整天都在忙这个。到底怎么回事?
1条答案
按热度按时间eoigrqb61#
执行此操作可修复此问题:
为什么呢?由于我对获取别人代码的无知,我忽略了在调用shell脚本之前隐藏在更上面的内容,我们将其更改为下一级的文件夹:
当然,shell脚本并不在那里,所以不指定路径就调用它是行不通的,我不知道为什么会得到
[Errno 13] Permission denied: 'test.sh'
,因为这意味着shell脚本已经找到了,但是如上所述完全限定路径正是我所希望的。