AWS CodeBuild

AWS CodeBuild是托管的CI(continuos ingegration)服务,将源代码进行编译、运行测试并打包成可部署的文件。

在本节中我们将创建CodeBuild项目,将代码打包成WAR文件:

progress-diagram-codebuild.png (699×429)

创建S3桶

我们首先要创建一个S3桶,用于存储CodeBuild编译完成后生成的WAR文件。

可以在AWS控制台上进入S3服务,创建桶。或者在Cloud 9中使用命令行直接创建:

aws s3 mb s3://unicorn-build-artifacts-pingfan --region us-east-1  # 桶的名称要作替换,保证名称全世界唯一

image-20220310100408089

创建CodeBuild项目

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

image-20220310100527660

将项目命名为unicorn-web-build

image-20220310100554813

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

  1. Under source select AWS CodeCommit as the source provider and select the unicorn-web-project as the repository. The branch should be main with no Commit ID.

image-20220312095338924

Environment配置下选择Managed image

  • Operating System = Amazon Linux 2
  • Runtime = Standard
  • Image = aws/codebuild/amazonlinux2-x86_64-standard:3.0
  • Image version = Always use the latest image for this runtime version
  • Environment Type = Linux

选择创建新的service role,其名称保持默认:

codebuild-env.png (1640×1858)

这个service role保证了在编译过程中CodeBuild访问其他AWS服务的权限(例如CodeCommit、S3等)


在Buildspec部分,保持默认配置Use a buildspec file(这个选项将使项目根目录下的buildspe.yml文件,我们在后面将会创建它)


在Artifacts部分,选择Amazon S3,选择上一步创建的桶名称。将其命名为unicorn-web-build.zip, 其他选项保持默认,这样编译的结果将会打包成zip文件

image-20220310101124297

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

最后点击Create build project!

image-20220310101208754

创建buildspec.yml文件

现在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

image-20220310101326854

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

  1. Monitor the logs and wait for the build status to complete (this should take no more than 5 minutes)

image-20220310101458704

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

image-20220310115216705

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