本页面介绍如何添加、查看和删除 Ruby gem 和 gem 版本。
准备工作
-
您必须使用 Google Cloud CLI 354.0.0 或更高版本才能运行 Ruby 代码库的命令。您可以使用以下命令查看版本:
gcloud version 如果目标代码库不存在,请创建 Ruby 软件包代码库。
验证是否已安装 Ruby。如需查看安装说明,请参阅Google Cloud 有关设置 Ruby 的教程。
(可选)为 gcloud 命令设置默认值。
所需的角色
如需获得管理 gem 所需的权限,请让您的管理员向您授予代码库的以下 IAM 角色:
-
查看 gem 或 gem 中的文件:
Artifact Registry Reader (
roles/artifactregistry.reader) -
下载或安装 gem:
Artifact Registry Reader (
roles/artifactregistry.reader) -
向代码库添加 gem:
Artifact Registry Writer (
roles/artifactregistry.writer) -
删除 gem:
Artifact Registry Repository Administrator (
roles/artifactregistry.repoAdmin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
添加 Gem
Ruby 中的软件包称为 gem,每个 gem 都包含名称、版本和平台。Ruby 项目还必须包含一个 gemfile,这是一个用于指定所需 gem 依赖项的配置文件。
代码库模式:标准
构建 Ruby 项目时,分发文件会保存在项目的 lib 子目录中。然后,您可以使用 RubyGems 将 gem 上传到标准代码库。
如需将 gem 添加到 Artifact Registry 代码库,请执行以下操作:
gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
其中:
- GEM_NAME 是要推送到代码库的 gem 的名称。
- LOCATION 是代码库的位置。
- PROJECT 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
- REPOSITORY 是您在 Artifact Registry 中的代码库的名称。
查看 Gem 和版本
代码库模式:标准
如需使用 Google Cloud 控制台或 gcloud 查看软件包和软件包版本,请执行以下操作:
控制台
在 Google Cloud 控制台中打开制品库页面。
在代码库列表中,点击相应代码库。
软件包页面列出代码库中的软件包。
点击一个软件包以查看它的版本。
gcloud
如需列出代码库中的软件包,请运行以下命令:
gcloud artifacts packages list [--repository=REPOSITORY] [--location=LOCATION]
替换以下内容:
如需查看软件包的版本,请运行以下命令:
gcloud artifacts versions list --package=PACKAGE \
[--repository=REPOSITORY] [--location=LOCATION]
替换以下内容:
对于远程代码库,返回的列表应包含所有直接和传递依赖项。
列出文件
代码库模式:标准
您可以列出代码库中的文件、指定软件包的所有版本中的文件,或软件包的特定版本中的文件。
对于以下所有命令,您都可以通过向命令添加 --limit 标志来设置要返回的文件数量上限。
如需在配置默认值时列出默认项目、代码库和位置中的所有文件,请运行以下命令:
gcloud artifacts files list
如需列出指定项目、代码库和位置中的文件,请运行以下命令:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION
如需列出特定软件包的所有版本的文件,请执行以下操作:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION \
--package=PACKAGE
如需列出特定软件包版本的文件,请执行以下操作:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION \
--package=PACKAGE \
--version=VERSION
替换以下值:
LOCATION:代码库的单区域或多区域位置。PROJECT:您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目。REPOSITORY:存储映像的代码库的名称。PACKAGE:软件包的名称。VERSION:软件包的版本。
示例
请考虑以下软件包信息:
- 项目:
my-project - 代码库:
my-repo - 代码库位置:
us-west1 - 套餐:
my-app
以下命令会列出默认项目中位置 us-west1 内的代码库 my-repo 中的所有文件:
gcloud artifacts files list \
--location=us-west1 \
--repository=my-repo
1.0 中的文件。
gcloud artifacts files list \
--project=my-project \
--location=us-west1 \
--repository=my-repo \
--package=my-app \
--version=1.0
安装 gem
代码库模式:标准
如需安装软件包的最新稳定版,请执行以下操作:
gem install GEM_NAME
对于标准代码库,您可以直接从代码库下载软件包。
对于远程代码库,您需要下载软件包及其依赖项的缓存副本。如果不存在缓存副本,远程代码库会从上游来源下载软件包并将其缓存,然后再提供给您。您可以通过查看代码库中的软件包列表,验证远程代码库是否已从上游来源检索到软件包。
对于虚拟代码库,Artifact Registry 会在上游代码库中搜索所请求的软件包。
- 如果不存在缓存副本,上游远程代码库将下载并缓存所请求的软件包。虚拟代码库仅提供所请求的软件包,而不存储这些软件包。
- 如果您请求的版本在多个上游代码库中都有,Artifact Registry 会根据为虚拟代码库配置的优先级设置来选择要使用的上游代码库。
例如,假设某个虚拟代码库的上游代码库具有以下优先级设置:
main-repo:优先级设置为100secondary-repo1:优先级设置为80。secondary-repo2:优先级设置为80。test-repo:优先级设置为20。
main-repo 具有最高的优先级值,因此虚拟代码库始终会先搜索它。
secondary-repo1 和 secondary-repo2 的优先级都设置为 80。如果所请求的软件包在 main-repo 中不可用,Artifact Registry 会接下来搜索这些代码库。由于它们的优先级值相同,因此如果版本同时存在于这两个仓库中,Artifact Registry 可以选择从任一仓库提供软件包。
test-repo 的优先级值最低,如果其他任何上游代码库都没有相应制品,则会提供存储的制品。
其他信息
当您将 gem 推送到 Artifact Registry 仓库或从该仓库拉取 gem 时,如果在您指定的仓库中找不到所请求的 gem 或其依赖项,则 gem 客户端会使用 gemfile 中为您的 gem 定义的任何其他来源。如果您只想直接从 Artifact Registry 中提取和安装,请运行以下命令,从 Gemfile 中移除非 Artifact Registry 源:
gem sources --remove SOURCE
如需重新将 rubygems.org 添加为来源,请执行以下操作:
gem sources --add SOURCE
其中,SOURCE 是来源的地址,例如 https://rubygems.org。
删除软件包和版本
代码库模式:标准
您可以删除软件包及其所有版本,也可以删除特定版本。
- 删除软件包后,您无法撤消此操作。
- 对于远程代码库,系统只会删除软件包的缓存副本。上游来源不受影响。如果您删除缓存的软件包,Artifact Registry 会在下次存储库收到对同一软件包版本的请求时再次下载并缓存该软件包。
在删除软件包或软件包版本之前,请确认您已在其中告知或解决任何重要依赖项。
如需删除软件包,请按如下所述操作:
控制台
在 Google Cloud 控制台中打开制品库页面。
在代码库列表中,点击相应代码库。
软件包页面列出代码库中的软件包。
选择要删除的软件包。
点击删除。
在确认对话框中,点击删除。
gcloud
运行以下命令:
gcloud artifacts packages delete PACKAGE \
[--repository=REPOSITORY] [--location=LOCATION] [--async]
替换以下内容:
PACKAGE是代码库中的软件包名称。REPOSITORY是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。-
LOCATION是代码库的单区域或多区域位置。 使用此标志可查看特定位置的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。
--async 标志会导致命令立即返回,而无需等待正在进行的操作完成。
如需删除软件包的版本,请按如下所述操作:
控制台
在 Google Cloud 控制台中打开制品库页面。
在代码库列表中,点击相应代码库。
软件包页面列出代码库中的软件包。
点击一个软件包以查看它的版本。
选择您要删除的版本。
点击删除。
在确认对话框中,点击删除。
gcloud
运行以下命令:
gcloud artifacts versions delete VERSION \
--package=PACKAGE \
[--repository=REPOSITORY] [--location=LOCATION] \
[--async]
替换以下内容:
VERSION是要删除的版本的名称。PACKAGE是代码库中的软件包名称。REPOSITORY是代码库的名称。如果您配置了默认代码库,则可以省略此标志以使用默认值。-
LOCATION是代码库的单区域或多区域位置。 使用此标志可查看特定位置的代码库。如果您配置了默认位置,则可以省略此标志以使用默认值。
--async 标志会导致命令立即返回,而无需等待正在进行的操作完成。
限制
Artifact Registry 不支持使用
gem sources -add命令添加代码库作为来源。不过,您可以手动将来源添加到.gemrc文件中,也可以直接在gem命令中传递--source标志。Artifact Registry 不支持使用
gem fetch拉取 gem。