如何在 buildspec.yml 文件工件中添加 .platform

How to add .platform in buildspec.yml file artifacts

如何将 .platform 目录包含在 buildspec.yml 文件的工件中?

背景:我想更改 Elastic Beanstalk 上的 nginx 设置 client_max_body_size。我正在使用 CodePipeline 在 Elastic Beanstalk 上部署我的 war 文件。

下面是我的 repo 目录结构:

├── .checkstyle
├── .gitignore
├── .platform
│   ├── hooks
│   │   └── postdeploy
│   │       └── 01_nginx.sh
│   └── nginx
│       └── conf.d
│           └── proxy.conf
├── README.md
├── appspec.yml
├── buildspec.yml
├── mvnw
├── mvnw.cmd
├── nginx.sh
├── pom.xml
└── src
    ├── .platform
    │   └── nginx
    │       └── conf.d
    │           ├── hooks
    │           │   └── postdeploy
    │           │       └── 01_nginx.sh
    │           └── proxy.conf
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── k12
    │   │           └── caap
    │   │               └── service
    │   │                   └── ServiceNAME

编辑: buildspec.yml 不包括 artifact.zip 文件中的“.platform”目录。 proxy.conf 文件未添加到服务器。

buildspec.yml:

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11

  pre_build:
    commands:
      - pip3 install awscli --upgrade --user

  build:
    commands:
      - mvn clean compile package
      
artifacts:
  files:
    - target/*.war
    - '.platform'        
  discard-paths: yes

以下是来自 EC2 /var/log/eb-engine.log

的日志
[INFO] Executing instruction: RunAppDeployPostDeployHooks                      
[INFO] Executing platform hooks in .platform/hooks/postdeploy/                 
[INFO] The dir .platform/hooks/postdeploy/ does not exist                      
[INFO] Finished running scripts in /var/app/current/.platform/hooks/postdeploy 

01_nginx.sh 脚本的内容

echo "client_max_body_size 20M;" > /etc/nginx/conf.d/proxy.conf
systemctl restart nginx.service

存在三个错误配置和两个需要改进的提示:

  • 在您的 buildspec.yml 中,您为神器设置了 discard-paths: yes。这意味着所有文件将直接放在工件中,子目录将丢失。因此,你的nginx配置proxy.conf不会在.platform/nginx/conf.d/proxy.conf而是./proxy.conf。 beantalk部署找不到的原因就是这个

    只需删除选项 discard-paths: yes 并将您的 war 文件复制到根目录(并相应地更改工件文件路径)。这样,您的 war 文件将与以前位于同一位置。

  • 您提供了工件文件路径'.platform'(带引号)。根据documentation of the buildspec,需要是.platform/**/*(不带引号)

  • 同样,您必须将文件 appspec.ymlbuildspec.yml 以及任何 CodeDeploy 或 Beanstalk 需要的文件添加到工件文件路径。

  • 我不确定你为什么有另一个 src/.platform 目录。请记住,它的结构是错误的,因为它在 .platform/nginx/conf.d 而不是 .platform 下有 hooks 目录。在这个路径下,也不会被beanstalk发现。

  • 您只将脚本 01_nginx.sh 放在目录 hooks 中,该目录用于部署挂钩。您可能还想将它放在 confighooks 中,请参阅 documentation on beanstalk hooks。目前,如果 beantalk 仅在代码部署期间由于配置更改而需要再次部署,则脚本不会 运行。