我觉得好像我已经搜索了整个互联网和之前的问题,并测试了每种组合和排列,以尝试使其正常工作,但我尝试的任何方法都不起作用。我似乎无法找到可靠的指南来遵循此和/或体面的日志记录。
.war 文件的本地 Maven 构建以及将 .war 文件手动上传到 Elastic Beanstalk 工作得非常好。
但我真的不想这样做。
我在指南中尝试过的许多选项最终都使 CodeBuild 流程正常工作,并且显然将输出保存到 S3 - 但当我单击指向 S3 对象的链接时,它不在那里。
这是最新的 buildspec.yml 文件的价值。
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
build:
commands:
- mvn clean
- mvn install
post_build:
commands:
- mv target/MyApp-1.0.war ROOT.war
artifacts:
files:
- ROOT.war
我不确定是否需要 mv 命令,因为当我检查 CodeBuild 日志时,我可以看到这一点;
[INFO] Building war: /codebuild/output/src1021125740/src/target/MyApp-1.0.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
对于接下来要尝试的步骤有什么想法吗?如果我至少可以在 S3 或 CodeArtifact 上生成并访问 war 文件,或者将其直接传递到 CodeDeploy 的下一步,那么我应该能够弄清楚其余的事情。
buildspec.yml 中的工件部分至关重要,因为它指导 CodeBuild 在构建过程完成后将哪些文件上传到 S3。为了确保文件上传到S3中的根路径,您可以在配置中包含discard-paths: yes:
artifacts:
files:
- ROOT.war
discard-paths: yes
此外,为构建阶段定义输出工件(例如 MyBuildArtifact)以跟踪生成的文件也很重要。如果您使用的是独立的 CodeBuild 项目,请确保为其配置了正确的 S3 存储桶名称和文件夹路径,并且向构建角色授予了所需的权限。如果 CodeBuild 是 CodePipeline 的一部分,请确保将这些配置应用于管道的构建阶段,并具有 codepipeline 角色所需的权限。设置完成后,您将在指定的 S3 位置找到工件。