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.
让我知道它是否适合你