我试图使用CodeDeploy将文件部署到安装了Tomcat的AWS Beanstalk服务器。除了在appspec.yml调用我的.sh脚本和执行mvn install命令时发生的异常外,所有配置均已正确。我尝试了所有我想象中的权限组合(以及我找到的每个StackOverflow答案),但没有任何结果。AWS Linux CodeDeploy权限问题(w。Bitbucket,Tomcat,Shell脚本)
Cannot create resource output directory: /opt/codedeploy-agent/deployment-root/f953d455-9712-454b-84b0-2533cf87f79a/d-3UFCDLD0D/deployment-archive/target/classes
我还希望appspec.yml的文件部分在执行.sh脚本之前得到执行。它应该一直是这样的:
- 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在尝试创建一个文件夹目标而无需许可的除外。所以这些问题是为什么首先它试图在这个文件夹中执行它,然后如何获得适当的访问权限。
我已经完成了所需的代码修改。以root身份运行并将整个部署文件夹移动到.sh脚本内的tomcat,而不取决于appspec.yml。经过一些调整后,它实际运行良好。 – Galya