0

AWS CodeDeploy と CircleCI を使用して CI をセットアップしようとしています。現在、AWS CodeDeploy が EC2 にデータをコピーしてスクリプトを実行する必要がある段階で立ち往生しています。しかし、どういうわけか、CircleCI は何かがおかしいと教えてくれます。何が起こっているのか知っている人はいますか?ありがとう。

appspec.yml は次のとおりです。

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu
hooks:
  BeforeInstall:
    - location: scripts/setup.sh
      timeout: 3800
      runas: root
  ApplicationStart:
    - location: scripts/start.sh
      timeout: 3800
      runas: root

そしてsetup.shは次のとおりです。

#!/bin/bash
sudo apt-get install nodejs npm
npm install

上記のコードでも試してみapt-get install nodejs npmましたが、まだ機能していません。

のエラー メッセージ/var/log/aws/codedeploy-agent/codedeploy-agent.logは次のとおりです。

2015-10-22 08:02:54 ERROR [codedeploy-agent(1314)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during 
 perform: InstanceAgent::Plugins::CodeDeployPlugin::ScriptError - Script at specified location:
./scripts/setup.sh run as user root failed with exit code 127 - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/hook_executor.rb:150:in `execute_script'
/opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/hook_executor.rb:107:in `block (2 levels) in execute'
......
4

2 に答える 2

1

デバッグのために次の手順を実行します。

  • CodeDeploy エラー ログ/var/log/aws/codedeploy-agent/codedeploy-agent.logには、という行がありますError during perform: InstanceAgent::Plugins::CodeDeployPlugin::ScriptError - Script at specified location: scripts/setup.sh failed with exit code 1。したがって、エラー ログから、このスクリプトに問題がある可能性があることがわかります。

  • 上記のスクリプトsetup.shでは、スクリプトの先頭に次のようなものを配置します。

exec 3>&1 4>&2 trap 'exec 2>&4 1>&3' 0 1 2 3 exec 1>/home/ubuntu/out.log 2>&1

これにより、エラー出力全体がログに記録されます。

  • 権限の問題

EC2 がこれらのスクリプトの実行に失敗した可能性もあります。インスタンスにコピーするときに、これらのファイルに少なくとも 755 のアクセス許可があることを確認する必要があります。755そのため、スクリプトのファイル モードを指定する必要があります。

GitHub でファイルモードを変更するには?

また、必要な appspec.yml では、runasディレクティブを指定できます。ubuntu や root など、正しい権限を与えるものであれば何でもかまいません。

  • 雑多な

sudo apt-get install nodejsパッケージをインストールしてディスク容量を使用するかどうかを尋ねる中間ステップがあり、Y または N を入力してインストールを続行する必要がある場合のように、展開時にいくつかの落とし穴があります。これらのスクリプトはそこでハングし、タイムアウトになり、展開が失敗します。だから代わりにあなたは

sudo apt-get -y install nodejs npm

または、setup.shスクリプトにある可能性があります

chmod -R 777 public

ただし、CodeDeploy がプロジェクト ルートとは異なるフォルダーでこのコードを実行している可能性があります。したがって、すべてのパスが有効であることを確認してください。

于 2015-10-26T07:08:41.973 に答える