Docker镜像构建为AWS CodePipeline步骤

时间:2016-12-16 19:23:34

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

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

S3上带有源代码的新ZIP触发了一个构建代码的管道。没关系。现在,我还要为项目构建一个泊坞窗图像。

第一个问题是您无法混合项目(nodejs)构建和docker构建。没关系,这很有道理。下一个问题是你不能为docker build构建另一个buildspec.yml。您已手动指定构建命令,确定,它可用作解决方法。

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

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

有办法怎么做?

由于

2 个答案:

答案 0 :(得分: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”类型,并激活“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

答案 1 :(得分:1)

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