Jenkins 詹金斯&x2B;Docker-如何处理版本

Jenkins 詹金斯&x2B;Docker-如何处理版本,jenkins,docker,Jenkins,Docker,我让Jenkins在两份不同的工作中做两件事: 构建一个可执行jar并推送到Ivy repo 构建一个docker映像,从Ivy repo中提取jar,并将映像推送到私有docker注册表 在步骤1中,jar将有一些版本附加到文件名中(例如my-app-0.1-SNAPSHOT、my-app-1.0-RELEASE等)。我面临的问题是,在Dockerfile中,我们必须根据上游构建的版本号引入正确的jar文件。此外,我希望理想的docker图像被标记为相同的版本号 我很想听听社区对这个问题的任何

我让Jenkins在两份不同的工作中做两件事:

  • 构建一个可执行jar并推送到Ivy repo
  • 构建一个docker映像,从Ivy repo中提取jar,并将映像推送到私有docker注册表
  • 在步骤1中,jar将有一些版本附加到文件名中(例如my-app-0.1-SNAPSHOT、my-app-1.0-RELEASE等)。我面临的问题是,在Dockerfile中,我们必须根据上游构建的版本号引入正确的jar文件。此外,我希望理想的docker图像被标记为相同的版本号

    我很想听听社区对这个问题的任何可能的解决方案


    提前谢谢

    显然,您需要(1)中的唯一版本来引用(2)

    从构建/Docker的角度来看,事情如何协同工作并不太复杂。我想更大的挑战是放弃开发工作流中的快照构建

    使用您当前的Jenkins:发布您为其创建容器的每个构建

    更好的选择:选择使用构建管道的CI/CD服务器。如果您还没有这样做,请查看参考底图概念。

    您可以在第1步结束时使用,以获得生成的.jar文件的确切名称

    然后对于步骤2,您可以拥有一个Dockerfile模板,并在其中用确切的jar名称替换一些占位符,构建映像并将其推送到您的注册表

    或者,如果您不使用Docker文件,您可以在Docker注册表中拥有一个预制作的Docker映像,该映像包含除jar文件以外的所有内容,并使用以下步骤将jar添加到其中:

    • 从图像创建一个容器
    • 使用以下命令将jar文件添加到容器中
    • 将容器转换为新图像
    • 将新图像添加到docker注册表

      • 我的客户也有同样的需求。最后,我们将占位符放在Dockerfile中,在
        docker构建之前使用sed替换占位符。
        这样,您就可以在多个位置使用该版本,无论是在
        FROM
        中还是在任何文件名中

        例如:

        FROM custom:@placeholder@
        
        ENV VERSION @placeholder@
        
        RUN wget ***/myjar-${VERSION}.jar && ...
        
        关于一致性,使用了唯一的版本:

        • 来自作业参数(Jenkins)
        • 构建工件(Maven)
        • 标记Docker图像的步骤(Docker)
        • 标记包含Dockerfile(Git)的Git存储库

        您使用什么构建图像?docker CLI?docker Build and Publish:这是可行的,但不幸的是,处理和测试docker文件变得很痛苦。对此有何想法?这确实意味着总是使用相同的过程来构建(工件和图像)和标记(图像和回购)。总是以同样的方式,这绝不是一个坏主意。非常有助于图像的一致性。而且它避免了在偶尔的服务器上执行随意的手工构建。一旦编写(当然也经过测试),构建映像的方式将保持不变,因此测试Dockerfile对我来说并不特别重要。哪些CI/CD服务器支持管道?詹金斯不使用管道?我们正在使用。这是我所知道的唯一一个围绕管道概念构建的CI/CD服务器。
        FROM custom:@placeholder@
        
        ENV VERSION @placeholder@
        
        RUN wget ***/myjar-${VERSION}.jar && ...