CircleCI 权限被拒绝 运行 bash 脚本

CircleCI permission denied running bash script

我有一个 circle.yml 文件,如下所示:

dependencies:
  override:
    - meteor || curl https://install.meteor.com | /bin/sh

deployment:
  production:
    branch: "master"
    commands:
      - ./deploy.sh

当我推送到 Github 时,出现错误:

/home/ubuntu/myproject/deploy.sh returned exit code 126

bash: line 1: /home/ubuntu/myproject/deploy.sh: Permission denied Action failed: /home/ubuntu/myproject/deploy.sh

当我 运行 位于文件内部 deploy.sh 之外(在 commands 下)的命令时,一切 运行 都很好。

circle.yml 文件中的所有内容似乎都与 CircleCI docs 中的示例一致。我做错了什么?

几个可能的问题:

  1. deploy.sh 可能未标记为可执行文件(chmod +x deploy.sh 会修复此问题)
  2. deploy.sh 的第一行可能无法运行 shell...

如果第一个不行,我们可以看看deploy.sh的内容吗?

我遇到了同样的问题。我将 sh 添加到命令部分的前面以使其正常工作。

deployment:
  production:
    branch: "master"
    commands:
      - sh ./deploy.sh

希望这个修复能在未来的某个时候拯救每个人。

正如@palfrey 所说,该脚本可能未被标记为可执行文件,有时它似乎在部署时被标记为错误,即使您之前在本地计算机上的脚本上有 运行 chmod +x . (为什么?我也不知道,有知道的请赐教!)

这是一个通用命令,用于确保您的脚本始终被标记为可执行。这假设它们都位于 /home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts 目录中并且都具有 .sh 扩展名。如果您的目录不同,请编辑以改用您的目录。

因为我所有的脚本 source 共享脚本 (shared.sh) 在每个脚本的顶部由 circle.yml 我调用将以下代码添加到 shared.sh 以确保所有脚本都标记为可执行:

SCRIPTS="/home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts"
find "${SCRIPTS}" | grep "\.sh$" | xargs chmod +x

很有魅力。 :-)

假设您已经将其签入,使用此命令将其标记为可执行到 git:

git update-index --chmod=+x script.sh

参考: https://www.pixelninja.me/make-script-committed-to-git-executable/