问题标签 [maven-jib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
615 浏览

maven - 如何解决使用 jib-maven-plugin 从 Cloud Build 推送到 Google Artifact Registry 的权限?

这个问题似乎与我在 GCP 中的权限有关,但到目前为止尝试设置正确的权限还没有奏效。

我正在使用com.google.cloud.tools:jib-maven-plugin将 Spring Boot 项目打包到容器中并将其推送到 Google Artifact Registry (GAR)。当我在本地运行它时它工作得很好,但是当我使用 Google Cloud Build 运行 maven 构建时它会失败。它说它失败了,因为artifactregistry.repositories.downloadArtifacts缺少许可。

但这是根据Google Docs默认启用的权限之一。

我的目标是 Google Artifacts (docker) Registry。我能够将目标更改为 Google Container Registry(已弃用,因此我需要更改为 GAR),并且在 Cloud Build 下运行良好,没有权限问题。该构建还从存储在不同 GAR 中的 maven 存储库下载 jar 文件,尽管在同一个 Google 项目中。很明显,该 Maven GAR 的权限是可以的。

我验证了在本地运行 maven 构建工作,包括写入 GAR,这消除了 jib 插件配置或 GAR 配置中出现的问题。这是使用我自己的用户凭据。

我尝试了什么?

  • 我将适当的角色添加到 Cloud Build 使用的默认服务帐户(尽管它们应该在那里)。该downloadArtifacts权限包含在角色 Artifact Registry Reader 中,因此我添加了该角色以及 Artifact Registry Writer。
  • 我切换到了不同的服务帐户(构建服务帐户,我们称之为 BSA),是的,确保具有相同的适当角色(见上文)。
  • 我将 BSA 作为主体添加到目标 GAR 并在那里为其赋予了适当的角色(变得绝望)
  • 我的用户凭据包括所有者角色,因此我将所有者角色添加到 BSA(不是我想要保留的)

所有这些都给了我相同的权限被拒绝错误。以防万一我真的误解了一些东西,我在我的 Cloud Build yaml 中添加了一个步骤来运行gcloud info并验证,是的,它使用的是我已经配置了我需要的角色的 BSA。

有什么我错过的吗?谢谢

...编辑更多信息。我的大多数构建都使用 jib,但一个使用 Spotify 创建本地 docker 映像,然后使用 docker 推送到注册表。这行得通!所以问题是特定于jib的。不知何故,在云构建下,jib 看不到信用,尽管它确实在本地看到了它们。

...编辑实际的错误消息:

另请注意,我使用的是最新版本的 jib:3.1.4

...编辑

我又尝试了几件事。我在 maven 构建之前添加了一个较早的步骤,它执行gcloud auth configure-docker --quiet --verbosity=debug australia-southeast1-docker.pkg.dev. 这会创建一个/builder/home/.docker/config.json文件。因为似乎对该文件应该真正存在的位置感到困惑,所以我将其复制到/root/.docker. 但这并没有帮助。

我尝试的第二件事是使用$DOCKER_CONFIGto 指向/builder/home/.docker目录(如此处所建议),但这也无济于事。

两种情况下的错误相同。我确实收到了来自gcloud auth configure-docker...

我认为这是试图提供帮助并告诉我它找不到安装的 docker(这是真的),但它仍然创建了凭据(也是真的)。这并不重要,因为 jib 不依赖 docker 本身,只依赖于信誉。但是它仍然不起作用。

0 投票
0 回答
27 浏览

docker - 从 tar 中打包的所有 jar 中删除一些类文件(每个 tar 是 docker 映像的一层)

好的,所以我知道如何从目录下的所有 jar 中删除类文件。但是,现在我有一个与 docker 图像不同的层,每一层都是一个 tar 文件,并且在 tar 文件中有 jar 文件。

我可以从打包在 tar 文件中的 jar 文件中删除类文件吗?

那你问我为什么?好吧,你最近听到人们谈论 log4j 了吗?:) 我现在正在这样做:log4j 漏洞检查:如何在 mavevn/图像中快速检测是否使用了 log4j?“mvn dependency:tree”没有给出完整的图片

如果有人能告诉我如何从 jib maven 插件中删除这些类,那就更好了。它们来自基本图像,但我怀疑我们能否做到这一点。

0 投票
1 回答
37 浏览

skaffold - Skaffold 无法从 Harbor 拉取图像

预期行为

Skaffold 应该从运行在 HTTP 上的不安全的 Harbor 注册表中提取图像。我已经尝试了这些文档中的所有内容:
https ://skaffold.dev/docs/environment/image-registries/#insecure-image-registries 但没有成功。

实际行为

Jib 将镜像推送到不安全的 Harbor 注册表没有问题,但是在尝试拉取镜像并将微服务部署到 Kubernetes 时抛出错误:
192.168.2.24:30002/trm/redis-spring:latest@sha256:0f8d21819d845bd55aa699afa8b21e141d41f10d9d9fb1a2c6dbb2d468d89e81 can't be pulled. 可以使用 docker 拉取指定的镜像: docker pull 192.168.2.24:30002/trm/redis-spring:latest@sha256:0f8d21819d845bd55aa699afa8b21e141d41f10d9d9fb1a2c6dbb2d468d89e81

信息

  • 支架版本:v1.35.1
  • 操作系统:Windows 10 家庭版
  • 通过安装:skaffold.dev
  • skaffold.yaml 的内容:
0 投票
1 回答
69 浏览

java - GitHub Actions:JIB maven 插件中的错误 401 未经授权

介绍

我目前正在创建一个复合 GitHub Actions,它使用 JIB 从 Java 项目构建一个容器,并将其自动发布到 GitHub Packages 和 Maven Central。

有问题的

但是当我尝试运行它时出现此错误:

受影响的代码:

执行相关 GitHub 操作的代码:

问题

有人有解决这个问题的想法吗?

回购链接:https ://github.com/MathieuSoysal/jib-container-publish.yml

0 投票
1 回答
28 浏览

jib - jib - 自定义入口点只能在运行时删除类,但在部署前会失败 3pp 漏洞检查

我正在使用 Jib 拉取一个基本图像,将我的包装器 java 代码添加到它,并在此基础上构建我的图像。由于 2021 年 12 月广为人知的 log4j CVE,我们正在寻找一种方法来删除易受攻击的类。(现在在 2022 年发现了更多 CVE,其中一个的得分为 10.0,是可能的最高分。请参阅https://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-37215/Apache-Log4j.html )

基础镜像已接近 EOL,因此提供商回答他们不会发布新版本;此外,log4j 1.x 也很早就达到了 EOL。但是目前的情况是我们没有将基础镜像升级到下一个版本的计划,所以删除类似乎是现在唯一的方法。

基本图像将/opt/amq/bin/launch.sh用作入口点。而且我发现我可以在此之前使用自定义入口点来运行脚本,从而删除类。喜欢<entrypoint>/opt/amq/bin/my_script.sh</entrypoint>,而且我有run_fix.sh && /opt/amq/bin/launch.sh

然后我意识到,即使这样可以通过在应用程序实际运行时减轻风险来工作,漏洞扫描(安全过程的一部分)仍然会在检查图像二进制文件时发出警报,因为这是在图像上传之前完成的静态过程在实际运行之前到 docker 注册表进行生产。它们只能在应用程序运行时被移除,也就是在运行时。

jib 可以在执行 Maven build() 时预处理基础映像,而mvn clean install -Pdocker-build不是仅在运行时允许它吗?根据我阅读的内容,我知道这是一个很大的 NO,并且还没有插件。