配置 RubyGems 和 Bundler 并将其与 CodeArtifact 结合使用 - CodeArtifact

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 RubyGems 和 Bundler 并将其与 CodeArtifact 结合使用

在 CodeArtifact 中创建存储库后,您可以使用 RubyGems(gem)和 Bundler(bundle)来安装和发布 Gem。本主题介绍如何配置程序包管理器以使用 CodeArtifact 存储库进行身份验证,以及使用 CodeArtifact 存储库。

使用 CodeArtifact 配置 RubyGems(gem)和 Bundler(bundle

要使用 RubyGems(gem)或 Bundler(bundle)向 AWS CodeArtifact 发布 Gem 或使用其中的 Gem,首先需要使用您的 CodeArtifact 存储库信息(包括用于访问该存储库的凭证)对其进行配置。按照以下程序之一中的步骤,使用您的 CodeArtifact 存储库端点信息和凭证来配置 gembundle CLI 工具。

按照控制台说明来配置 RubyGems 和 Bundler

您可以按照控制台中的配置说明,将 Ruby 程序包管理器连接到 CodeArtifact 存储库。控制台说明提供了自定义命令,您可以运行这些命令来设置程序包管理器,而无需查找和填写 CodeArtifact 信息。

  1. 打开 AWS CodeArtifact 控制台,网址为:https://console.aws.amazon.com/codesuite/codeartifact/home

  2. 在导航窗格中,选择存储库,然后选择要用于安装或发布 Ruby Gem 的存储库。

  3. 选择查看连接说明

  4. 选择操作系统。

  5. 选择要使用 CodeArtifact 存储库配置的 Ruby 程序包管理器客户端。

  6. 按照生成的说明来配置程序包管理器客户端,以便从存储库安装 Ruby Gem 或将 Ruby Gem 发布到存储库。

手动配置 RubyGems 和 Bundler

如果您无法或不想使用控制台中的配置说明,可以按照以下说明手动将 Ruby 程序包管理器连接到 CodeArtifact 存储库。

  1. 在命令行中,使用以下命令来提取 CodeArtifact 授权令牌并将其存储在环境变量中。

    • my_domain 替换为您的 CodeArtifact 域名。

    • 111122223333 替换为域所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 跨账户域

    macOS and Linux
    export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
    Windows
    • Windows(使用默认命令 shell):

      for /f %i in ('aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text') do set CODEARTIFACT_AUTH_TOKEN=%i
    • Windows PowerShell:

      $env:CODEARTIFACT_AUTH_TOKEN = aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text
  2. 要将 Ruby Gem 发布到存储库,请使用以下命令获取 CodeArtifact 存储库的端点,然后将其存储在 RUBYGEMS_HOST 环境变量中。gem CLI 使用此环境变量来确定 Gem 的发布位置。

    注意

    或者,您可以不使用 RUBYGEMS_HOST 环境变量,而是在使用 gem push 命令时为存储库端点提供 --host 选项。

    • my_domain 替换为您的 CodeArtifact 域名。

    • 111122223333 替换为域所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库,则无需包括 --domain-owner。有关更多信息,请参阅 跨账户域

    • my_repo 替换为您的 CodeArtifact 存储库名称。

    macOS and Linux
    export RUBYGEMS_HOST=`aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format ruby --query repositoryEndpoint --output text | sed 's:/*$::'`
    Windows

    以下命令可检索存储库端点,去除尾部 /,然后将其存储在一个环境变量中。

    • Windows(使用默认命令 shell):

      for /f %i in ('aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format ruby --query repositoryEndpoint --output text') do set RUBYGEMS_HOST=%i set RUBYGEMS_HOST=%RUBYGEMS_HOST:~0,-1%
    • Windows PowerShell:

      $env:RUBYGEMS_HOST = (aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format ruby --query repositoryEndpoint --output text).TrimEnd("/")

    以下 URL 是一个示例存储库端点:

    https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/
    注意

    要使用双堆栈端点,请使用 codeartifact.region.on.aws 端点。

  3. 要将 Ruby Gem 发布到存储库,您必须通过编辑 ~/.gem/credentials 文件以包含身份验证令牌,来使用 RubyGems 向 CodeArtifact 进行身份验证。如果 ~/.gem/ 目录或 ~/.gem/credentials 文件不存在,则创建该目录和文件。

    macOS and Linux
    echo ":codeartifact_api_key: Bearer $CODEARTIFACT_AUTH_TOKEN" >> ~/.gem/credentials
    Windows
    • Windows(使用默认命令 shell):

      echo :codeartifact_api_key: Bearer %CODEARTIFACT_AUTH_TOKEN% >> %USERPROFILE%/.gem/credentials
    • Windows PowerShell:

      echo ":codeartifact_api_key: Bearer $env:CODEARTIFACT_AUTH_TOKEN" | Add-Content ~/.gem/credentials
  4. 要使用 gem 从存储库安装 Ruby Gem,必须将存储库端点信息和身份验证令牌添加到 .gemrc 文件。您可以将其添加到全局文件(~/.gemrc)或项目 .gemrc 文件。必须添加到 .gemrc 的 CodeArtifact 信息是存储库端点和身份验证令牌的组合。它的格式如下:

    https://aws:${CODEARTIFACT_AUTH_TOKEN}@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/
    • 对于身份验证令牌,您可以使用在上一步中设置的 CODEARTIFACT_AUTH_TOKEN 环境变量。

    • 要获取存储库端点,您可以读取之前设置的 RUBYGEMS_HOST 环境变量的值,也可以使用以下 get-repository-endpoint 命令根据需要替换这些值:

      aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format ruby --query repositoryEndpoint --output text

    获取端点后,使用文本编辑器在适当位置添加 aws:${CODEARTIFACT_AUTH_TOKEN}@。创建存储库端点和身份验证令牌字符串后,使用 echo 命令将其添加到 .gemrc 文件的 :sources: 部分,具体操作如下:

    警告

    CodeArtifact 不支持使用 gem sources -add 命令将存储库添加为源。必须将源直接添加到文件。

    macOS and Linux
    echo ":sources: - https://aws:${CODEARTIFACT_AUTH_TOKEN}@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/" > ~/.gemrc
    Windows
    • Windows(使用默认命令 shell):

      echo ":sources: - https://aws:%CODEARTIFACT_AUTH_TOKEN%@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/" > "%USERPROFILE%\.gemrc"
    • Windows PowerShell:

      echo ":sources: - https://aws:$env:CODEARTIFACT_AUTH_TOKEN@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/" | Add-Content ~/.gemrc
  5. 要使用 Bundler,必须通过运行以下 bundle config 命令,使用存储库端点 URL 和身份验证令牌来配置 Bundler:

    macOS and Linux
    bundle config $RUBYGEMS_HOST aws:$CODEARTIFACT_AUTH_TOKEN
    Windows
    • Windows(使用默认命令 shell):

      bundle config %RUBYGEMS_HOST% aws:%CODEARTIFACT_AUTH_TOKEN%
    • Windows PowerShell:

      bundle config $Env:RUBYGEMS_HOST aws:$Env:CODEARTIFACT_AUTH_TOKEN

您已经使用 CodeArtifact 存储库配置了 RubyGems(gem)和 Bundler(bundle),现在可以通过它们向存储库发布 Ruby Gem 以及使用来自存储库的 Ruby Gem。

从 CodeArtifact 安装 Ruby Gem

按照以下步骤,使用 gembundle CLI 工具从 CodeArtifact 存储库安装 Ruby Gem。

使用 gem 安装 Ruby Gem

可以使用 RubyGems(gem)CLI 从 CodeArtifact 存储库快速安装特定版本的 Ruby Gem。

使用 gem 从 CodeArtifact 存储库安装 Ruby Gem
  1. 如果还没有配置,请按照使用 CodeArtifact 配置 RubyGems(gem)和 Bundler(bundle) 中的步骤将 gem CLI 配置为通过适当的凭证来使用 CodeArtifact 存储库。

    注意

    生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时,则需要创建一个新的令牌。

  2. 使用以下命令从 CodeArtifact 安装 Ruby Gem:

    gem install my_ruby_gem --version 1.0.0

使用 bundle 安装 Ruby Gem

可以使用 Bundler(bundle)CLI 来安装已在 Gemfile 中配置的 Ruby Gem。

使用 bundle 从 CodeArtifact 存储库安装 Ruby Gem
  1. 如果还没有配置,请按照使用 CodeArtifact 配置 RubyGems(gem)和 Bundler(bundle) 中的步骤将 bundle CLI 配置为通过适当的凭证来使用 CodeArtifact 存储库。

    注意

    生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时,则需要创建一个新的令牌。

  2. 将 CodeArtifact 存储库端点 URL 作为 source 添加到 Gemfile,以便从 CodeArtifact 存储库及其上游安装已配置的 Ruby Gem。

    source "https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/ruby/my_repo/" gem 'my_ruby_gem'
  3. 使用以下命令,按照 Gemfile 中的说明来安装 Ruby Gem:

    bundle install

向 CodeArtifact 发布 Ruby Gem

按照以下步骤,使用 gem CLI 将 Ruby Gem 发布到 CodeArtifact 存储库。

  1. 如果还没有配置,请按照使用 CodeArtifact 配置 RubyGems(gem)和 Bundler(bundle) 中的步骤将 gem CLI 配置为通过适当的凭证来使用 CodeArtifact 存储库。

    注意

    生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时,则需要创建一个新的令牌。

  2. 使用以下命令将 Ruby Gem 发布到 CodeArtifact 存储库。请注意,如果未设置 RUBYGEMS_HOST 环境变量,则必须在 --host 选项中提供您的 CodeArtifact 存储库端点。

    gem push --key codeartifact_api_key my_ruby_gem-0.0.1.gem