为啥 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”?
Posted
技术标签:
【中文标题】为啥 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”?【英文标题】:Why is AWS CodePipeline complaining about 'Dockerfile' and 'Dockerrun.aws.json'?为什么 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”? 【发布时间】:2021-12-12 06:45:49 【问题描述】:我正在为我的应用程序创建 CodePipeline,但 AWS ElasticBeanstalk 的部署过程失败并出现以下错误:
实例部署:“Dockerfile”和“Dockerrun.aws.json”都是 您的源包中缺少。至少包括其中之一。这 部署失败。
完整的消息错误是:
部署已完成,但出现错误:在中止部署期间, 某些实例可能已经部署了新的应用程序版本。到 确保所有实例都运行相同的版本,重新部署 适当的应用程序版本。未能部署应用程序。 对实例 ID 的命令执行不成功 'i-0b8823de2e7376c81'。中止操作。 [实例: i-0b8823de2e7376c81] 实例上的命令失败。返回码:1 输出:引擎执行遇到错误.. 实例 部署失败。有关详细信息,请参阅“eb-engine.log”。实例 部署:“Dockerfile”和“Dockerrun.aws.json”都缺失 你的源包。至少包括其中之一。部署 失败了。
我的环境有 3 个容器,为了部署这个环境,我使用 docker-compose-qa.yml 文件,在 AWS CodeBuild 中我将此文件定义为神器,如下图:
artifacts:
files:
- 'docker-compose-qa.yml'
docker-compose-qa.yml:
version: '3.8'
services:
sitr-api:
image: $ secrets.SITR_API_QA_URI_DOCKER_IMG
container_name: sitr-api-qa
environment:
- ASPNETCORE_ENVIRONMENT=QA
ports:
- "9901:80"
volumes:
- "./Host-Logs:/app/App_Data/Logs"
sitr-app:
image: $ secrets.SITR_APP_QA_URI_DOCKER_IMG
container_name: sitr-app-qa
ports:
- "9902:80"
sitr-nginx:
image: $ secrets.SITR_NGINX_QA_URI_DOCKER_IMG
container_name: sitr-nginx-qa
depends_on:
- sitr-app
- sitr-api
ports:
- "80:80"
eb-engine.log 错误:
2021/10/26 22:07:27.977004 [ERROR] 执行过程中发生错误 命令 [app-deploy] - [Docker 特定构建应用程序]。停止 运行命令。错误:Dockerfile 和 Dockerrun.aws.json 都是 丢失,中止部署
2021/10/26 22:07:27.977008 [INFO] 执行清理逻辑 2021/10/26 22:07:27.977098 [INFO] CommandService 响应: "status":"FAILURE","api_version":"1.0","results":["status":"FAILURE","msg":"Engine 执行遇到了 错误。","returncode":1,"events":["msg":"实例部署:两者 您的源代码中缺少“Dockerfile”和“Dockerrun.aws.json” 捆。至少包括其中之一。部署 失败。","timestamp":1635286047,"severity":"ERROR","msg":"Instance 部署失败。有关详细信息,请参阅 'eb-engine.log'.","timestamp":1635286047,"severity":"ERROR"]]
我的 CodeBuild 只需构建一个 dotnet 应用程序、angular 应用程序 并为这两个应用程序构建 3 个 docker 容器和 nginx。
如果我手动运行我的 CodeBuild,然后在 AWS EB 中选择我的 docker-compose-qa.yml 文件,则发布已成功应用。
我检查了 AWS S3 存储桶,文件被压缩到工件的文件夹中。
问题是:
为什么 Pipeline 抱怨不存在 'Dockerfile' 和 'Dockerrun.aws.json' 文件?如何指定它使用 docker-compose-qa.yml 文件?
【问题讨论】:
遗憾的是,您的问题缺乏细节。您的 EB 平台到底是什么?您是如何定义 CodeBuild 的。不确定 CodeDeploy 与此有什么关系? @Marcin my CodeBuild 只需构建一个 dotnet 应用程序、angular 应用程序 并构建 3 个 docker 容器 适用于应用程序和 nginx。我更详细地编辑了问题,但如果我需要完整的 CodeBuild,我可以在问题中发布。 您在 AWS CodeDeploy 中写道“我正在将此文件定义为工件,如下所示”?我想应该是 CodeBuild?此外,您必须将docker-compose-qa.yml
重命名为 docker-compose.yml
。
应该叫docker-compose.yml
,而不是docker-compose-qa.yml
。
@Marcin 它刚刚完成,它工作是的,它只是文件的名称!如果您可以发布作为答案,我在这里接受! :)
【参考方案1】:
基于 cmets。
问题是由文件名错误引起的。它应该被称为docker-compose.yml
,而不是docker-compose-qa.yml
。重命名文件解决了这个问题。
【讨论】:
以上是关于为啥 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”?的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodeBuild + CodePipeline:“找不到匹配的工件路径”
AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk
[AWS DA] AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy