【问题标题】:How do I check the status of my most recently completed Codebuild build projects?如何检查我最近完成的 Codebuild 构建项目的状态?
【发布时间】:2020-05-23 21:56:16
【问题描述】:

如何使用 CLI 检查我最近的 AWS Codebuild 构建项目的状态?我看到你可以view the build details,但它需要一个特定的 build-id,summarized build information 没有提供任何关于哪个构建阶段与控制台中显示的状态相关的任何细节。

【问题讨论】:

    标签: jq aws-codebuild


    【解决方案1】:

    我可能对轮子进行了重新发明或过度设计,但编写了一个小节点程序来执行此操作,这可能对您有用。

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

    【讨论】:

      【解决方案2】:

      您可以分两步解决问题:

      1. 使用list-builds-for-project获取最新版本的ID
      2. 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)。
      • 好主意,@peak;我还可以通过使用-rjq 询问原始输出来删除对tr 的调用
      • 你也可以使用jq表达式jq -r '.build.id'start-build获取构建ID
      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2018-09-10
      相关资源
      最近更新 更多