web-dev-qa-db-ja.com

CircleCI権限により、bashスクリプトの実行が拒否されました

次のような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 ..の例と一致しているようです。何が問題ですか?

21
samcorcos

考えられるいくつかの問題:

  1. deploy.shが実行可能(chmod +x deploy.shこれを修正します)
  2. Deploy.shの最初の行は実行可能なシェルではない可能性があります...

最初の方法が機能しない場合、deploy.shの内容を確認できますか?

36

私は同じ問題を抱えていました。コマンドセクションの前にshを追加して動作させました。

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

うまくいけば、その修正により、いつかみんなが救われるでしょう。

27
Jesse Sanders

すでにチェックインしていると仮定して、次のコマンドを使用して、gitの実行可能ファイルとしてフラグを立てます。

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

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

5
Adam Lane

@palfreyが言うように、スクリプトはおそらく実行可能としてマークされておらず、ローカルマシンのスクリプトで以前にchmod +xを実行した場合でも、展開時に誤ってマークされているように見えることがあります。 (なぜですか?わからない。誰かが私を啓発してください!)

スクリプトが常に実行可能としてマークされるようにするために使用する一般的なコマンドを次に示します。これは、それらがすべて/home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scriptsディレクトリにあり、すべて.sh拡張子があることを前提としています。ディレクトリが異なる場合は、代わりにディレクトリを使用するように編集します。

私のすべてのスクリプト source 共有スクリプトshared.shcircle.ymlによって呼び出される各スクリプトの上部にあるshared.shに次のコードを追加すると、すべてのスクリプトが実行可能としてマークされます。

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

魅力のように機能します。 :-)

0
MikeSchinkel