亚马逊AWS官方博客

AWS CodeBuild 将提供本地构建支持

今天,我们很高兴宣布 AWS CodeBuild 将提供本地构建支持。

AWS CodeBuild 是完全托管的构建服务。没有需要预置和扩展的服务器,或需要安装、配置和操作的软件。您只需指定您的源代码位置并选择构建设置,CodeBuild 就会通过运行构建脚本,对您的代码进行编译、测试和打包。

在本博文中,我将向您演示如何在本地设置 CodeBuild 来构建并测试示例 Java 应用程序。

通过在本地计算机上构建应用程序,您可以:

  • 在本地测试 buildspec 文件的完整性和内容。
  • 提交之前,在本地测试并构建应用程序。
  • 快速识别并修复本地开发环境中的错误。

先决条件

在这篇博文中,我将使用 AWS Cloud9 IDE 作为开发环境。

如果您要将 AWS Cloud9 用作 IDE,请遵循“AWS Cloud9 用户指南”中的快速设置步骤

AWS Cloud9 IDE 中已安装了 DockerGit。如果您打算使用笔记本电脑或台式机作为开发环境,请先安装 Docker 和 Git。

在本地构建 CodeBuild 映像的步骤

运行 git clone https://github.com/aws/aws-codebuild-docker-images.git,将此存储库下载到本地计算机。

$ git clone https://github.com/aws/aws-codebuild-docker-images.git

我们来为 JDK 8 环境构建一个本地 CodeBuild 映像。JDK 8 的 Dockerfile 位于 /aws-codebuild-docker-images/ubuntu/java/openjdk-8

编辑 Dockerfile 删除最后一行 ENTRYPOINT [“dockerd-entrypoint.sh”],并保存该文件。

运行 cd ubuntu/java/openjdk-8 以更改本地工作区中的目录。

运行 docker build -t aws/codebuild/java:openjdk-8 以在本地构建 Docker 映像。运行完该命令需要几分钟的时间。

$ cd aws-codebuild-docker-images
$ cd ubuntu/java/openjdk-8
$ docker build -t aws/codebuild/java:openjdk-8 .

设置 CodeBuild 本地代理的步骤

运行以下 Docker pull 命令,下载本地 CodeBuild 代理。

$ docker pull amazon/aws-codebuild-local:latest --disable-content-trust=false

现在,您的计算机上已经具有本地代理映像,并可以运行本地构建了。

运行以下 git 命令下载示例 Java 项目。

$ git clone https://github.com/karthiksambandam/sample-web-app.git

使用本地代理构建示例项目的步骤

我们来使用本地代理构建示例 Java 项目。

执行以下 Docker 命令,运行本地代理并构建您之前克隆的示例 Web 应用程序存储库。

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=aws/codebuild/java:openjdk-8" -e "ARTIFACTS=/home/ec2-user/environment/artifacts" -e "SOURCE=/home/ec2-user/environment/sample-web-app" amazon/aws-codebuild-local

注意:我们需要提供三个环境变量,即 IMAGE_NAME、SOURCE 和 ARTIFACTS。

IMAGE_NAME:构建环境映像的名称。

SOURCE:源代码目录的绝对路径。

ARTIFACTS:工件输出文件夹的绝对路径。

如果您在其他操作系统上运行,绝对路径可能会有所不同:

Linux:/home/user/…
MacOS:/Users/user/…

当您运行示例项目时,会出现运行时错误,提示 YAML 文件不存在。这是因为示例 Web 项目中未包含 buildspec.yml 文件。AWS CodeBuild 需要 buildspec.yml 来运行构建。有关 buildspec.yml 的更多信息,请参阅“AWS CodeBuild 用户指南”中的构建规范示例

我们来将 buildspec.yml 文件及以下内容添加到 sample-web-app 文件夹,然后重新构建项目。

version: 0.2

phases:
  build:
    commands:
      - echo Build started on `date`
      - mvn install

artifacts:
  files:
    - target/javawebdemo.war

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=aws/codebuild/java:openjdk-8" -e "ARTIFACTS=/home/ec2-user/environment/artifacts" -e "SOURCE=/home/ec2-user/environment/sample-web-app" amazon/aws-codebuild-local

现在,您应该可以成功构建了。成功执行后,在“/artifacts”文件夹中查看构建的最终 artifacts.zip 文件并进行验证。

总结:

在这篇博文中,我向您演示了如何快速设置 CodeBuild 本地代理,以便从本地台式机或笔记本电脑上直接构建项目。如您所见,本地构建可以帮助您快速识别和修复错误,从而提高开发人员的工作效率。