当前位置: 首页 > 知识库问答 >
问题:

使用Jib和Gitlab CI构建docker映像

庾君博
2023-03-14

我正在尝试创建一个管道,使用JIB(通过Maven插件)创建docker图像,并将其推送到我的Gitlab注册表。

当我登录到docker注册表时,这在本地运行良好。

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
        <allowInsecureRegistries>true</allowInsecureRegistries>
        <from>
            <image>dockerhost/projectgroup/alpine</image>
        </from>
        <to>
            <image>dockerhost/project/imagename:${project.version}</image>
        </to>
        <container>
            <useCurrentTimestamp>true</useCurrentTimestamp>
        </container>
    </configuration>
</plugin>

说我有一个。gitlab ci。yml看起来像:

stages:
  - build_image

build_image:
  stage: build_image
tags:
  - dev
script: |
  mvn compile jib:build

现在我在管道被触发时得到一个异常

Build image failed: Failed to authenticate with registry dockerhost/projectgroup/alpine because: peer not authenticated

我假设我得到了这个错误,因为我还没有运行docker login-u[用户名]-p[密码/令牌]

我怎么会需要一个.gitlab-ci.yml,它使用docker-in-docker镜像能够在我的脚本中运行docker登录?

除了使用docker-in-docker映像在我的Gitlab CI上构建此映像之外,还有其他选择吗?

共有3个答案

阎俊英
2023-03-14

对于Gradle用户:

 ./gradlew jib \
 -Djib.to.image=${CI_REGISTRY_IMAGE}:latest \
 -Djib.to.auth.username=${CI_REGISTRY_USER} \
 -Djib.to.auth.password=${CI_REGISTRY_PASSWORD}
归松
2023-03-14

使用GitLab,您可以定义可用于将注册表凭据传递给Jib的秘密环境变量。

>

mvn compile jib:build -Djib.to.image=my-container-image:latest -Djib.to.auth.username=$REGISTRY_USER -Djib.to.auth.password=$REGISTRY_PASSWORD
洪通
2023-03-14

自GitLab 9.0以来,默认情况下所有必要的变量都可用:

  • CI_注册表——项目注册表的URL
  • CI_注册表_图像——项目注册表的“基本”图像名称
  • CI_注册表_用户——可以访问项目注册表的技术用户
  • CI_REGISTRY_PASSWORD——该用户的密码/令牌

因此,可以使用以下命令生成和发布图像:

mvn compile jib:build \
    -Djib.to.auth.username=${CI_REGISTRY_USER} \
    -Djib.to.auth.password=${CI_REGISTRY_PASSWORD} \
    -Djib.to.image=${CI_REGISTRY_IMAGE}:latest

还可以使用Maven设置,就像在Maven注册表上进行身份验证时通常使用的那样。

 类似资料:
  • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个

  • 我有一个Spring boot应用程序,它有许多模块,如错误模块、持久性、控制器等,如下所示 使用Maven jib插件构建docker镜像,pom中的配置如下。xml 构建成功了。但是当我运行图像时,它的抛出错误是:找不到或加载主类com。a、 卑诗省申请 如何使用Jib构建图像?。我错过了什么?

  • 我正在使用Jib创建docker容器并将其推送到注册表。为此,我想构建一个Docker映像,在将该映像推送到Gitlab注册表之前,可以用于容器扫描。我面临的问题是,我不能为构建使用docker映像,因为它没有运行docker代理。我不能使用图像,因为它没有maven图像。有没有办法在不创建自定义docker映像的情况下解决这个问题? 这是我的与本部分相关的文件: 如果是docker图像: 如果是

  • 我有一个简单的SpringBoot应用程序,我想使用Jib Maven插件构建docker映像。以下是我的插件配置: 我只想在本地构建映像并运行它。我不想一次建成并推送到docker注册表。 当我运行命令mvnjib:build时,它会使用Docker config(/Users/username/.Docker/config.json)中的凭据自动推送到DockerHub。 有没有一种方法我可以

  • 问题内容: 我正在尝试 使用 官方链接中提到 的API 构建 docker镜像 。 但是我无法获得文件中的内容:示例请求: 有几件事使我感到困惑, 1)在哪里提到 Dockerfile 的 路径 ? 2)“归档文件必须在归档文件的根目录中包含一个构建指令文件,通常称为Dockerfile。” 来自docker docs的此声明,这里的困惑 是存档的根 是 什么 ? 3) 构建图像的详细命令 是什么

  • 使用jib-maven-plugin,我想用多个标签构建镜像。虽然基本上运行良好,但它仅用标记图像。 我的Maven