首页 > 解决方案 > 如何跨 AWS CodeDeploy 步骤共享环境变量?

问题描述

我正在制定一种利用 AWS CodeDeploy 的新部署策略。我从事的项目有许多环境(例如:预生产、生产)和实例(例如:EMEA、US、APAC)。

我的基本脚手架工作正常,但我注意到在BeforeInstall挂钩中设置的环境变量无法从其他步骤(例如AfterInstall)中检索。

有没有办法在 AWS CodeDeploy 步骤之间共享环境变量?

appspec.yml 的内容:

version: 0.0
os: linux
files:
  - source: /
    destination: /tmp/code-deploy
hooks:
  BeforeInstall:
    - location: utils/delivery/aws/CodeDeploy/before_install.sh
      timeout: 300
  AfterInstall:
    - location: utils/delivery/aws/CodeDeploy/after_install.sh
      timeout: 300
  ApplicationStart:
    - location: utils/delivery/aws/CodeDeploy/application_start.sh
      timeout: 300
  ValidateService:
    - location: utils/delivery/aws/CodeDeploy/validate_service.sh
      timeout: 300

我在before_install.sh中设置了一个环境变量:

export ENVIRONMENT=preprod

如果我在after_install.sh中引用它:

$ echo $ENVIRONMENT
$ 

没有什么。

感谢您对此的帮助!

标签: bashamazon-web-servicesenvironment-variablesaws-code-deploy

解决方案


您可以将其export放入一个临时文件,然后放入source该文件。所以在 before_install.sh 中:

ENVIRONMENT="preprod"  
echo "export ENVIRONMENT=\"$ENVIRONMENT\"" > "/path/to/file"

注意:使用此方法,您不再导出 before_install.sh 中的变量。您只是在 after_install.sh 中编写要获取的文件:

source "/path/to/file"
echo "$ENVIRONMENT"

推荐阅读