我正在尝试为我的简单烧瓶应用程序构建和推送基于 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 我是否必须以某种方式使用该特定运行器版本......或者有人可以告诉我我在这里缺少什么或我做错了什么?
谢谢 :)