amazon-web-services - 如何将变量(环境属性)从 CodeBuild 传递到 CodePipeline 中的 Beanstalk 应用程序?
问题描述
buildspec.yml
我有一个简单的 CodePipeline,它包含三个阶段 - 源代码签出、CodeBuild 使用和生成工件构建 docker 映像Dockerrun.json
,以及部署到 Beanstalk。
现在,我希望在 docker 中运行的应用程序在构建期间读取 CodeBuild 阶段设置的变量(环境属性)——一个内部版本号。我怎样才能做到这一点?
我在in 中设置APPLICATION_BUILDNUMBER
了变量并将其列在. 然后它出现在 AWS 控制台中 CodeBuild Build status下 Environment Variables 选项卡下Exported environment variables with desired value 下。buildspec.yml
pre_build:commands
exported-variables
现在我如何在 Beanstalk 的 docker 中运行的应用程序中读取它,这是一个 Spring Boot 应用程序 (JAR)?当我在 Beanstalk > 配置 > 软件 > 环境属性中手动设置变量APPLICATION_BUILDNUMBER
时,我可以轻松阅读它。但我不知道,如何从 CodeBuild 传递它。
解决方案
快速查看 Elastic Beanstalk 操作1的配置属性,它无法从外部源获取环境属性。
解决方法可以是:
一个。从您的 CodeBuild 操作中设置 SSM 参数存储变量,然后
湾。读取 Elastic Beanstalk 环境“挂钩”中的 SSM 参数值并导出到环境。
对于:从 CodeBuild 构建规范运行此命令:
$ aws ssm put-parameter --name "parameter-name" --type String --value "parameter-value"
对于 b:
您可以在 /opt/elasticbeanstalk/hooks/appdeploy/pre/ 中部署挂钩文件。通过 ebextension 'files' 构造2创建挂钩脚本。从 SSM 或 Secrets Manager 获取密钥并将密钥导出到系统的最小挂钩脚本如下所示:
#!/usr/bin/env bash
set -e
export MySecret=$(aws ssm get-parameters ---blah --blah......... )
不用说 CodeBuild 服务角色和 EC2 实例角色(与 EB 一起使用)需要具有所需的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter",
"ssm:PutParameter",
"secretsmanager:GetSecretValue",
"kms:Decrypt"
],
"Resource": [
"arn:aws:ssm:*:*:*",
"arn:aws:secretsmanager:*:*:*",
"arn:aws:kms:*:*:*"
]
}
]
}
推荐阅读
- python - 在 Flask 工作人员之间共享可变数据
- scala - 如何通过火花映射器传递数据而不在参数类中建模?
- javascript - 另存为“网页,完成” javascript 失败
- java - 如何更改 Play 类中的背景颜色?
- python - 在 .csv 文件的字符串列中标记字符串
- php - 如何将媒体:缩略图放入 RSS 提要
- javascript - 从高阶组件返回的组件是否称为闭包?
- c# - SQL查询返回双数据
- javascript - window.print() 和 window.close() 函数 Safari IOS 关闭窗口而不等待打印预览
- javascript - 如何退出 Google 表格中的宏?