【问题标题】:How to include Jenkins build numbers to docker images build via CI如何将 Jenkins 内部版本号包含到通过 CI 构建的 docker 镜像中
【发布时间】:2020-08-11 01:32:49
【问题描述】:

我正在创建一个 Jenkins 管道,用于构建多个微服务并创建 Docker 映像并将它们推送到私有 Docker 注册表。

docker 图像是通过 docker 插件通过 Gradle build 创建的,我什至可以推送图像。

我需要以下问题的帮助。

  1. 通过 Jenkins 构建图像时,如何将图像标记到特定的 Jenkins 构建?换句话说,我想维护每个构建的 docker 镜像,并根据构建 # 将属于特定构建的 docker 镜像交付给 QA。
  2. 如果维护多个图像,我如何有条件地修剪过时的图像?比如说,我想清理最后 10 个构建的映像,但想保留带有发布或里程碑标记的构建映像。

【问题讨论】:

    标签: docker jenkins microservices


    【解决方案1】:

    在 Windows 中使用 %BUILD_NUMBER%,在 linux 中使用 ${BUILD_NUMBER}

    你可以像下面提到的那样做。 例如:docker build -t image-name:%BUILD_NUMBER%

    【讨论】:

      【解决方案2】:

      1- 出于标记目的,您可以使用 jenkin 环境变量,例如 BUILD_NUMBER

      详情请查看以下链接:https://wiki.jenkins.io/display/JENKINS/Building+a+software+project

      2- 维护您希望在 docker 注册表中保存的最大图像数量取决于提供者。

      例如:来自 jFrog 的 Artifactory
      https://www.jfrog.com/confluence/display/RTF/Docker+Registry

      设置最大唯一标签。这指定了每个存储库应为 Docker 映像存储的唯一标签的最大数量。一旦图像的标签数量超过此数量,旧标签将被删除。将该字段留空(默认)意味着将存储所有标签。

      【讨论】:

      • 1.您的意思是添加 BUILD_NUMBER 作为图片标签?
      • 是的,使用 BUILD_NUMBER 作为环境变量来标记您的图像。
      【解决方案3】:

      基本上,Jenkins 公开了 BUILD_NUMBER 环境变量,我们可以像下面这样简单地在 gradle 文件中读取它并使用它来命名 docker 图像

      
          buildscript {
              ext {
                  springBootVersion = "2.1.3.RELEASE"
                  dependencyManagementVersion = "1.0.7.RELEASE"
                  gradleDockerVersion = "0.13.0"
                  spotBugsVersion = "1.7.1"
                  guavaVersion = "27.0.1-jre"
                  nodeVersion = "1.3.1"
                  buildNumber = System.getenv("BUILD_NUMBER")!=null? System.getenv("BUILD_NUMBER") : "latest"
              }
          .....
          .....
          .....
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-18
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 2022-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        相关资源
        最近更新 更多