如何通过CI将Jenkins构建编号包含到docker images构建中

如何通过CI将Jenkins构建编号包含到docker images构建中,docker,jenkins,microservices,Docker,Jenkins,Microservices,我正在创建一个Jenkins管道,用于构建多个微服务,创建docker映像并将其推送到私有docker注册表 docker图像是通过Gradle build通过docker插件创建的,我甚至可以推送图像 我需要以下问题的帮助 当通过Jenkins构建图像时,如何将图像标记到特定的Jenkins构建?换句话说,我希望维护每个构建的docker映像,并根据构建将属于特定构建的docker映像交付给QA 如果维护了多个图像,如何有条件地修剪过时的图像?比如说,我想清理最后10个版本的图像,但我想保留带

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

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

我需要以下问题的帮助

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

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

    有关详细信息,请查看以下链接:

    2-维护docker注册表中要保留的最大图像数取决于提供程序

    例如:jFrog的人工制品

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


    基本上,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"
            }
        .....
        .....
        .....
    }
    

    在windows中使用%BUILD\u NUMBER%,在linux中使用${BUILD\u NUMBER}

    你可以像下面提到的那样做。
    例如:docker build-t映像名称:%build\u NUMBER%

    1。您的意思是将BUILD_NUMBER添加为图像标记?是的,使用BUILD_NUMBER作为环境变量来标记图像。