是否可以使用 Node.js 库传输 Cloud Build 日志?

问题描述 投票:0回答:1

一些背景:我们的云构建流程依赖于手动触发器和大约 8 个

substitutions
来自定义部署到各种 Firebase 项目、托管站点和预览通道。之前我们使用 bash 脚本和
gcloud
来自动选择这些替换选项、触发器的“更新”(通过
gcloud beta builds triggers import
:我们的需求要求我们使用单个触发器,这是一个很长的故事),以及触发器“运行”。

这个 bash 脚本很难使用和改进,并且通过导入运行的恶作剧实际上导致了一些错误的部署,从而导致了各种混乱:不太好。

但是,最近我找到了一种使用 Cloud Build 的 Node.js 库来传递

substitution
变量作为手动触发操作的一部分的方法(
runTrigger
以及作为请求的一部分传递的 subs)!

问题: 因此,我将构建实用程序转换为 Node,这很棒,但据我所知,没有一种本机方法可以从控制台中正在运行的构建中生成日志(除非使用

 exec
,但这感觉很hacky)。

我错过了什么吗?或者我应该查看其中一个

logging
库?

我已尽力扫描 Google 的文档和 API(Cloud Build RESTNode 客户端库等),但无济于事。

node.js google-api google-cloud-build
1个回答
0
投票

近两年后,我想我已经弄清楚如何“开始”做到这一点。感谢 this answer 演示了如何通过 gcloud 使用 API,我能够使用 Logging API 的 Node 包装器拼凑出类似的东西(仅供参考,这依赖于应用程序默认的身份验证):

const { Logging } = require('@google-cloud/logging');

const projectId = '[PROJECT_ID]';
const buildId = '[BUILD_ID]';

const logging = new Logging({ projectId });

logging
  .tailEntries({
    resourceNames: [`projects/${projectId}`],
    log: 'cloudbuild',
    filter: `resource.labels.build_id="${buildId}"`
  })
  .on('data', (response) => {
    response.entries.forEach((entry) => console.log(entry.data));
  });

这使用日志记录 API 的 

tailEntries

 方法。 
当然 对此还有待改进;第一个也是显而易见的问题是日志不一定按顺序排列(更多内容请参阅与日志流相关的文档,其中也提供了与上面类似的示例)。然而,很高兴知道这是可能的。

© www.soinside.com 2019 - 2024. All rights reserved.