AWS Linux CodeDeploy Permission Issues (w. Bitbucket, Tomcat



我正在尝试使用 CodeDeploy 将文件部署到安装了 Tomcat 的 AWS Beanstalk 服务器。一切都配置得很好,除了appspec.yml调用我的.sh脚本并执行mvn安装命令时发生的异常。我已经尝试了我想象的所有权限组合(以及我找到的每个 StackOverflow 答案),但没有任何效果。

Cannot create resource output directory: /opt/codedeploy-agent/deployment-root/f953d455-9712-454b-84b0-2533cf87f79a/d-3UFCDLD0D/deployment-archive/target/classes

我还希望appspec.yml的文件部分在执行.sh脚本之前执行。它应该像这样工作:

  1. Appspec.yml 将所有文件移动到 WebApps 文件夹
  2. build.sh 被执行
  3. MVN 运行并创建 .war 文件
  4. 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 尝试在没有权限的情况下创建文件夹目标。所以问题是为什么首先它试图在这个文件夹中执行它,然后如何获得适当的访问权限。

  • 解决问题的方法是在运行"mvn 全新安装"而不是PROJECT_SOURCE_DIR之前添加命令以更改为正确的目录。

  • 安装是 AWS CodeDeploy 代理将修订文件从临时位置复制到最终目标文件夹的生命周期事件。此事件是为 AWS CodeDeploy 代理保留的,不能用于运行脚本。相关文档在这里:http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html

  • 您收到错误的目录实际上位于部署归档目录下,如下所示:https://github.com/aws/aws-codedeploy-agent/blob/master/lib/instance_agent/plugins/codedeploy/hook_executor.rb#L174

  • 您收到错误的原因是 build.sh 脚本在当前目录上运行,该目录需要 root 权限和脚本/构建.sh只有 ex2-user 权限,这导致了权限问题。

相关内容

  • 没有找到相关文章

最新更新