Google cloud platform 将gcloud命令的输出重定向到云构建中的文件

Google cloud platform 将gcloud命令的输出重定向到云构建中的文件,google-cloud-platform,google-cloud-build,Google Cloud Platform,Google Cloud Build,我正在使用cloudbuild.yml文件 我试图从云构建内部获取构建输出,并将其推送到一个文件中。我的步骤是这样的: - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' args: ['gcloud', 'builds', 'log', '$BUILD_ID', '>buildlog.log'] id: 'fetch-build-log' 这会引发一个错误,说error:(gcloud.builds.log)无法识别的

我正在使用
cloudbuild.yml文件

我试图从云构建内部获取构建输出,并将其推送到一个文件中。我的步骤是这样的:

- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
  args: ['gcloud', 'builds', 'log', '$BUILD_ID', '>buildlog.log']
  id: 'fetch-build-log'
这会引发一个错误,说
error:(gcloud.builds.log)无法识别的参数:>buildlog.log

如果我在
cloud shell
中执行该命令,它工作正常:
gcloud构建日志xxxxx-xxxx-xxxx-xxxxxxx>guildlog.log

我不知道为什么
cloudbuild
在将输出重定向到文件时考虑
>buildlog.log
参数


我是否遗漏了某些内容,或者是否有其他方法可以这样做?

在shell提示符下,运行命令时:

gcloud builds logs XXXX > buildlog.log
您正在运行的实际命令是

gcloud builds log XXXX
使用shell的附加指令,您希望将命令的任何输出重新定向到本地文件。gcloud二进制文件(您实际运行的应用程序)未传递尾部的
>buildlog.log
,如果传递,则会向您报告错误消息。解释文件输出重定向的是shell

我认为您要做的只是从参数中删除
>buildlog.log

由于您不再传入此参数,下一个问题将变成“命令的输出将去哪里?”。。。这个问题的答案应该是GCP云日志,您应该能够看到命令的输出

如果您真的想创建本地输出文件,请考虑使用云构建<代码>入口点< /代码>:

并为
bash
的值指定一个值。这应该启动一个shell,然后将参数传递给shell,而不是原始fork/exec

最后,您的问题可能是以下问题的变体:


在shell提示下,运行命令时:

gcloud builds logs XXXX > buildlog.log
您正在运行的实际命令是

gcloud builds log XXXX
使用shell的附加指令,您希望将命令的任何输出重新定向到本地文件。gcloud二进制文件(您实际运行的应用程序)未传递尾部的
>buildlog.log
,如果传递,则会向您报告错误消息。解释文件输出重定向的是shell

我认为您要做的只是从参数中删除
>buildlog.log

由于您不再传入此参数,下一个问题将变成“命令的输出将去哪里?”。。。这个问题的答案应该是GCP云日志,您应该能够看到命令的输出

如果您真的想创建本地输出文件,请考虑使用云构建<代码>入口点< /代码>:

并为
bash
的值指定一个值。这应该启动一个shell,然后将参数传递给shell,而不是原始fork/exec

最后,您的问题可能是以下问题的变体:


在云构建中,每个构建器都有一个默认入口点,该入口点通常与该构建器的用途相关

在您的示例中,您使用的是
cloudsdk
defaultentrypoint和位置参数语法,因此每个索引都应该是一个参数

这就是您收到错误的原因:
error:(gcloud.builds.log)无法识别的参数:>buildlog.log

我总结了一个将入口点更改为
/bin/bash
的工作示例:

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
  entrypoint: '/bin/bash'
  args: ['-c',
         'gcloud builds log $BUILD_ID > buildlog.log']
  id: 'fetch-build-log'
- name: 'alpine'
  id: 'OUTPUT_LOG'
  args: ['sh',
         '-c',
         'cat /workspace/buildlog.log']
   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.
在该示例中,我使用了
-c
命令,以防您想了解原因:

引用《曼巴什》(man bash)中的话:

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
  entrypoint: '/bin/bash'
  args: ['-c',
         'gcloud builds log $BUILD_ID > buildlog.log']
  id: 'fetch-build-log'
- name: 'alpine'
  id: 'OUTPUT_LOG'
  args: ['sh',
         '-c',
         'cat /workspace/buildlog.log']
   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.

让我知道它是否适合您。

在云构建中,每个构建器都有一个默认入口点,通常与该构建器的用途相关

在您的示例中,您使用的是
cloudsdk
defaultentrypoint和位置参数语法,因此每个索引都应该是一个参数

这就是您收到错误的原因:
error:(gcloud.builds.log)无法识别的参数:>buildlog.log

我总结了一个将入口点更改为
/bin/bash
的工作示例:

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
  entrypoint: '/bin/bash'
  args: ['-c',
         'gcloud builds log $BUILD_ID > buildlog.log']
  id: 'fetch-build-log'
- name: 'alpine'
  id: 'OUTPUT_LOG'
  args: ['sh',
         '-c',
         'cat /workspace/buildlog.log']
   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.
在该示例中,我使用了
-c
命令,以防您想了解原因:

引用《曼巴什》(man bash)中的话:

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
  entrypoint: '/bin/bash'
  args: ['-c',
         'gcloud builds log $BUILD_ID > buildlog.log']
  id: 'fetch-build-log'
- name: 'alpine'
  id: 'OUTPUT_LOG'
  args: ['sh',
         '-c',
         'cat /workspace/buildlog.log']
   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.
让我知道它是否适合你