CodePipeline 触发器上的 AWS CodeBuild Badge 更新
AWS CodeBuild Badge update on CodePipeline trigger
我创建了一个包含构建标志的 AWS CodeBuild 项目,当我手动触发构建时,一切正常(即更新了标志)。我现在添加了一个 CodePipeline 项目,该项目基于 GitHub 签入触发构建。我可以在 CodeBuild 项目历史记录中看到它经过,但徽章似乎没有更新?
- 手动构建 - 构建失败 - 徽章已更新
- 管道构建 - 构建成功 - 徽章未更新
- 手动构建 - 构建成功 - 徽章已更新
这是故意的吗?难道我做错了什么?我是否必须同时破解另一个 Lambda 脚本才能完成如此简单的事情!?!?
CodePipeline 构建不支持此功能,因为当 CodePipeline 将源代码传递给 CodeBuild 时,它不包含 .git 目录。
要评论 dstrants 的回答,请求 URL 与项目相关,而不是与个人构建相关。请求 URL 确实需要指定分支,但是(默认为 master
)
我已经编写了构建脚本作为解决方法。在 buildspec.yml 中,我设置了可执行文件,然后 运行 脚本..
build:
commands:
- echo Build started on `date`
- chmod +x aws_scripts/build.sh
- aws_scripts/build.sh mvn -B package
脚本本身从母版 pom.xml 中提取详细信息,将徽章设置为 "pending",调用构建命令,处理结果。
#!/bin/bash
mkdir badges
# Artifact
artifact=$( xmllint --xpath "/*[local-name() = 'project']/*[local-name() = 'artifactId']/text()" pom.xml )
# Version
version=$( xmllint --xpath "/*[local-name() = 'project']/*[local-name() = 'version']/text()" pom.xml )
version=${version/-/--} # Hyphen escaping required by shields.io
# Update badges pre-build
echo "https://img.shields.io/badge/Build-In_progress-orange.svg"
curl -s "https://img.shields.io/badge/Build-In_progress-orange.svg" > badges/build.svg
echo "https://img.shields.io/badge/Version-$version-green.svg"
curl -s "https://img.shields.io/badge/Version-$version-green.svg" > badges/version.svg
echo "https://img.shields.io/badge/Unit_Tests-Pending-orange.svg"
curl -s "https://img.shields.io/badge/Unit_Tests-Pending-orange.svg" > badges/unit-test.svg
# Sync with S3
aws s3 cp badges s3://endeavour-codebuild/badges/${artifact}/ --recursive --acl public-read
# Build
{ #try
eval $* &&
buildresult=0
} || { #catch
buildresult=1
}
# Build
if [ "$buildresult" -gt "0" ] ; then
badge_status=failing
badge_colour=red
else
badge_status=passing
badge_colour=green
fi
echo "https://img.shields.io/badge/Build-$badge_status-$badge_colour.svg"
curl -s "https://img.shields.io/badge/Build-$badge_status-$badge_colour.svg" > badges/build.svg
# Unit tests
failures=$( xmllint --xpath 'string(//testsuite/@failures) + string(//testsuite/@errors)' API/target/surefire-reports/TEST-*.xml )
if [ "$failures" -gt "0" ] ; then
badge_status=failing
badge_colour=red
else
badge_status=passing
badge_colour=green
fi
echo "Generating badge 'https://img.shields.io/badge/Unit_Tests-$badge_status-$badge_colour.svg'"
curl -s "https://img.shields.io/badge/Unit_Tests-$badge_status-$badge_colour.svg" > badges/unit-test.svg
# Sync with S3
aws s3 cp badges s3://endeavour-codebuild/badges/${artifact}/ --recursive --acl public-read
exit ${buildresult}
我创建了这个存储库:https://github.com/unfor19/aws-build-badges
只需几个步骤,您就可以轻松获得 CodeBuild 和 CodePipeline 的构建徽章。徽章由 Lambda 函数创建,运行 的时间很短(不到 200 毫秒,192MB)。
我创建了一个包含构建标志的 AWS CodeBuild 项目,当我手动触发构建时,一切正常(即更新了标志)。我现在添加了一个 CodePipeline 项目,该项目基于 GitHub 签入触发构建。我可以在 CodeBuild 项目历史记录中看到它经过,但徽章似乎没有更新?
- 手动构建 - 构建失败 - 徽章已更新
- 管道构建 - 构建成功 - 徽章未更新
- 手动构建 - 构建成功 - 徽章已更新
这是故意的吗?难道我做错了什么?我是否必须同时破解另一个 Lambda 脚本才能完成如此简单的事情!?!?
CodePipeline 构建不支持此功能,因为当 CodePipeline 将源代码传递给 CodeBuild 时,它不包含 .git 目录。
要评论 dstrants 的回答,请求 URL 与项目相关,而不是与个人构建相关。请求 URL 确实需要指定分支,但是(默认为 master
)
我已经编写了构建脚本作为解决方法。在 buildspec.yml 中,我设置了可执行文件,然后 运行 脚本..
build:
commands:
- echo Build started on `date`
- chmod +x aws_scripts/build.sh
- aws_scripts/build.sh mvn -B package
脚本本身从母版 pom.xml 中提取详细信息,将徽章设置为 "pending",调用构建命令,处理结果。
#!/bin/bash
mkdir badges
# Artifact
artifact=$( xmllint --xpath "/*[local-name() = 'project']/*[local-name() = 'artifactId']/text()" pom.xml )
# Version
version=$( xmllint --xpath "/*[local-name() = 'project']/*[local-name() = 'version']/text()" pom.xml )
version=${version/-/--} # Hyphen escaping required by shields.io
# Update badges pre-build
echo "https://img.shields.io/badge/Build-In_progress-orange.svg"
curl -s "https://img.shields.io/badge/Build-In_progress-orange.svg" > badges/build.svg
echo "https://img.shields.io/badge/Version-$version-green.svg"
curl -s "https://img.shields.io/badge/Version-$version-green.svg" > badges/version.svg
echo "https://img.shields.io/badge/Unit_Tests-Pending-orange.svg"
curl -s "https://img.shields.io/badge/Unit_Tests-Pending-orange.svg" > badges/unit-test.svg
# Sync with S3
aws s3 cp badges s3://endeavour-codebuild/badges/${artifact}/ --recursive --acl public-read
# Build
{ #try
eval $* &&
buildresult=0
} || { #catch
buildresult=1
}
# Build
if [ "$buildresult" -gt "0" ] ; then
badge_status=failing
badge_colour=red
else
badge_status=passing
badge_colour=green
fi
echo "https://img.shields.io/badge/Build-$badge_status-$badge_colour.svg"
curl -s "https://img.shields.io/badge/Build-$badge_status-$badge_colour.svg" > badges/build.svg
# Unit tests
failures=$( xmllint --xpath 'string(//testsuite/@failures) + string(//testsuite/@errors)' API/target/surefire-reports/TEST-*.xml )
if [ "$failures" -gt "0" ] ; then
badge_status=failing
badge_colour=red
else
badge_status=passing
badge_colour=green
fi
echo "Generating badge 'https://img.shields.io/badge/Unit_Tests-$badge_status-$badge_colour.svg'"
curl -s "https://img.shields.io/badge/Unit_Tests-$badge_status-$badge_colour.svg" > badges/unit-test.svg
# Sync with S3
aws s3 cp badges s3://endeavour-codebuild/badges/${artifact}/ --recursive --acl public-read
exit ${buildresult}
我创建了这个存储库:https://github.com/unfor19/aws-build-badges
只需几个步骤,您就可以轻松获得 CodeBuild 和 CodePipeline 的构建徽章。徽章由 Lambda 函数创建,运行 的时间很短(不到 200 毫秒,192MB)。