如何将Jenkins内部版本号包含到通过CI构建的Docker映像中

时间:2019-05-07 03:44:41

标签: docker jenkins microservices

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

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

我需要以下问题的帮助。

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

3 个答案:

答案 0 :(得分:1)

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

您可以按照以下说明进行操作。 例如:docker build -t图片名称:%BUILD_NUMBER%

答案 1 :(得分:0)

1-出于标记目的,您可以使用詹金环境变量,例如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映像存储的唯一标记的最大数量。一旦图像的标签数量超过此数量,较旧的标签将被删除。将该字段保留为空白(默认)表示将存储所有标签。

答案 2 :(得分:0)

Jenkins基本上公开了BUILD_NUMBER env变量,我们可以像下面这样在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"
        }
    .....
    .....
    .....
}