如何根据环境定义 AwsCodeploy 中已部署应用程序的位置?

问题描述 投票:0回答:1

由于成本原因,我使用 EC-2,其中生产和登台都驻留在单独的虚拟主机上:

  1. 对于暂存,我使用以下文件:
    • Nginx 虚拟主机:/etc/nginx/sites-available/staging.conf
    • WWW 根目录:/var/www/staging
  2. 对于生产,我使用以下文件:
    • Nginx 虚拟主机:/etc/nginx/sites-available/production.conf
    • WWW根目录:/var/www/生产

对于我的部署,我使用单个 codeploy 应用程序,但为每个环境使用单独的部署组。我的 appspec.yml 是:

version: 0.0
os: linux

files:
  - source: /
    destination: /var/www/staging

hooks:
  ApplicationStop:
    - location: deploy/application-stop.sh
      runas: root
  BeforeInstall:
    - location: deploy/clean-files.sh
      runas: root
  AfterInstall:
    - location: deploy/install_app.sh
      runas: root
  ApplicationStart:
    - location: deploy/application-start.sh
      runas: root

如何根据部署组指定必要的部署路径。有没有办法进行参数化部署,以便我可以设置部署应用程序的必要路径?

amazon-web-services nginx deployment continuous-deployment
1个回答
0
投票

我遵循的方法如下:

在构建步骤中,我定义了一个名为

ENVIRONMENT
的纯文本环境变量,然后在构建步骤中我执行了以下操作(我使用 aws codebuild):

cp appspec.$ENVIRONMENT.yml appspec.yml

我放置了 2 个 appspec 文件:

  1. 对于名为
    appspec.production.yml
  2. 的产品
  3. 用于名为
    appspec.staging.yml
  4. 的舞台

并在

ENVIRONMENT
变量上放置适当的值:

  1. production
    用于生产
  2. staging
    用于舞台

然后在我的构建规范中部署的工件上,我放置了:


# rest ob buildspec.

artifacts:
  files:
   # rest of files here
   - appspec.yml

此外,在我的例子中,每个应用程序规范都会从以下文件夹中检索必要的 Webhook 脚本:

  • deploy/production
    用于生产
  • deploy/staging
    用于舞台

对于新环境(名为

development
)我可以:

  1. 将部署/生产复制粘贴到部署/开发中
  2. 稍微修改一下脚本
  3. 在服务器上创建必要的虚拟主机和文件夹
  4. 创建一个新的构建步骤,将
    ENVIRONMENT
    放入
    development

总而言之,这个想法是使用多个具有命名约定的appspec文件,并将正确的文件复制到预期的

appspec.yml
文件中


注:

对于构建脚本,我认为我可以让每个脚本加载一个配置文件或

source
一个使用现有环境变量的配置脚本,以便加载适当的值。但我还没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.