【发布时间】:2020-05-23 21:56:16
【问题描述】:
如何使用 CLI 检查我最近的 AWS Codebuild 构建项目的状态?我看到你可以view the build details,但它需要一个特定的 build-id,summarized build information 没有提供任何关于哪个构建阶段与控制台中显示的状态相关的任何细节。
【问题讨论】:
标签: jq aws-codebuild
如何使用 CLI 检查我最近的 AWS Codebuild 构建项目的状态?我看到你可以view the build details,但它需要一个特定的 build-id,summarized build information 没有提供任何关于哪个构建阶段与控制台中显示的状态相关的任何细节。
【问题讨论】:
标签: jq aws-codebuild
我可能对轮子进行了重新发明或过度设计,但编写了一个小节点程序来执行此操作,这可能对您有用。
const { exec } = require("child_process");
const { promisify } = require("util");
const asyncExec = promisify(exec);
const getLatestBuildId = async () => {
const listBuildsCommand = "aws codebuild list-builds";
const { stdout } = await asyncExec(listBuildsCommand);
const { ids } = JSON.parse(stdout);
const [latestBuildId] = ids;
return latestBuildId;
};
const getBuildStatus = async (latestBuildId) => {
const batchGetBuildsCommand = `aws codebuild batch-get-builds --ids ${latestBuildId}`;
const { stdout } = await asyncExec(batchGetBuildsCommand);
const { builds } = JSON.parse(stdout);
const [latestBuild] = builds;
const { id, currentPhase, buildStatus, startTime, endTime } = latestBuild;
return {
id,
currentPhase,
buildStatus,
start: new Date(startTime * 1000).toLocaleTimeString(),
end: new Date(endTime * 1000).toLocaleTimeString(),
};
};
const reportBuildStatus = async () => {
const latestBuildId = await getLatestBuildId();
const latestBuild = await getBuildStatus(latestBuildId);
console.log(latestBuild);
};
reportBuildStatus();
【讨论】:
您可以分两步解决问题:
list-builds-for-project获取最新版本的ID
batch-get-builds的输出中选择相关字段
假设您已安装 aws CLI 和 jq,并且正在接收 JSON 格式的 CLI 结果:
id=$(aws codebuild list-builds-for-project --project-name myproject | jq -r '.ids[0]')
默认排序顺序将最近完成的构建置于列表顶部。然后使用上一步中的$id:
aws codebuild batch-get-builds --ids "$id" | jq '.builds[].phases[] | select (.phaseType=="BUILD") | .phaseStatus'
有关 jq 语法的讨论,请参阅 select objects based on value of variable in object using jq。
【讨论】:
jq '.ids[0]'(把调用保存到head)。
-r 向jq 询问原始输出来删除对tr 的调用
jq表达式jq -r '.build.id'从start-build获取构建ID