Docker镜像构build为AWS CodePipeline步骤

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

在S3上有一个新的源代码的ZIP触发一个pipe道,它build立的代码。 没关系。 现在我想为这个项目build立一个docker镜像。

第一个问题是你不能混合项目(nodejs)构build和docker构build。 这很好,很有意义。 下一个问题是你不能有docker版本的另一个buildspec.yml。 您已经手动指定了构build命令,可以,这是一个解决方法。

但是,最大的问题或缺乏我的理解,是如何把dockerbuild设作为pipe道的一部分? 首先构build项目,下一步构buildDocker镜像。 两个独立的AWS CodeBuild。

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

有没有办法如何做到这一点?

谢谢

有点晚了,但希望对某人有帮助。 您应该将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项目需要很less的参数 – AWS_REGIONREPOIMAGE并在AWS ECR上发布图像(但您可以使用您所select的registry)。 它还使用现有的CODEBUILD_BUILD_ID环境variables为图像标签提取dynamic值。 在图像被推入后,它会创build带有图像完整path的json文件,并将其作为CodePipeline要使用的工件发布。

为此,CodeBuild项目“环境图像”应该是“docker”types,“priviledged”标志被激活。 在pipe道中创buildCodeBuild项目时,还可以指定使用上述buildspec文件的环境variables。

这里有一个很好的教程:

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

不便之处,敬请原谅。 减less限制是我们的路线图。 同时,为了使用CodeBuild动作,可以使用一个虚拟文件作为输出工件。