AWS CodeBuild是托管的CI(continuos ingegration)服务,将源代码进行编译、运行测试并打包成可部署的文件。
在本节中我们将创建CodeBuild项目,将代码打包成WAR文件:

我们首先要创建一个S3桶,用于存储CodeBuild编译完成后生成的WAR文件。
可以在AWS控制台上进入S3服务,创建桶。或者在Cloud 9中使用命令行直接创建:
aws s3 mb s3://unicorn-build-artifacts-pingfan --region us-east-1 # 桶的名称要作替换,保证名称全世界唯一

切换到AWS控制台,搜索CodeBuild服务,并点击Create Build Project:

将项目命名为unicorn-web-build

添加标签,名为team,值为devops;在source下选AWS CodeCommit, 选择unicorn-web-project做为代码库;将branch切换到main:

在Environment配置下选择Managed image:
选择创建新的service role,其名称保持默认:

这个service role保证了在编译过程中CodeBuild访问其他AWS服务的权限(例如CodeCommit、S3等)
在Buildspec部分,保持默认配置Use a buildspec file(这个选项将使项目根目录下的buildspe.yml文件,我们在后面将会创建它)
在Artifacts部分,选择Amazon S3,选择上一步创建的桶名称。将其命名为unicorn-web-build.zip, 其他选项保持默认,这样编译的结果将会打包成zip文件

最后在日志部分,选择将日志发送到CloudWatch Logs,将Group名称设置为unicorn-build-logs, stream名称设置为webapp。这样我们编译过程中的所有日志都会保存到这里
最后点击Create build project!

现在CodeBuild项目配置完成,我们需要在代码里添加buildspec.yml文件,来告诉CodeBuild如何编译我们的项目。
回到Cloud 9,在项目根目录下创建一个buildspec.yml文件,内容如下:
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
build:
commands:
- echo Build started on `date`
- mvn test
post_build:
commands:
- echo Build completed on `date`
- mvn package
artifacts:
files:
- target/unicorn-web-project.war
discard-paths: no

关于buildspec.yml格式,请参考 https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html
将buildspec.yml提交到CodeCommit:
cd ~/environment/unicorn-web-project
git add *
git commit -m "Adding buildspec.yml file"
git push -u origin main
现在我们进行第一次build的所有准备工作都完成了,进入AWS控制台,在CodeBuild项目下点击Start build

等待项目构建完成,大概要花5分钟,状态会变为Succeeded。

最后到S3目录下,查看生成的WAR文件(包含在zip里)。通过AWS控制台或CLI查看均可:
kongpingfan:~/environment/unicorn-web-project (main) $ aws s3 ls s3://unicorn-build-artifacts-pingfan
2022-03-10 02:19:29 1421 unicorn-web-build.zip
本节的构建过程是通过人工触发的,但至少我们了解了大致的构建流程,后面我们将用CodePipeline来编排它。下一节我们将使用CodeDeploy来将构建好的WAR文件部署到服务器上