0

我正在尝试为我的简单烧瓶应用程序构建和推送基于 python 的 docker 映像。

我只想在主分支上的给定提交上创建标签时构建它。

这是我的 .gitlab-ci.yml

stages:
      - build
    
build:tag:
  image: docker:latest
  stage: build
  services:
    - name: docker:dind
  only: [tags]
  before_script:
    - echo $CI_BUILD_TOKEN | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin
  script:
    - DOCKER_BUILDKIT=1 docker build
        --secret id=ci_pip_conf,src=$CI_PIP_CONF
        --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG

我正在使用以下 Dockerfile:

# syntax=docker/dockerfile:experimental
FROM python:3.10.1-slim-buster

COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

RUN --mount=type=secret,id=ci_pip_conf,dst=/root/.pip/pip.conf \
      pip install --no-cache-dir -r requirements.txt

COPY . /app

ENTRYPOINT [ "python", "./app.py" ]

然后我0.0.1通过 gitlab 站点创建一个新标签,管道启动并失败

DOCKER_BUILDKIT=1 docker build --secret id=ci_pip_conf,src=$CI_PIP_CONF --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG 。

无法解析机密:[id=ci_pip_conf,src=]:无法统计 ci_pip_conf:统计 ci_pip_conf:没有这样的文件或目录

如果我删除:$CI_COMMIT_TAG它,它将成功创建并推送带有默认标签的图像 a :latest

如果我明确地交换:$CI_COMMIT_TAG:latest管道也会成功。

如果我明确地交换:$CI_COMMIT_TAG:$CI_COMMIT_SHA管道也会成功。

如果我明确地交换:$CI_COMMIT_TAG:$CI_COMMIT_MESSAGE管道也会成功。

但是为什么它不能使用CI_COMMIT_TAG呢?

Buildkit 被识别,但我的秘密没有转移到构建中。

我发现运行器版本是 0.5 我是否必须以某种方式使用该特定运行器版本......或者有人可以告诉我我在这里缺少什么或我做错了什么?

谢谢 :)

4

0 回答 0