一些背景:我们的云构建流程依赖于手动触发器和大约 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 REST、Node 客户端库等),但无济于事。
近两年后,我想我已经弄清楚如何“开始”做到这一点。感谢 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 的
方法。当然 对此还有待改进;第一个也是显而易见的问题是日志不一定按顺序排列(更多内容请参阅与日志流相关的文档,其中也提供了与上面类似的示例)。然而,很高兴知道这是可能的。