使用git存储库中的标签标记docker映像

Noe*_*oel 6 gitlab gitlab-ci gitlab-ci-runner

我将Gitlab用于存储库和ci / cd。当前正在尝试建立从构建阶段创建docker映像的管道。我看过的所有示例都有一个简单的图像命名,例如使用了branch(master)

我的问题是,是否要基于存储库中的当前标记来标记图像,我该怎么做?我想我可以使用Gitlab跑步者变量,但看不到我们一个

Sas*_*ken 7

Gitlab CI中有很多预定义的变量。我想你在找CI_COMMIT_TAG

因此,您可以通过以下方式使用它:

docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
Run Code Online (Sandbox Code Playgroud)

所以图像看起来像 registry.example.com/group/project:tag

  • 请注意,只有在推送标签时它才会起作用,该变量对于后续提交将为空 (2认同)

Ber*_*tel 5

由于shell 命令无法使用内部变量.gitlab-ci.yml,您可以编辑一个构建脚本来获取当前标记并在该脚本中构建图像

项目根目录下的两个文件:

build.sh

#!/bin/sh

IMAGE="$CI_REGISTRY/$CI_PROJECT_PATH:$CI_BUILD_REF_NAME-$(git describe --abbrev=0 --tags)"

docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
docker build --pull -t $IMAGE .
docker push $IMAGE
Run Code Online (Sandbox Code Playgroud)

.gitlab-ci.yml

image: docker:latest
services:
  - docker:dind

stages:
  - release

release:
  stage: release
  script:
    - apk update && apk add git
    - ./build.sh
Run Code Online (Sandbox Code Playgroud)