Jib:如何在不安装的情况下使用 amazon-ecr-credential-helper?

2023-11-24

使用时jib-gradle-插件要构建并推送到 AWS ECR,需要我安装AWS ECR 凭证助手否则构建会抱怨“系统没有 docker-credential-ecr-login CLI”.

我想知道是否有一种方法可以在不安装凭证助手的情况下推送到 AWS ECR,或者是否可以在存储库中捆绑凭证助手的便携式版本?

安装助手的问题是:

  1. 它需要在需要构建项目的每台机器上安装助手,因此使得构建流程不像我希望的那样自动化
  2. 要安装 aws ecr 凭证帮助程序,需要安装 Docker。这感觉有点讽刺,因为 Jib 的很大一部分要点是构建发生的主机上不需要 Docker,因此构建可以是独立的和可移植的。

我知道这不是 Jib 问题,但我只是希望使用 Jib 的人可能遇到类似的挑战,因此可以提供一些如何解决该问题的见解。


Answer recommended by Google Cloud Collective

最后,使用注册表进行身份验证都归结为向 Jib 提供一个简单的用户名/密码字符串对。一旦 Jib 检索到该对,Jib 就将用户名和密码字符串按原样传递到服务器,而不进行任何处理。 (顺便说一句,这种机制并不是 Jib 特有的;每个 Docker 注册表都以这种方式工作。)就是这么简单:用户名和密码对才是最重要的。

使用 Docker 凭证帮助程序与通过 CLI 提供此字符串对没有什么不同。任何凭证助手都会使用“get”命令输出用户名和密码。例如,使用 Google 容器注册表,

$ docker-credential-gcr get <<<gcr.io
{"ServerURL":"","Username":"... this is the username ...","Secret":"... this is the password ..."}

因此,理论上您可以编写一个始终输出一些用户名/密码的哑脚本或二进制文件,命名该文件docker-credential-my-dumb-script,并配置jib.{from|to}.credHelper='my-dumb-script'。但我不会这么做;这只是为了强调注册表身份验证只需向 Jib 提供用户名和密码对即可。

但是,请注意,许多凭据助手会动态生成很快就会过期的短期凭据,这比使用静态和永久凭据安全得多。这是我们通常建议尽可能使用凭证助手的原因之一。某些云注册表也可能只接受由其凭证助手生成的这些短期凭证。

另一个例子是docker login。例如,成功登录docker login chanseoktest.azurecr.io -u my-username -p my-password只是记录结果my-username and my-password in ~/.docker/config.json:

    "auths": {
        "chanseoktest.azurecr.io": {
            # <username>:<password> in PLAIN string in base64 encoded form
            "auth": "bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ="
        },

(如果您对bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ=,结果是my-username:my-password以纯字符串形式。)这意味着,如果你可以使docker pull/push在某些系统上工作,Jib 也可以工作(正如 Jib 所研究的那样)~/.docker/config.json)。因此,向 Jib 提供凭据的另一种方法是创建一个工作~/.docker/config.json在系统上(或者您可以从成功运行的另一个系统复制它docker login)。这种方法,除非可以安全地完成,否则我也不会这样做。

再举一个例子,而不是愚蠢的凭证助手或~/.docker/config间接,您还可以通过以下方式直接将您的凭据传递给 Jibjib.{from|to}.auth.{username|password}(也可以通过相应的系统属性与,例如,-Djib.from.auth.username=...)。只要您可以使用凭据助手,我们也不推荐这样做。请注意,如果您在命令行上传递凭据,同一系统上的其他用户可以看到该命令(包括凭据),更不用说命令可以记录或存储在 shell 历史记录中。在某些环境中,如果您将这些凭据存储在某些环境变量中并修改您的build.gradle or pom.xml读书jib.{from|to}.auth.{username|password}来自环境变量。

有关提供用户名/密码对的完整方法列表,您可以咨询官方FAQ.

另请注意,您认为正确的用户名和密码对可能不是您的注册表实际接受的用户名和密码对。例如,此 AWS ECR 用户错误地假设他们可以使用“AWS ECR 密钥用户”(无论它是什么)作为用户名,而实际上,docker-credential-ecr-loginAWS作为用户名。 (并不是说你总是必须使用AWS作为用户名; ECR 可能(也可能没有)具有多种形式的可接受的凭证。)

