CodeDeploy を使用して、Tomcat がインストールされた AWS Beanstalk サーバーにファイルをデプロイしようとしています。appspec.yml が私の .sh スクリプトを呼び出し、mvn installコマンドが実行されたときに発生する例外を除いて、すべてが適切に構成されています。私が想像したすべてのアクセス許可の組み合わせ (および私が見つけたすべての StackOverflow の回答) を試しましたが、何も機能しませんでした。
Cannot create resource output directory: /opt/codedeploy-agent/deployment-root/f953d455-9712-454b-84b0-2533cf87f79a/d-3UFCDLD0D/deployment-archive/target/classes
また、.sh スクリプトが実行される前に appspec.yml のファイル セクションが実行されることも期待していました。次のように機能しているはずです。
- appspec.yml はすべてのファイルを webapps フォルダーに移動します
- build.sh が実行される
- mvn が実行され、.war ファイルが作成されます
- build.sh はいくつかのクリーンアップを行います
appspec.yml (他にも複数試しました)
version: 0.0
os: linux
files:
- source: /
destination: /var/lib/tomcat8/webapps
permissions:
- object: /opt/codedeploy-agent/deployment-root
pattern: "**"
owner: ec2-user
group: root
mode: 755
type:
- directory
- object: /var/lib/tomcat8/webapps
pattern: "**"
owner: ec2-user
group: root
mode: 755
type:
- directory
hooks:
BeforeInstall:
- location: scripts/build.sh
runas: ec2-user
build.sh
export LANG=en_US.UTF-8
SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "Script path: $SCRIPTPATH"
PROJECT_SOURCE_DIR=$SCRIPTPATH/../
cd $PROJECT_SOURCE_DIR
mvn clean install
cd $PROJECT_SOURCE_DIR/target
ls -a
for file in *.war; do
mv $file /usr/share/tomcat8/webapps/ROOT.war
done;
rm -rf $PROJECT_SOURCE_DIR/target
rm -rf $SCRIPTPATH
mavenがアクセス許可を持たずにフォルダーターゲットを作成しようとすることは、例外から明らかです。したがって、問題は、そもそもなぜこのフォルダーでそれを実行しようとしているのか、次に適切なアクセスを取得する方法です。