1

我正在使用 Elastic Beanstalk 配置 CodePipeline。Elastic Beanstalk 必须在其 Tomcat 的 webapps 文件夹中部署 war 文件。但它正在 webapps/ROOT 文件夹中部署 war 文件。因此,我在.ebextensions文件夹中创建了以下脚本server-update.config ,以将 war 文件从 webapps/ROOT/ 复制到 webapps 文件夹中。

.ebextensions/server-update.config

container_commands:
  copy_file:
    command: sudo cp /var/lib/tomcat8/webapps/ROOT/test/* /var/lib/tomcat8/webapps/
    leader_only: true

以上代码执行成功。下面是日志。

[2016-04-18T14:06:30.939Z] INFO  [1128]  - [Application update code-pipeline-1460988338596-MyAppBuild-2d3bd0c0-62bc-4927-bd09-b04ba81e7c03@15/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_SampleEB/Command copy_file] : Starting activity...
[2016-04-18T14:06:30.973Z] INFO  [1128]  - [Application update code-pipeline-1460988338596-MyAppBuild-2d3bd0c0-62bc-4927-bd09-b04ba81e7c03@15/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_SampleEB/Command copy_file] : Completed activity.

但是 ElasticBeanstalk 在执行 .ebextensions 文件后正在清理 tomcat webapps 文件夹(在内部运行 /opt/elasticbeanstalk/hooks/appdeploy/enact/02clean.sh 时)

  + EB_APP_DEPLOY_BASE_DIR=/var/lib/tomcat8/webapps
  + rm -rf /var/lib/tomcat8/webapps/ROOT /var/lib/tomcat8/webapps/sampleapp.war

我不知道如何配置我的脚本以最终执行。请任何人帮助我满足上述要求。

4

2 回答 2

1

我们有一个类似的问题。在正确设置 Django 之后,我们需要重新启动 Celery。我们最终像这样非常简单地解决了这个问题。

files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_service.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
        #!/usr/bin/env bash
        service celeryd restart

现在,在 Elastic Beanstalk 在容器上发挥了魔力之后,它正在执行。

于 2016-04-19T03:34:07.370 回答
0

如果您需要 Elastic Beanstalk 在部署后执行某些操作,您可以将其添加到 AppDeployPostHook。我在这里详细介绍了如何操作,https://stackoverflow.com/a/36603033/3167238,您可以根据自己的特定需求进行调整。

于 2016-04-19T02:31:36.253 回答