docker 为Gitlab-CI添加构建工具到Kaniko映像

7cwmlq89  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(135)

给定一个使用Gitlab-CI和k8s runner的约35个服务的monorepo。图像是使用Kaniko构建的,利用了原型模板的<job>.extends,生活很棒。
然而,最近,我们想在consul上保存一个密钥,并在成功构建后更改一个gitlab-ci env-var-这需要curl,最好是jq
我一直在尝试创建以下映像作为映像构建作业的映像:

FROM gcr.io/kaniko-project/executor:debug

RUN mkdir -p /workspace \
  && wget -qO /workspace/curl https://github.com/moparisthebest/static-curl/releases/download/v7.86.0/curl-amd64 \
  && chmod +x /workspace/curl \
  && wget -qO /workspace/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 \
  && chmod +x /workspace/jq

ENV PATH "$PATH:/workspace"

其构建似乎成功。
然而,事实上,当在管道作业中使用时,给定以下脚本:

.build-with-kaniko:
  script:
    - mkdir -p /kaniko/.docker;
      echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":..... > /kaniko/.docker/config.json
    - which jq || log no jq;
      which curl || log no curl;
    - >- 
      /kaniko/executor
      --context $PROJECT_PATH
      --dockerfile $DOCKERFILE
      --destination ${CI_REGISTRY}/${DOCKER_REPO}:${TAG}
    - which jq || log no jq;
      which curl || log no curl;

在运行executor之前,先找到curljq
但是在运行了executor之后-它们就不见了!!<tam-tam-taaaaaaAAAMM!!!> :o
我试着把它们放在几个不同的文件夹:/busibox/kaniko/workspace甚至是一个自定义目录/misc-并且无法让它工作...
我想也许它把它们 Package 成目标图像-但不,它们不在那里。
我还注意到,在使用X1 M12 N1 X构建之后,它们仍然存在(但之后我就没有在注册表上得到我的图像...)。
这是怎么回事?有一个后推清理机制,我应该指示离开这两个文件?
帮助?我必须做些什么才能让Kaniko明白我需要这两个工具?

km0tfn4u

km0tfn4u1#

天哪:捂脸:
我知道我会找到答案后,我张贴的问题...:耸耸肩:

以下是行之有效的方法:

将其声明为新卷:

FROM gcr.io/kaniko-project/executor:debug

RUN mkdir -p /misc \
  && wget -qO /misc/curl https://github.com/moparisthebest/static-curl/releases/download/v7.86.0/curl-amd64 \
  && chmod +x /misc/curl \
  && wget -qO /misc/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 \
  && chmod +x /misc/jq

VOLUME /misc

ENV PATH "$PATH:/misc"

我从kaniko的当前Dockerfile中得到了线索:调试图像本身(在撰写本文时)。
建议将该图像用作使用kaniko的gitlab-ci作业的基础图像-它包括/busybox
我仍然不明白为什么把工具放在/busybox目录中不起作用,但我现在得到了一个有效的解决方案,没有时间深入挖掘:悲哀:拜瑞耸耸肩:

相关问题