【问题标题】:CommitID as a variable throughout CodePipeline - AWSCommitID 作为整个 CodePipeline 中的变量 - AWS
【发布时间】:2019-05-05 18:57:15
【问题描述】:

我有一个创建 docker 映像并将其推送到 ECR 的管道。由于我想使用 AWS 提供的构建环境,因此我使用了 2 个构建阶段。

流水线共有3个阶段

  1. 从 GitHub 获取源代码:Source
  2. 安装依赖项并创建 .war 文件:构建:aws/codebuild/java:openjdk-9
  3. 构建 docker 镜像并将其推送到 ECR:构建:aws/codebuild/docker:17.09.0

我想用通常是 CODEBUILD_RESOLVED_SOURCE_VERSION 的提交 ID 标记 docker 图像。但是,我注意到这个变量仅在我的第二阶段可用,即紧随源代码之后。

我发现最坏的情况是在第二阶段将此变量写入文件,并将该文件包含在作为第三阶段输入的工件中。

有没有更好的方法在我的第三阶段或整个管道中使用它?

【问题讨论】:

  • 你在这方面有什么进展吗?我有同样的问题,我唯一能想到的就是你提到的文件路径。

标签: amazon-web-services docker aws-codepipeline aws-codebuild


【解决方案1】:

我正在使用 codepipeline + jq 的组合。这不是最好的方法,但它是我迄今为止最好的方法。

commit=$(aws codepipeline get-pipeline-state --name PIPELINE_NAME | jq '.stageStates[0].actionStates[0].currentRevision.revisionId' | tr -d '"'))

然后推送带有新标签的 docker 镜像。需要先安装jq,不喜欢jq的可以自己解析响应。

此“可能”与this other question 重复

【讨论】:

  • 一个警告:如果您从不同阶段执行此代码(即不是stageStates[0],如果触发了更新的管道执行,您可能会观察到错误的提交 ID(或根本没有)并进入第一阶段。
【解决方案2】:

您能否将提交 ID 写入 CodePipeline 工件中的 WAR 文件旁边的文件中?

还有一些相关的想法:

  • 可以在 CodePipeline 中将 CodeBuild 配置为具有多个输入 工件,所以我假设CODEBUILD_RESOLVED_SOURCE_VERSION 指的是 主要神器。我不知道如何概括 将 ID 提交到第三个操作(发布到 ECR),因为扇入 (具有不同提交 id 的多个来源)可以同时发生 CodeBuild 操作。
  • 按提交 ID 标记意味着多个管道执行可能会生成具有相同标记的图像。理想情况下,我希望每个管道执行都是隔离的,这样我就不必担心并发管道执行会更改标签,或者以后使用不同的依赖闭包。

【讨论】:

    【解决方案3】:

    我已经设法用 jq 和海绵做一些事情,如这个文件中所示 buildspec.yaml

    我在每次提交时修改我的 config.json 文件并将其传递到下一阶段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多