首页 > 解决方案 > 在 yaml 中在 Gitlab 中使用自动递增的全局版本标记 Docker 映像

问题描述

我目前正在研究 Gitlab CI。我想在我的 YAML 文件中添加一种方法来使用按以下方式组成的版本号标记我的 docker 图像: MajorVersion.Minorversion.AutoincrementedGlobalversionNumber

我想在每次部署时自动递增全局定义的变量“AutoincrementedGlobalversionNumber”。

我使用了 CI_PIPELINE_IID,但是它会随着每个管道请求而不断增加,我需要一些东西来保持我可以跟踪的版本,并且它应该只在我打包和部署时增加。

   variables:
      CI_VERSION: "1.0.${CI_PIPELINE_IID}"

    build-master:
      stage: build
      script:
        - docker build --pull -t "$CI_REGISTRY_IMAGE" -t "$CI_REGISTRY_IMAGE:$CI_VERSION"   ./postfix
        - docker push "$CI_REGISTRY_IMAGE"
      only:
        - master

标签: dockergitlabyamlgitlab-cigitlab-ci-runner

解决方案


您可能无法使用默认的GitLab CI variables执行此操作,但可能有一种解决方法(未经测试):

  1. 使用以下内容获取注册表 ID:

    $ registry_id=$(curl -s -XGET --header "PRIVATE-TOKEN: $TOKEN" "https://gitlab.com/$PROJECT_PATH/container_registry.json" | jq '.[].id')

  2. 查询表示注册表获取名称:

    curl -s -XGET --header "PRIVATE-TOKEN: $TOKEN" "https://gitlab.com/$PROJECT_PATH/registry/repository/$registry_id/tags?format=json" | jq

    例如返回以下内容,您可以 grep 名称GlobalVersionNumber

    [
      {
        "name": "latest",
        "location": "registry.gitlab.com/mwasilewski/helm:latest",
        "revision": "85a403337a56e9e6409dfb8185bf9aa5c2135f9a437bd75da82d27471c71feb4",
        "short_revision": "85a403337",
        "total_size": 152246865,
        "created_at": "2016-12-11T08:31:30.126+00:00",
        "destroy_path": "/mwasilewski/helm/registry/repository/31074/tags/latest"
      }
    ]
    
  3. 继续你的 Docker 构建和推送,在增加GlobalVersionNumber你回来之后。

注意:这假设您使用的是GitLab 的 Container Registry

资源:


推荐阅读