4

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

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

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

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

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

有没有办法做到这一点?

谢谢

4

2 回答 2

4

有点晚了,但希望对某人有所帮助。您应该将 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”类型,并激活“特权”标志。在管道中创建 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

于 2017-03-15T16:48:40.137 回答
1

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

于 2016-12-22T00:06:24.943 回答