权限被拒绝错误 - Jenkins(Shell脚本)

7
我正在使用Jenkinsfile来测试我们的一个实例。 为此,我创建了一个Bash脚本。 问题是Jenkins没有权限运行该脚本。你有什么解决办法吗?
Jenkinsfile:
 stage("Testing instances"){
    if (terragruntAction == 'apply' || terragruntAction == 'test'){
       echo "Testing"
       sh '../check_services.sh'
    }
 }

输出: ../check_services.sh:拒绝访问
我尝试做:
git update-index --chmod=+x check_services.sh 

在 Jenkins 检出的 Git 文件夹上尝试了,但没有成功。有任何帮助,谢谢!

你的脚本第一行是否包含了 #!/bin/bash 作为进程解释器?如果你已经使用 (chmod 0755 filename) 命令将其赋予自己或所属组可执行权限,那么它可能会出现无法确定正确解释器的问题。 - David C. Rankin
1
使用 sh check_services.sh 需要读取权限,而不是执行权限。 - Yaroslav Surzhikov
尝试通过ssh登录主机,然后更改权限。Git可能也没有更改权限的权限。手动更改可能会起作用,或者您还可以将脚本所有者更改为jenkins。 - abhishek phukan
@DavidC.Rankin 是的,我包括了进程解释器。 - Mathieum
@YaroslavSurzhikov,我该如何自动地在Jenkins上给脚本读取权限? - Mathieum
克隆完成后,只需使用chmod 755命令即可。 - eran meiri
2个回答

16

我将其添加到GIT仓库并使其工作:

使用以下命令:
git update-index --chmod=+x check_services.sh


9

我的偏好是将个别文件的访问权限保持在git仓库之外,而是倾向于使用一种方法来处理pipelines中这个问题。只需在脚本执行之前运行chmod,以授予工作空间权限即可。使用声明性语法:

    stage('My Stage') {
        steps {
            sh "chmod +x -R ${env.WORKSPACE}"
            sh "./my-script.sh"
        }
    }

注意:对于那些还不知道的人,另一个要求是明确告诉 Pipeline 脚本相对于工作区在哪里。仅使用 sh "my-script.sh" 是无法正常工作的。


这将更改工作区中所有文件的可执行权限,不完全符合您的要求。sh“chmod +x ./my-script.sh”只会针对一个文件。 - Ozal Zarbaliyev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接