是否有可能在AppSpec文件的节文件中使用CodeDeploy环境变量

Lia*_*van 5 deployment bitbucket web-deployment amazon-web-services aws-code-deploy

我有网站,存储在AWS EC2服务器上.

我们有2台服务器,一台用于生产环境,另一台用于开发和登台环境.

位于不同文件夹中的开发和登台环境.例如存储的开发env,存储的/var/www/development存储时/var/www/staging.

我想使用AWS CodeDeploy直接从bitbucket上传文件.我放了AppSpec文件,它将源代码复制到/var/www/html文件夹并安装所有依赖项和配置.但我想我AppSpec文件的源代码复制到/var/www/development/var/www/staging取决于开发组,被选择的.

有没有办法做到这一点,或者,在我的情况下有一些更好的方法?

ajt*_*rds 5

appspec.yml有点不灵活,因此使用以下内容将代码部署到同一实例上的不同文件夹中。

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/my-temp-dir
permissions:
  - object: /var/www/my-temp-dir
    owner: ec2-user
    group: ec2-user
hooks:
  BeforeInstall:
    - location: ci/integrations-deploy-pre.sh
      runas: root
  AfterInstall:
    - location: ci/integrations-deploy-post.sh
      runas: root
Run Code Online (Sandbox Code Playgroud)

在我的integrations-deploy-post.sh文件中,我然后使用 CodeDeploy 环境变量将文件移动到我需要的位置;

#!/bin/bash
    
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]
then
    cp -R /var/www/my-temp-dir /var/www/my-staging-dir
    chown -R ec2-user:ec2-user /var/www/my-staging-dir

    # Insert other commands that need to run...
fi

if [ "$DEPLOYMENT_GROUP_NAME" == "UAT" ]
then
    cp -R /var/www/my-temp-dir /var/www/my-uat-dir
    chown -R ec2-user:ec2-user /var/www/my-uat-dir

    # Insert other commands that need to run...
fi
Run Code Online (Sandbox Code Playgroud)

注意:在我的integrations-deploy-post.sh你还需要你想要在生产中运行的命令。为简单起见删除。


Emp*_*nal 4

更改 AppSpec 或自定义脚本行为的推荐方法是利用CodeDeploy 代理提供的环境变量。您有权访问部署组名称和应用程序名称。

if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]; then
  # Copy to /var/www/staging
elif [ "$DEPLOYMENT_GROUP_NAME" == "Development" ]; then
  # Copy to /var/www/development
elif [ "$DEPLOYMENT_GROUP_NAME" == "Production" ]; then
  # Copy to /var/www/html
else
  # Fail the deployment
fi
Run Code Online (Sandbox Code Playgroud)