8

AWS Code Deploy を使用してデプロイ中にいくつかのスクリプトを実行しようとしていますが、スクリプトを実行する権限がないため実行されません。

ここに私の appspec.yml ファイルがあります:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html
permissions:
  - object: /var/www/html/codedeploy-scripts
    owner: root
    mode: 777
    type:
      - directory
hooks:
  ApplicationStop:
    - location: codedeploy-scripts/application-stop
      timeout: 300
      runas: root
  BeforeInstall:
    - location: codedeploy-scripts/before-install
      timeout: 300
      runas: root
  AfterInstall:
    - location: codedeploy-scripts/after-install
      timeout: 600
      runas: root
  ApplicationStart:
    - location: codedeploy-scripts/application-start
      timeout: 300
      runas: root
  ValidateService:
    - location: codedeploy-scripts/validate-service
      timeout: 300
      runas: root

codedeploy-scripts フォルダーがアプリと共にデプロイされ、フォルダーに設定したアクセス許可が設定されません。フォルダーのアクセス許可は常に次のようにリセットされます。

[ec2-user@ip-10-0-8-181 html]$ ls -al
total 156
drwxrwsr-x  7 ec2-user www   4096 Oct 13 16:36 .
drwxrwsr-x  3 ec2-user www   4096 Oct 13 15:01 ..
-rw-rw-r--  1 ec2-user www    740 Oct 13 16:28 appspec.yml
drwxr-sr-x  2 ec2-user www   4096 Oct 13 16:36 codedeploy-scripts
...

フォルダー内のファイルには実行権限があるようです:

[ec2-user@ip-10-0-8-181 alio]$ ls -al codedeploy-scripts
total 28
drwxr-sr-x 2 ec2-user www 4096 Oct 13 16:36 .
drwxrwsr-x 7 ec2-user www 4096 Oct 13 16:36 ..
-rwxr-xr-x 1 ec2-user www  343 Oct 13 16:28 after-install
-rwxr-xr-x 1 ec2-user www   12 Oct 13 16:28 application-start
-rwxr-xr-x 1 ec2-user www   12 Oct 13 16:28 application-stop
-rwxr-xr-x 1 ec2-user www  889 Oct 13 16:28 before-install
-rwxr-xr-x 1 ec2-user www   12 Oct 13 16:28 validate-service

appspec ファイルで設定した権限でコードが展開されないのはなぜですか。codedeploy-scripts フォルダーには 777 のアクセス許可が必要ですが、そうではありません。

これは、これらのスクリプトごとに /var/log/aws/codedeploy-agent/codedeploy-agent.log に表示されるエラーです。

2015-10-13 16:36:23 WARN  [codedeploy-agent(9918)]: InstanceAgent::Plugins::CodeDeployPlugin::HookExecutor: Script at specified location: codedeploy-scripts/validate-service is not executable.  Trying to make it executable.

どんな助けでも大歓迎です。

4

4 に答える 4

6

詳細がなければ、スクリプトを実行可能に設定することで問題が修正された理由について話すことはできませんが、受け入れられた回答では、表示されていたログ ステートメント以外は解決されないはずです。

ログを詳しく見てみましょう。

2015-10-13 16:36:23 WARN  [codedeploy-agent(9918)]: InstanceAgent::Plugins::CodeDeployPlugin::HookExecutor: Script at specified location: codedeploy-scripts/validate-service is not executable.  Trying to make it executable.

これは単なる警告であり、エラーではありません。validate_service.shCode Deploy エージェントは、スクリプトが実行可能ではなく、「実行可能にしようとしています」であることに気付きました。関連する Code Deploy エージェント コードを見ると、エージェントがchmod +xスクリプト自体を実行することがわかります。

スクリプトを実行可能に設定すると、この警告が消えただけで、他には何の影響もありませんでした。L106 の Code Deploy エージェント コードを振り返ると、エージェントがスクリプトを実行可能にできなかった場合、ログにエラーが記録されていたはずです。

アクセス許可に関する質問に答えるには、appspec.yml の構成が間違っています。あなたが言う時:

  permissions:
    - object: /var/www/html/codedeploy-scripts
      owner: root
      mode: 777
      type:
        - directory

Code Deploy に、「ディレクトリ」タイプのすべてのファイルを/var/www/html/codedeploy-scripts権限を持つように設定するように指示してい777ます。

下のすべてのスクリプトcodedeploy-scriptsは「ファイル」タイプ (「ディレクトリ」ではありません) であるため、それらのアクセス許可は設定されませんでした。アクセス許可は、指定したディレクトリの下のファイルcodedeploy-scriptsのみ適用されます。設定します。

AWS docsからの appspec.yml アクセス許可のtypeオプションの説明は次のとおりです。

タイプ – オプション。指定された権限を適用するオブジェクトのタイプ。これは、ファイルまたはディレクトリに設定できます。file が指定されている場合、パーミッションは、コピー操作の直後にオブジェクトに含まれるファイルにのみ適用されます (オブジェクト自体には適用されません)。directory が指定されている場合、コピー操作後にオブジェクト内の任意の場所にあるすべてのディレクトリ/フォルダーにアクセス許可が再帰的に適用されます (ただし、オブジェクト自体には適用されません)。

于 2016-01-09T20:31:51.153 に答える