
Как оказалось 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 можно глянуть в предыдущей статье.