CommitID 作为整个 CodePipeline 中的变量 - AWS
CommitID as a variable throughout CodePipeline - AWS
我有一个创建 docker 图像并将其推送到 ECR 的管道。由于我想使用 AWS 提供的构建环境,因此我使用了 2 个构建阶段。
管道共有 3 个阶段
- 从GitHub获取源代码:Source
- 安装依赖项并创建一个 .war 文件:构建:aws/codebuild/java:openjdk-9
- 构建 docker 镜像并将其推送到 ECR : 构建 : aws/codebuild/docker:17.09.0
我想用通常为 CODEBUILD_RESOLVED_SOURCE_VERSION 的提交 ID 标记 docker 图像。但是,我注意到此变量仅在我紧随源代码之后的第二阶段可用。
我发现最糟糕的解决方法是在第二阶段将此变量写入文件并将该文件包含在作为第三阶段输入的工件中。
有没有更好的方法在我的第三阶段或整个管道中使用它?
我正在使用 codepipeline + jq 的组合。这不是最好的方法,但这是我迄今为止最好的方法。
commit=$(aws codepipeline get-pipeline-state --name PIPELINE_NAME | jq '.stageStates[0].actionStates[0].currentRevision.revisionId' | tr -d '"'))
然后推送带有新标签的docker图像。需要先安装jq,不喜欢jq的可以自行解析response
这个 'may' 是 this other question
的副本
您能否将提交 ID 写入位于 CodePipeline 工件中 WAR 文件旁边的文件中?
还有一些相关的想法:
- 可以在 CodePipeline 中将 CodeBuild 配置为具有多个输入
工件,所以我假设
CODEBUILD_RESOLVED_SOURCE_VERSION
是指
主要神器。我不确定如何概括
将 ID 提交到第三个操作(发布到 ECR)因为扇入
(具有不同提交 ID 的多个源)可以同时出现
CodeBuild 操作。
- 按提交 ID 标记意味着多个管道执行可能会生成具有相同标记的图像。理想情况下,我希望每个管道执行都被隔离,这样我就不必担心标签被并发管道执行更改或稍后使用不同的依赖闭包。
我已经设法用 jq 和 sponge 做了一些事情,如这个文件中所示 buildspec.yaml
我在每次提交时修改我的 config.json 文件并将其传递到下一阶段。
我有一个创建 docker 图像并将其推送到 ECR 的管道。由于我想使用 AWS 提供的构建环境,因此我使用了 2 个构建阶段。
管道共有 3 个阶段
- 从GitHub获取源代码:Source
- 安装依赖项并创建一个 .war 文件:构建:aws/codebuild/java:openjdk-9
- 构建 docker 镜像并将其推送到 ECR : 构建 : aws/codebuild/docker:17.09.0
我想用通常为 CODEBUILD_RESOLVED_SOURCE_VERSION 的提交 ID 标记 docker 图像。但是,我注意到此变量仅在我紧随源代码之后的第二阶段可用。
我发现最糟糕的解决方法是在第二阶段将此变量写入文件并将该文件包含在作为第三阶段输入的工件中。
有没有更好的方法在我的第三阶段或整个管道中使用它?
我正在使用 codepipeline + jq 的组合。这不是最好的方法,但这是我迄今为止最好的方法。
commit=$(aws codepipeline get-pipeline-state --name PIPELINE_NAME | jq '.stageStates[0].actionStates[0].currentRevision.revisionId' | tr -d '"'))
然后推送带有新标签的docker图像。需要先安装jq,不喜欢jq的可以自行解析response
这个 'may' 是 this other question
的副本您能否将提交 ID 写入位于 CodePipeline 工件中 WAR 文件旁边的文件中?
还有一些相关的想法:
- 可以在 CodePipeline 中将 CodeBuild 配置为具有多个输入
工件,所以我假设
CODEBUILD_RESOLVED_SOURCE_VERSION
是指 主要神器。我不确定如何概括 将 ID 提交到第三个操作(发布到 ECR)因为扇入 (具有不同提交 ID 的多个源)可以同时出现 CodeBuild 操作。 - 按提交 ID 标记意味着多个管道执行可能会生成具有相同标记的图像。理想情况下,我希望每个管道执行都被隔离,这样我就不必担心标签被并发管道执行更改或稍后使用不同的依赖闭包。
我已经设法用 jq 和 sponge 做了一些事情,如这个文件中所示 buildspec.yaml
我在每次提交时修改我的 config.json 文件并将其传递到下一阶段。