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文件部署到服务器上