我能够在github和AWS CodePipeline之间设置集成,所以现在我的代码在lambda函数的推送事件之后上传到S3。这很有效。
S3上带有源代码的新ZIP触发了一个构建代码的管道。没关系。现在,我还要为项目构建一个泊坞窗图像。
第一个问题是您无法混合项目(nodejs)构建和docker构建。没关系,这很有道理。下一个问题是你不能为docker build构建另一个buildspec.yml。您已手动指定构建命令,确定,它可用作解决方法。
但是,最大的问题是,或者我缺乏理解,是如何将docker构建作为管道的一部分?第一个构建步骤构建项目,下一个构建步骤构建docker镜像。两个独立的AWS CodeBuild。
问题是管道构建步骤必须在输出上产生一个工件。但是docker build不能生成任何文件,并且看起来docker build之后的最终docker push不被管道服务限定为工件。
有办法怎么做?
由于
答案 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_REGION
,REPO
和IMAGE
,并在AWS ECR上发布图像(但您可以使用您选择的注册表)。它还使用现有的CODEBUILD_BUILD_ID
环境变量来提取图像标记的动态值。推送图像后,它会创建带有图像完整路径的json文件,并将其作为工件发布,供CodePipeline使用。
为此,CodeBuild项目“环境图像”应为“docker”类型,并激活“priviledged”标志。在管道中创建CodeBuild项目时,您还可以指定上面使用buildspec文件的环境变量。
这里有一个关于这个主题的好教程:
答案 1 :(得分:1)
很抱歉给您带来不便。限制较少的是我们的路线图。同时,为了使用CodeBuild操作,您可以使用虚拟文件作为输出工件。