CodeBuild开启artifacts批量构建时pre_build依赖S3前缀无对象报错如何解决
报错原因
当开启CodeBuild批量构建的artifacts功能时,被其他任务依赖的前置任务(这里为pre_build)默认需要输出制品到S3,供后续依赖任务拉取使用。你当前的pre_build对应的buildspec未配置任何artifacts输出规则,执行完成后不会往S3上传任何文件,后续任务拉取依赖制品时就会触发找不到S3对象的报错。关闭artifacts功能时,批量构建不需要处理跨任务制品传递,因此可以正常运行。
解决方法
你可以根据实际需求选择以下任意一种方案:
方案1:给pre_build配置artifacts输出(适合需要将pre_build生成的文件传递给后续任务的场景)
修改pre_build对应的buildspec文件,新增artifacts配置,指定需要传递的文件路径,示例如下:
version: 0.2 phases: install: commands: - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2& - echo This always runs even if the update or install command fails pre_build: commands: - cd ci-cd - mkdir -p build - ls - echo $BUILD_EXPORT_VARIABLE_FILE - chmod u+x export_github_variables.sh - . ./export_github_variables.sh # 新增artifacts配置 artifacts: files: - 'ci-cd/build/**/*' # 可根据实际需求添加其他需要传递的文件 - 'ci-cd/export_github_variables.sh' cache: paths: - 'ci-cd/build/**/*'
方案2:修改依赖类型为顺序执行(适合后续任务不需要使用pre_build生成的任何文件,仅需保证执行顺序的场景)
修改主buildspec的批量构建配置,给依赖pre_build的任务添加dependency-type: SEQUENTIAL配置,指定仅按顺序执行,不拉取前置任务的制品,示例如下:
version: 0.2 artifacts: files: - '**/*' batch: fast-fail: true build-graph: - identifier: pre_build buildspec: ci-cd/application-build/pre_build.yml ignore-failure: false - identifier: build_mysql buildspec: ci-cd/application-build/build_mysql.yml depend-on: - pre_build dependency-type: SEQUENTIAL ignore-failure: false - identifier: build_rabbitmq buildspec: ci-cd/application-build/build_rabbitmq.yml depend-on: - pre_build dependency-type: SEQUENTIAL ignore-failure: false
内容的提问来源于stack exchange,提问作者Bhargav Mg
相关产品推荐
相关产品推荐

