【问题标题】:Docker image build as AWS CodePipeline stepDocker 映像构建为 AWS CodePipeline 步骤
【发布时间】:2017-05-02 15:35:54
【问题描述】:

我能够设置 github 和 AWS CodePipeline 之间的集成,所以现在我的代码在 lambda 函数的推送事件之后上传到 S3。效果很好。

在 S3 上包含源代码的新 ZIP 会触发构建代码的管道。没关系。现在我还想为该项目构建一个 docker 映像。

第一个问题是你不能混合一个项目(nodejs)构建和docker构建。很好,有道理。下一个问题是您不能为 docker 构建提供另一个 buildspec.yml。您已经手动指定了构建命令,好的,这是一种解决方法。

最大的问题,或者说我不理解,是如何将 docker build 作为管道的一部分?第一个构建步骤构建项目,下一个构建步骤构建 docker 镜像。两个独立的 AWS CodeBuild。

问题是管道构建步骤必须在输出上产生工件。但是 docker build 不会生成任何文件,并且看起来 docker build 之后的最终 docker push 没有被管道服务限定为工件。

有什么办法吗?

谢谢

【问题讨论】:

  • 你看到这篇文章了吗?这周我将对此进行测试,但是从文章中您将使用最后一步来推送您的 docker 映像。希望这可以帮助。 docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html
  • 它作为一个独立的构建工作,没关系。但是,如果您将其作为 CodePipeline 的一部分等待,则不能,因为 docker 映像不会产生任何输出工件。我想我只是把一些东西作为输出,丑陋的解决方法,但我还没有找到任何其他方法。
  • 您总是可以将最终包的 zip 文件保存为工件,这是离线构建 docker 映像的好方法。那是我的计划。
  • 你的意思是“docker save theimage:latest > the-image-latest.tar”?是的,可能有用。
  • 是的,这就是我的计划。也将有助于保持修订离线。快乐编码

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


【解决方案1】:

有点晚了,但希望对某人有所帮助。您应该将 docker 映像作为 post_build 阶段命令的一部分发布。这是一个 buildspec.yml 的示例:

version: 0.1

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --region $AWS_REGION)
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE .
      - "docker tag $IMAGE $REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}"
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - "docker push $REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}"
      - "echo {\\\"image\\\":\\\"$REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}\\\"} > image.json"
artifacts:
  files:
    - 'image.json'

如您所见,CodeBuild 项目需要很少的参数 - AWS_REGIONREPOIMAGE 并在 AWS ECR 上发布映像(但您可以使用您选择的注册表)。它还使用现有的CODEBUILD_BUILD_ID 环境变量来提取图像标签的动态值。推送图片后,它会创建包含图片完整路径的 json 文件,并将其发布为工件供 CodePipeline 使用。

为此,CodeBuild 项目“环境映像”的类型应为“docker”类型,并激活“priviledged”标志。在您的管道中创建 CodeBuild 项目时,您还可以指定使用上述 buildspec 文件的环境变量。

这里有一个关于这个主题的很好的教程:

http://queirozf.com/entries/using-aws-codepipeline-to-automatically-build-and-deploy-your-app-stored-on-github-as-a-docker-based-beanstalk-application

【讨论】:

  • 请注意,如果构建阶段的任何命令失败,post_build 阶段的命令仍将执行。见build phase transition
【解决方案2】:

很抱歉给您带来不便。减少限制是我们的路线图。同时,为了使用 CodeBuild 动作,您可以使用一个虚拟文件作为输出工件。

【讨论】:

  • 还是这样吗?
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2017-02-11
相关资源
最近更新 更多