
Как оказалось CodeBuild не имеет встроенной инкрементной переменной для номера сборки, как в том же Jenkins‘е к примеру.

Решение было найдено на medium.com
Для добавления номера сборки понадобятся следующие сервисы:
- AWS SSM (Systems Manager Parameter Store)
- AWS Lambda
- AWS CloudWatch
- AWS IAM
Создаем Parameter Store
Переходим в сервис AWS Systems Manager —> Parameter Store
Создаем параметр с именем «/build-number/artem-test»

Задаем параметры:
- Type: String
- Value: 1

Сохраняем наш «Parameter store»
Переходим в AIM -> Policy
Создаем новую Policy с именем «codebuild-buildnumber-ssm» для «CodeBild» проекта со следующим содержимым:
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:us-east-1:XXXXXXXXXXXX:parameter/build-number/*"
}
]
XXXXXXXXXXXX — замените на свой AWS ID. Так же проверьте свой регион.
Переходим в AIM -> Roles и находим роль CodeBuild для нашего проекта и делаем ему «Attach» созданного Policy.
Создаем Lambda функцию.
Переходим в сервис Lambda -> «Create function»
Задаем имя «update-codebuild-build-number» и выбираем «Node.js 8.10»

Вставляем следующий код:
const AWS = require('aws-sdk');
const ssm = new AWS.SSM();
exports.handler = async (event) => {
const parameterName = '/build-number/' + event['detail']['project-name'];
const getBuildNumberParams = {
Name: parameterName
};
const getBuildNumberResponse = await ssm.getParameter(getBuildNumberParams).promise();
const buildNumber = parseInt(getBuildNumberResponse.Parameter.Value);
const setBuildNumberParams = {
Name: parameterName,
Type: 'String',
Value: (buildNumber + 1).toString(),
Overwrite: true
};
const setBuildNumberResponse = await ssm.putParameter(setBuildNumberParams).promise();
};
Сохраняем изменения.
Переходим в AIM -> Policy
Создаем новую Policy с именем «lambda-buildnumber-ssm» для «Lambda» проекта со следующим содержимым:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:PutParameter"
],
"Resource": "arn:aws:ssm:us-east-1:XXXXXXXXXXXX:parameter/build-number/*"
}
]
}
XXXXXXXXXXXX — замените на свой AWS ID. Так же проверьте свой регион.
Переходим в AIM -> Roles и находим роль Lambda для нашего проекта и делаем ему «Attach» созданного Policy.
Создаем правило CloudWatch
Переходим в сервис CloudWatch -> «Create rule» -> «Event Pattern»
Указываем сервис — CodeBuild
Указываем Event Type -> «CodeBuild Build State Change»

Указываем «Specific state(s)» и выбираем состояния «SUCCESS» и «FAILED»

Переходим к «Targets» и выбираем в «Function» «update-codebuild-build-number»
Подтверждаем «Create rule», задаем имя «update-codebuild-build-number» и сохраняем.
CodeBuild
Редактируем «buildspec.yml»
Добавляем в блок «parameter-store» переменную для хранения номера сборки.
env:
parameter-store:
BUILD_NUMBER: "/build-number/artem-test"
Теперь в сборках можно использовать переменную «BUILD_NUMBER» котора будет инкрементится.

Пример простой работы с CodeCommit и Codebuild можно глянуть в предыдущей статье.