如何知道 GCP 存储桶中是否存在"gs://bucket1/folder_x"路径



是否有一个" gsutil "命令可以告诉我路径" 'gs://bucket1/folder1_x/folder2_y/" '是否存在?gsutil中是否有"ping"命令?我使用Jenkins参数folder_x和folder_y,它们的值由用户输入,并通过管道连接。目前,如果dir确实存在,管道将显示成功。但如果路径错误,则管道将中断并显示失败。

尝试使用gsutil stat和gsutil -q stat,它可以测试"'gs://bucket1/folder1_x/folder2_y/file1'",但不能测试dir。

groovy"

管道{

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仍然可以跳过错误的路径,当它不可用。

云存储中不存在该目录。这是一种图形表示。所有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())

最新更新