CodeBuild除了支持Java,Ruby,Python,Go,Docker等环境的编译外,还可以通过自定义编译环境
来支持更多的语言
编译环境(Build environments)
是一个Docker镜像,里面包括了编译和测试项目代码的所有工具。为了在CodeBuild中使用自定义编译环境,我们需要:
本节将创建一个PHP的编译环境,并在CodeBuild中使用它来完成项目的构建及测试
拉取项目代码:
git clone https://github.com/awslabs/codebuild-images.git
cd codebuild-images
创建CloudFormation stack:
aws cloudformation create-stack \
--stack-name codebuild-php \
--parameters ParameterKey=EnvName,ParameterValue=php \
--template-body file://template.yml > /dev/null && \
aws cloudformation wait stack-create-complete \
--stack-name codebuild-php && \
aws cloudformation describe-stacks \
--stack-name codebuild-php \
--output table \
--query Stacks[0].Outputs
创建完成后,将输出以下两个资源:
下面的Dockerfile包括了PHP构建环境所需要的工具:
FROM php:7.4-apache
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV PATH=$PATH:vendor/bin
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
python-dev \
python3-pip \
libzip-dev \
zlib1g-dev \
&& pip install awscli \
&& docker-php-ext-install zip \
&& curl -o - https://getcomposer.org/composer-stable.phar > /usr/local/bin/composer && chmod 755 /usr/local/bin/composer # curl -o installer "$composer_url" \
# && echo "$composer_checksum *installer" \
&& php installer --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /var/lib/apt/lists/*
接下来构建镜像并push到ECR中。先登录到ECR:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 145197526627.dkr.ecr.us-west-2.amazonaws.com
使用CloudFormation输出的ECR仓库地址(BuildImageRepositoryUri)
作为标签,上传到ECR:
cd php
docker build -t [BuildImageRepositoryUri] .
docker push [BuildImageRepositoryUri]
之前克隆的仓库是一个简单的php应用,它将罗马数字转换为阿拉伯数字,并包括了一个单元测试文件:
它还有一个buildspec.yaml
文件,指定了CodeBuild构建项目时要执行的命令:
version: 0.1
phases:
pre_build:
commands:
- composer install
build:
commands:
- phpunit tests
build spec指定了CodeBuild在编译过程中运行两个命令:
composer install
:提前安装所需的依赖,比如PHPUnit
phpunit tests
在构建过程中,运行单元测试
我们把整个项目上传到CodeCommit仓库中:
cd sample
git init
# Add and commit the sample files to the repository
git add .
git commit -m "Initial commit"
# Configure the git remote and push the sample to it.
git remote add origin [SourceCodeRepositoryCloneUrl]
git push origin master
现在我们就可以创建一个CodeBuild的项目来开启构建了
在这一部分,我们将配置CodeBuild来使用我们自定义的构建环境。
在控制台上进入CodeBuild服务,创建一个新的项目:
在Source Provider部分,选择codecommit,并选择之前创建的codebuild-sample-php仓库:
在 Environment image部分,选择Custom image
,选择codebuild/php
仓库,版本选择latest
:
在 Build specification部分, 选择 Use the buildspec.yml,既codecommit仓库根目录下的buildspec.yaml文件。在 Artifacts type部分选择 No artifacts:
最后点击Create Build Project
。
创建完成后,点击Start Build
:
在控制台中能看到每一步的结果:
通过custom build environments
, CodeBuild可以支持更多的编译语言和运行环境