是否有 '''gsutil''' 命令可以告诉我路径 '''gs://bucket1/folder1_x/folder2_y/''' 是否存在? gsutil 中有 '''ping''' 命令吗? 我使用Jenkins参数folder_x和folder_y,它们的值由用户输入,并通过管道加入。目前,如果目录确实存在,管道将显示成功。但是如果路径错误,管道就会中断并显示失败。
尝试使用 gsutil stat 和 gsutil -q stat,它可以测试 '''gs://bucket1/folder1_x/folder2_y/file1''',但不能测试目录。
'''时髦
管道{
stages {
stage('Check existing dirs') {
steps {
script{
if (params['Action'] =="List_etl-output") {
def Output_Data="${params['Datasource']}".toString().split(",").collect{"\"" + it + "\""}
def Output_Stage="${params['Etl_Output_Stage']}".toString().split(",").collect{"\"" + it + "\""}
for (folder1 in Output_Data) {
for (folder2 in Output_Stage) {
sh(script: """
gsutil ls -r gs://bucket1/*/$Data/$Stage
""" )
}
}
}
}
}
}
} }
'''
我使用 gsutil 检查路径 gs://bucket1/*/$Data/$Stage 是否可用。 $Data 和 $Stage 由用户输入给出,当路径不可用时 Jenkins 管道中断。我希望 gsutil 在不可用时可以跳过错误的路径。
答案 0 :(得分:2)
该目录在 Cloud Storage 中不存在。这是一个图形表示。所有 blob 都存储在存储桶根目录中,它们的名称由完整路径组成(您将 / 解释为目录,但不是)。为此,您只能搜索前缀。
要回答您的问题,您可以使用此最新功能:搜索前缀。如果有 1 个元素,则该文件夹存在,因为至少有 1 个带有此前缀的 blob。这里有一个 Python 的例子(我不知道你的语言,如果你需要,我可以用多种语言改编)
from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket('bucket1')
if len(list(bucket.list_blobs(prefix='folder_x/'))):
print('there is a file in the "directory"')
else:
print('No file with this path, so no "directory"')
这里是 Groovy 中的例子
import com.google.cloud.storage.Bucket
import com.google.cloud.storage.Storage
import com.google.cloud.storage.StorageOptions
Storage storage = StorageOptions.getDefaultInstance().service
Bucket bucket = storage.get("bucket1")
System.out.println(bucket.list(Storage.BlobListOption.prefix("folder_x/")).iterateAll().size())