如何查看我最近完成的 Codebuild 构建项目的状态?

How do I check the status of my most recently completed Codebuild build projects?

如何使用 CLI 检查我最近的 AWS Codebuild 构建项目的状态?我看到你可以 view the build details, but it requires a specific build-id, and the summarized build information 没有提供任何关于哪个构建阶段与控制台中显示的状态相关的详细信息。

您可以分两步解决问题:

  1. 使用 list-builds-for-project
  2. 获取最新构建的 ID
  3. Select batch-get-builds
  4. 输出的相关字段

假设您安装了 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

我可能重新发明或过度设计了轮子,但写了一个小节点程序来做这可能对你有用。

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();