AWS Eventbridge:使用环境变量覆盖安排 CodeBuild 作业
AWS Eventbridge: scheduling a CodeBuild job with environment variable overrides
当我从 Web 界面启动 AWS CodeBuild 项目时,我可以选择“开始构建”以使用其正常配置启动构建项目。或者我可以选择“Start build with overrides”,这让我可以为构建作业指定自定义环境变量。
从 AWS EventBridge(事件 -> 规则 -> 创建规则),我可以创建一个计划事件来触发代码构建作业,这很有效。 如何在 EventBridge 中为计划的 CodeBuild 作业指定环境变量覆盖?
我认为可以通过使用“附加设置”->“配置目标输入”以某种方式实现,它允许对事件进行规范和模板化 JSON。我不确定如何解决这个 JSON 应该是什么样子(在我的例子中覆盖环境变量)。换句话说,我在哪里可以找到发送到 CodeBuild 的事件的 JSON 规范?
这里有很多类似的问题:例如 and AWS Cloudwatch (EventBridge) Event Rule for AWS Batch with Environment Variables , but I can't find the specifics for CodeBuild jobs. I've tried the CDK docs at e.g. https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_events_targets.CodeBuildProjectProps.html ,但我有点聪明。我还尝试捕获 EventBridge 输出的事件,以查看没有覆盖的事件是什么样的,但没有管理。提交以下内容(以及一些变体:例如作为“详细信息”)作为“输入常量”触发作业,但环境变量不会生效:
{
"ContainerOverrides": {
"Environment": [{
"Name": "SOME_VAR",
"Value": "override value"
}]
}
}
https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax 处还有 CodeBuild API 参考。编辑:这似乎是正确的参考(根据我在下面的回答)。
我使用这样的“输入常量”让它工作:
{
"environmentVariablesOverride": [{
"name": "SOME_VAR",
"type": "PLAINTEXT",
"value": "override value"
}]
}
换句话说,您可以忽略 EventBridge 示例事件中的字段,并且不需要在“详细信息”字段中指定覆盖。
我使用 https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax 上的代码构建“StartBuild”API 文档找到了这种格式。我假设(但尚未测试)此处显示的其他字段的工作方式类似(并且其他服务的 API 引用在使用 EventBridge 时的工作方式类似:任何人都可以确认吗?)。
规则目标的 event input template should match the structure of the CodeBuild API StartBuild action input. In the StartBuild action, environment variable overrides have a key of "environmentVariablesOverride"
and value of an array of EnvironmentVariable 个对象。
这是一个示例目标输入转换器,其中一个是常量环境变量,另一个是其值取自事件负载的 detail-type:
输入路径:
{ "detail-type": "$.detail-type" }
输入模板:
{"environmentVariablesOverride": [
{"name":"MY_VAR","type":"PLAINTEXT","value":"foo"},
{"name":"MY_DYNAMIC_VAR","type":"PLAINTEXT","value":<detail-type>}]
}
当我从 Web 界面启动 AWS CodeBuild 项目时,我可以选择“开始构建”以使用其正常配置启动构建项目。或者我可以选择“Start build with overrides”,这让我可以为构建作业指定自定义环境变量。
从 AWS EventBridge(事件 -> 规则 -> 创建规则),我可以创建一个计划事件来触发代码构建作业,这很有效。 如何在 EventBridge 中为计划的 CodeBuild 作业指定环境变量覆盖?
我认为可以通过使用“附加设置”->“配置目标输入”以某种方式实现,它允许对事件进行规范和模板化 JSON。我不确定如何解决这个 JSON 应该是什么样子(在我的例子中覆盖环境变量)。换句话说,我在哪里可以找到发送到 CodeBuild 的事件的 JSON 规范?
这里有很多类似的问题:例如
{
"ContainerOverrides": {
"Environment": [{
"Name": "SOME_VAR",
"Value": "override value"
}]
}
}
https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax 处还有 CodeBuild API 参考。编辑:这似乎是正确的参考(根据我在下面的回答)。
我使用这样的“输入常量”让它工作:
{
"environmentVariablesOverride": [{
"name": "SOME_VAR",
"type": "PLAINTEXT",
"value": "override value"
}]
}
换句话说,您可以忽略 EventBridge 示例事件中的字段,并且不需要在“详细信息”字段中指定覆盖。
我使用 https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax 上的代码构建“StartBuild”API 文档找到了这种格式。我假设(但尚未测试)此处显示的其他字段的工作方式类似(并且其他服务的 API 引用在使用 EventBridge 时的工作方式类似:任何人都可以确认吗?)。
规则目标的 event input template should match the structure of the CodeBuild API StartBuild action input. In the StartBuild action, environment variable overrides have a key of "environmentVariablesOverride"
and value of an array of EnvironmentVariable 个对象。
这是一个示例目标输入转换器,其中一个是常量环境变量,另一个是其值取自事件负载的 detail-type:
输入路径:
{ "detail-type": "$.detail-type" }
输入模板:
{"environmentVariablesOverride": [
{"name":"MY_VAR","type":"PLAINTEXT","value":"foo"},
{"name":"MY_DYNAMIC_VAR","type":"PLAINTEXT","value":<detail-type>}]
}