如何在CircleCI的CodeDeploy Orb中正确使用变量?
解决CircleCI CodeDeploy Orb无法识别自定义变量的问题
你的问题出在CircleCI步骤的环境隔离上:run步骤里定义的stage变量仅存在于当前步骤的shell进程中,后续的aws-code-deploy/deploy-bundle步骤无法直接读取到这个变量,导致最终生成的应用名称里$stage为空。
解决方案
修改Set stage name的run步骤,将stage变量写入$BASH_ENV文件——CircleCI会在每个步骤执行前自动加载这个文件,确保变量能被后续步骤继承:
deploy: executor: aws-cli/default steps: - aws-cli/setup: profile-name: my-role - checkout - run : name: "Set stage name" command: | stage=$(echo "${CIRCLE_USERNAME}" | tr '[:upper:]' '[:lower:]') echo "export stage=$stage" >> $BASH_ENV - aws-code-deploy/deploy-bundle: application-name: "my-app-$stage-application" deployment-group: "my-app-$stage-deployment-group" bundle-bucket: "my-app-$stage-bucket" bundle-key: "appspec" bundle-type: "yaml" deployment-config: "CodeDeployDefault.ECSAllAtOnce"
原理说明
CircleCI的每个步骤都是独立运行的shell进程,进程间默认不共享环境变量。通过将变量导出到$BASH_ENV,相当于把变量全局化,所有后续步骤的shell都会加载这个变量,这样aws-code-deploy/deploy-bundle就能正确解析$stage的值了。
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

