使用其他工件格式

本页介绍如何在 Artifact Registry 通用格式代码库中存储不符合任何特定软件包格式的版本化、不可变工件。

如需熟悉在 Artifact Registry 中存储通用工件,您可以尝试参阅quickstart

通用工件是指任何格式的文件,包括但不限于以下格式:

  • 压缩文件,例如 tar 文件和 zip 文件
  • 配置文件,例如 YAML 和 TOML 文件
  • 文本文件和 PDF
  • 二进制文件
  • 归档
  • 媒体文件

与其他格式不同,Docker、软件包管理器或其他第三方客户端不应使用存储在通用格式代码库中的工件。

准备工作

  1. 创建通用格式代码库
  2. 验证您是否拥有代码库所需的权限
  3. (可选)为 Google Cloud CLI 命令配置默认值

所需的角色

如需获取管理通用工件所需的权限,请让管理员授予您代码库的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

上传通用工件

您可以按文件逐个上传通用工件,也可以按目录上传多个通用工件。上传时,必须指定软件包名称和版本号。您还可以在目标文件结构中指定要将文件上传到的目标文件路径。如果未指定目标路径,系统会默认将工件上传到根级别。

如需将通用工件上传到您的代码库,请运行以下命令:

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • PROJECT:您的 Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • LOCATION:代码库的单区域或多区域位置
  • REPOSITORY:存储工件的代码库的名称。
  • SOURCE:您要上传的文件的位置和名称。
  • PACKAGE:您要上传的文件的软件包名称。
  • VERSION:您要上传的文件的版本。
  • 执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud artifacts generic upload \
        --projectPROJECT \
        --source=SOURCE \
        --package=PACKAGE \
        --version=VERSION \
        --location=LOCATION \
        --repository=REPOSITORY
    

    Windows (PowerShell)

    gcloud artifacts generic upload `
        --projectPROJECT `
        --source=SOURCE `
        --package=PACKAGE `
        --version=VERSION `
        --location=LOCATION `
        --repository=REPOSITORY
    

    Windows (cmd.exe)

    gcloud artifacts generic upload ^
        --projectPROJECT ^
        --source=SOURCE ^
        --package=PACKAGE ^
        --version=VERSION ^
        --location=LOCATION ^
        --repository=REPOSITORY
    
    在上传工件时,您还可以使用其他标志:
    • --destination-path=PATH,用于上传到软件包和版本中的指定文件夹。但会创建任何不存在的文件夹。
    • --source-directory=SOURCE_DIR,用于替换 --source 标志并上传目录,而不是单个文件。
    • 使用 --source-directory 标志跳过现有文件时,返回 --skip-existing。否则,在尝试上传已存在的文件时,此命令将失败。

    API

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT 是您的 Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
    • LOCATION 是代码库的单区域或多区域位置
    • REPOSITORY 是存储工件的代码库的名称。
    • SOURCE 是要上传的文件的位置和名称。
    • PACKAGE 是要上传的文件的软件包名称。
    • VERSION 是要上传的文件的版本。
    • NAME 是该文件在代码库中的新名称。

    HTTP 方法和网址:

      POST https://artifactregistry.googleapis.com/download/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/genericArtifacts:create?alt=json
    

    curl(Linux、macOS 或 Cloud Shell)

    如需发送请求,请执行以下命令:

      curl -v \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -F "meta={'filename':'NAME','package_id':'PACKAGE','version_id':'VERSION'};type=application/json" \
          -F "blob=@SOURCE" \
          https://artifactregistry.googleapis.com/upload/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSTIORY/genericArtifacts:create?alt=json
    

    列出工件

    您可以使用 gcloud artifacts files list 命令列出代码库中的工件。

    在使用下面的命令数据之前,请先进行以下替换:

    • PROJECT:您的 Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
    • LOCATION:代码库的单区域或多区域位置
    • REPOSITORY:存储工件的代码库的名称。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud artifacts files list \
        --project=PROJECT \
        --location=LOCATION \
        --repository=REPOSITORY
    

    Windows (PowerShell)

    gcloud artifacts files list `
        --project=PROJECT `
        --location=LOCATION `
        --repository=REPOSITORY
    

    Windows (cmd.exe)

    gcloud artifacts files list ^
        --project=PROJECT ^
        --location=LOCATION ^
        --repository=REPOSITORY
    
    响应包含文件详细信息,格式为 PACKAGE:VERSION:NAME
    FILE: my-package:1.0.0:hello.yaml
    CREATE_TIME: 2023-03-09T20:55:07
    UPDATE_TIME: 2023-03-09T20:55:07
    SIZE (MB): 0.000
    OWNER: projects/my-project/locations/us-central1/repositories/quickstart-generic-repo/packages/my-package/versions/1.0.0
    

    您还可以通过添加以下一个或两个标志按版本和软件包进行排序:

    • --package=PACKAGE,用于仅显示特定软件包的文件。
    • --version=VERSION,用于仅显示特定版本的文件。

    下载通用工件

    如需从您的代码库中下载通用工件,请运行以下命令:

    gcloud

    在使用下面的命令数据之前,请先进行以下替换:

    • DESTINATION:指向本地文件系统中目标文件夹的路径。目标文件夹必须已存在,否则命令将失败。
    • LOCATION:代码库的单区域或多区域位置
    • REPOSITORY:存储工件的代码库的名称。
    • PACKAGE:要下载的文件的软件包。
    • VERSION:要下载的文件的版本。
    • NAME(可选):要下载的文件的名称。如果没有此标记,该命令将下载指定软件包和版本的所有文件,并在目标位置创建必要的目录。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud artifacts generic download \
        --destination=DESTINATION \
        --location=LOCATION \
        --repository=REPOSITORY \
        --package=PACKAGE \
        --version=VERSION \
        --name=NAME
    

    Windows (PowerShell)

    gcloud artifacts generic download `
        --destination=DESTINATION `
        --location=LOCATION `
        --repository=REPOSITORY `
        --package=PACKAGE `
        --version=VERSION `
        --name=NAME
    

    Windows (cmd.exe)

    gcloud artifacts generic download ^
        --destination=DESTINATION ^
        --location=LOCATION ^
        --repository=REPOSITORY ^
        --package=PACKAGE ^
        --version=VERSION ^
        --name=NAME
    

    API

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT:您的 Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
    • LOCATION:代码库的单区域或多区域位置
    • REPOSITORY:存储工件的代码库的名称。
    • DESTINATION:指向本地文件系统中目标文件夹的路径。目标文件夹必须已存在,否则命令将失败。
    • FILE:经过网址编码的文件名。您可以通过运行 gcloud artifacts files list 命令并复制 FILE 的值找到此值。对于此命令,它必须转换为网址编码格式。例如,需要将 path/to/file.jar 作为 path%2Fto%2Ffile.jar 输入。

    HTTP 方法和网址:

    GET https://artifactregistry.googleapis.com/download/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/files/FILE:download?alt=media

    如需发送您的请求,请展开以下选项之一:

    您应该会看到下载会立即开始。

    删除通用工件

    如需从代码库中删除通用工件,请运行 gcloud artifacts files delete 命令。此命令仅适用于通用格式代码库。

    在使用下面的命令数据之前,请先进行以下替换:

    • FILE:完整文件名。您可以通过运行 gcloud artifacts files list 命令并复制 FILE 的值找到此值。
    • LOCATION:代码库的单区域或多区域位置
    • REPOSITORY:存储工件的代码库的名称。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud artifacts files delete \
        FILE \
        --location=LOCATION \
        --repository=REPOSITORY
    

    Windows (PowerShell)

    gcloud artifacts files delete `
        FILE `
        --location=LOCATION `
        --repository=REPOSITORY
    

    Windows (cmd.exe)

    gcloud artifacts files delete ^
        FILE ^
        --location=LOCATION ^
        --repository=REPOSITORY
    

    后续步骤