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 中的示例一致。我做错了什么?
几个可能的问题:
- deploy.sh 可能未标记为可执行文件(
chmod +x deploy.sh
会修复此问题)
- 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/
我有一个 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 中的示例一致。我做错了什么?
几个可能的问题:
- deploy.sh 可能未标记为可执行文件(
chmod +x deploy.sh
会修复此问题) - 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/