本頁面說明如何將建構成果儲存在 Cloud Storage 中。
建議您使用 Artifact Registry 儲存建構構件。Artifact Registry 是Google Cloud 產品,可與 Cloud Build 整合,在私人或公開存放區中安全地儲存及管理構件。將構件儲存在 Artifact Registry 中,即可:
- 使用Artifact Analysis 管理容器中繼資料,並掃描容器安全漏洞。
 - 使用二進位授權強制執行部署政策。
 - 在 Google Kubernetes Engine 中使用映像檔串流功能,這對大型容器映像檔特別有幫助。
 
如需設定 Cloud Build 的操作說明,以便將建構作業中的套件和映像檔儲存在 Artifact Registry 中,請參閱「在 Artifact Registry 中儲存構件」。
將成果儲存在 Cloud Storage 中
如要將非容器成果儲存於 Cloud Storage,請在建構設定檔中新增 artifacts 欄位,其中包含要儲存成果的值區位置及一個或多個成果的路徑:
YAML
artifacts:
  objects:
    location: [STORAGE_LOCATION]
    paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
其中
JSON
{
    "artifacts": {
        "objects": {
            "location": [
                "[STORAGE_LOCATION]"
            ],
            "paths": [
            [
                "[ARTIFACT_PATH]"
            ],
            [
                "[ARTIFACT_PATH]"
            ],
            "..."
            ]
        }
    }
}
其中
將成果儲存在 Cloud Storage 時,請注意下列注意事項:
您只能指定一個值區來上傳成果,而且您必須是值區的擁有者。您可以在值區中指定有效目錄路徑。
您可以上傳任意數量的成果,但只能指定最多一百個成果路徑。
如果您將成果上傳至一個值區,而這個值區中已經有名稱相同的成果,則新成果將取代現有成果。如果您不想讓新成果取代名稱相同的現有成果,可為值區啟用物件版本管理功能。
建構作業順利完成後,您可以在 [STORAGE_LOCATION]/artifacts-$BUILD_ID.json 中的 JSON 資訊清單檔案中找到上傳結果。
JSON 資訊清單檔案有下列欄位:
location:這個欄位指定在 Cloud Storage 中儲存成果的位置,格式為gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]。您可以使用生成號碼專門識別 Cloud Storage 值區中的資料版本。file_hash:這個欄位指定雜湊類型與值。雜湊類型一律為 2,指定執行 MD5 雜湊。
成果範例
以下範例顯示如何在建構設定檔中使用 Artifacts 欄位。在以下所有範例中,將 [VALUES_IN_BRACKETS] 替換為適當的值。
上傳檔案與資料夾
以下建構設定檔會將 helloworld.class 上傳至 gs://[STORAGE_LOCATION]/:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.class']
JSON
{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.class"
            ]
        }
    }
}
如要上傳多個成果,請指定每個成果的路徑,並以逗號分隔。以下範例會將 HelloWorld.java、HelloWorld.class 和 cloudbuild.yaml 上傳至 gs://[STORAGE_LOCATION]/:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']
JSON
{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class",
                "cloudbuild.yaml"
            ]
        }
    }
}
您也可以將成果上傳至值區中的有效目錄路徑。以下範例會將 HelloWorld.java 和 HelloWorld.class 上傳至 gs://[BUCKET_NAME]/[FOLDER_NAME]:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
    paths: ['HelloWorld.java', 'HelloWorld.class']
JSON
{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class"
            ]
        }
    }
}
使用萬用字元上傳多個成果
上傳多個成果時,您可以在 paths 中使用萬用字元指定多個檔案。
以下範例會將名為 classes 的檔案當做引數,該檔案包含要編譯的 .java 檔案名稱。然後將任何 .class 檔案上傳至指定的 Cloud Storage 值區:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['*.class']
JSON
{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "*.class"
            ]
        }
    }
}
在值區位置中使用 substitution 變數
您可以使用替換變數指定 Cloud Storage 值區內的資料夾。如果您指定的資料夾不存在,Cloud Build 會為您建立。
以下範例會將成果上傳至 Cloud Storage 路徑,該路徑中包含執行建構時所在的 Google Cloud 專案名稱 (例如 gs://mybucket/myproject/):
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
    paths: ['helloworld.class']
JSON
{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/$PROJECT_ID",
            "paths": [
                "helloworld.class"
            ]
        }
    }
}