次のような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
ファイルの外(commands
の下)のdeploy.sh
内にあるコマンドを実行すると、すべて正常に実行されます。
circle.yml
ファイルのすべてが CircleCI docs ..の例と一致しているようです。何が問題ですか?
考えられるいくつかの問題:
chmod +x deploy.sh
これを修正します)最初の方法が機能しない場合、deploy.shの内容を確認できますか?
私は同じ問題を抱えていました。コマンドセクションの前にshを追加して動作させました。
deployment:
production:
branch: "master"
commands:
- sh ./deploy.sh
うまくいけば、その修正により、いつかみんなが救われるでしょう。
すでにチェックインしていると仮定して、次のコマンドを使用して、gitの実行可能ファイルとしてフラグを立てます。
git update-index --chmod=+x script.sh
参照: https://www.pixelninja.me/make-script-committed-to-git-executable/
@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
魅力のように機能します。 :-)