最后,我将与 AWS ECR 社区或您使用 Jib 的平台社区进行确认,以找出最适合用作“登录 Docker”的用户名和密码对(如果您无法使用凭证助手。例如,对于 GitHub Actions,之前我成功使用过AWS 操作/亚马逊 ECR 登录.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jib:如何在不安装的情况下使用 amazon-ecr-credential-helper? 的相关文章

随机推荐

  • Azure AD - 令牌中缺少角色声明

    我已通过 Azure Active Directory AAD 设置身份验证 一切正常 我收到了访问和刷新令牌 我已经阅读了有关应用程序角色的信息 并且我想使用它们 为简单起见 我们假设我想要拥有管理员和用户角色 我已遵循官方文档 缺少最后
  • XML 解析太慢!

    我编写了一个 Java 应用程序来使用 XML 与 Web 应用程序进行通信 部署后 我发现解析 Web 应用程序生成的 XML 需要很长时间 例如 登录大约需要2分钟 登录信息包含在 url 中 Web 应用程序进行处理并使用返回的 XM
  • 使用 Spring MVC 保留 的值

    我有一个包含两个输入的表单 一个字符串 一个文件
  • 测试 Windows Phone 7 中的连接问题(使用模拟器)

    Windows Phone 7 模拟器中有没有办法关闭网络连接 无需拔下电缆并关闭笔记本电脑上的 Wi Fi 我想在没有物理设备或在模拟器或 Windows Phone 7 SDK 工具之外执行任何物理操作的情况下测试网络连接的下降 作为物
  • CanBuildFrom 如何知道一个类型是否可以从另一个类型构建?

    我读了官方文档但我仍然无法理解它是如何工作的 例如 class A type Self def seqToSet T lt A seq Seq T implicit cbf CanBuildFrom Seq T T Self Set T 上
  • 如何指定适用于英语以外的欧洲语言的正则表达式字符范围?

    我正在使用 Ruby 的正则表达式引擎 我需要编写一个正则表达式来执行此操作 WIKI WORD b a z w A Z a z A Z w b 但除英语外还可以使用其他欧洲语言 我不认为字符范围 a z 会涵盖德语等中的小写字母 WIKI
  • Maven Jacoco 配置 - 从报告中排除类/包不起作用

    我有一个 Maven 多模块项目 我正在使用 jacoco maven 进行代码覆盖率报告 有些类不应该报告 因为它们是 Spring 配置 我对它们不感兴趣 我已声明 maven jacoco 插件如下
  • Android - 带有自定义 BaseAdapter 的 Gridview,创建 onclicklistener [重复]

    这个问题在这里已经有答案了 我创建了一个显示字母表字母的网格视图 我使用自定义 BaseAdapter 用字符串数组填充 gridview 我想要做的是能够获取单击单元格的值 字母 为了验证它是否有效 我创建了一个 TextView 并且我
  • PHPMailer 在发送时挂起

    我已经在内部几个人使用的桌面上使用 WAMPSERVER 成功设置了一个 Web 应用程序 这使用 PHPMailer 到内部 SMTP 服务器 无需加密或身份验证 并且它有效 该桌面崩溃了 我已迁移到 新 桌面 我有一个 SVN 设置 所
  • 如何部署具有多个区域的 asp.net mvc 4 应用程序

    我跟着this制作可插入式 asp net mvc 4 应用程序的文章 但在部署应用程序时遇到问题 在我的解决方案中MainProj是主项目 所有其他项目都位于区域文件夹中 每个项目都有其模型 视图和控制器 我已经给出了所有子项目 区域文件
  • 在vb.net中,如果我使用AddHandler,我是否必须使用RemoveHandler?

    如果我总是需要在使用 AddHandler 之后调用 RemoveHandler 那么最好的位置在哪里 我搜索了几个类似的问题如下 但不太明白 何时何地调用 VB NET 中的RemoveHandler AddHandler RemoveH
  • 与 PHP strip_tags 等效的 MySQL 查询是什么?

    我有一个大型数据库 其中包含具有以下内容的记录 a 其中的标签 我想删除它们 当然 有一种方法 我创建一个 PHP 脚本 选择全部 使用strip tags并更新数据库 但这需要很长时间 那么如何使用简单 或复杂 的 MySQL 查询来做到
  • 获取当前正在执行的方法的名称

    Java 有没有办法获取当前正在执行的方法的名称 从技术上讲 这将起作用 String name new Object getClass getEnclosingMethod getName 但是 将在编译时创建一个新的匿名内部类 例如Yo
  • 纯CSS滚动动画

    我一直在寻找一种仅使用 CSS3 单击位于页面顶部的按钮时向下滚动的方法 所以我找到了这个教程 http tympanus net codrops 2012 06 12 css only responsive layout with smo
  • 我可以使用什么正则表达式从 Ruby 中的 url 获取域名?

    我正在尝试构建一个正则表达式来提取给定网址的域 for http www abc google com http abc google com https www abc google com http abc google com 应该给
  • 完全按照“绘图”面板中预览的方式保存绘图

    我知道已经存在一个非常相似的问题here 但提供的答案对我不起作用 这是我通常的工作流程 我生成一个绘图并在 RStudio 的 绘图 面板中调整绘图的大小 直到我满意为止 然后我打电话dev size 以获得准确的尺寸 之后 我保存情节g
  • RangeValidator 中的日期格式

    我正在使用 RangeValidator 来验证文本框中输入的日期 并且它在默认日期格式下工作正常 但现在我想要 dd MM yyy 中的日期格式 但它使用此日期格式生成例外 请为我提供解决方案 我的代码 在 aspx 页面中
  • Oracle PL/SQL - 如何创建简单的数组变量?

    我想创建一个可在我的 PL SQL 代码中使用的内存数组变量 我在 Oracle PL SQL 中找不到任何使用纯内存的集合 它们似乎都与表相关联 我希望在 PL SQL C 语法 中执行类似的操作 string arrayvalues n
  • 无法删除Default.png?

    我一直在玩弄初始屏幕 但决定不使用它 但现在 虽然我从资源中删除了 Default png 但当我启动应用程序时 启动画面仍然出现在模拟器中 Default png 不在项目文件夹中 我关闭并重新打开 Xcode 启动画面仍然存在 关闭并重
  • Jib:如何在不安装的情况下使用 amazon-ecr-credential-helper?

    使用时jib gradle 插件要构建并推送到 AWS ECR 需要我安装AWS ECR 凭证助手否则构建会抱怨 系统没有 docker credential ecr login CLI 我想知道是否有一种方法可以在不安装凭证助手的情况下推