Jenkins + Docker - 如何处理版本

时间:2015-08-29 21:10:21

标签: jenkins docker

我已经让詹金斯在两个独立的工作中做了两件事:

  1. 构建可执行jar并推送到Ivy repo
  2. 构建一个泊坞窗图片,从常春藤仓库中取出罐子,然后将图片推送到私人码头注册表
  3. 在第1步中,jar会有一些版本附加到文件名中(例如my-app-0.1-SNAPSHOT,my-app-1.0-RELEASE等)。我遇到的问题是在Dockerfile中我们必须根据上游版本的版本号提取正确的jar文件。另外,我理想地希望用相同的版本号标记泊坞窗图像。

    很想听听社区有关此问题的任何可能解决方案。

    提前致谢!!

3 个答案:

答案 0 :(得分:0)

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

0.1 -> 0.2 -> 0.3 -> ...

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

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

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

答案 1 :(得分:0)

您可以在步骤1结束时使用Groovy Postbulid Pluginextract with a regular expression生成的.jar文件的确切名称。

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

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

  • 从图片
  • 创建容器
  • 使用docker cp命令
  • 将jar文件添加到容器中
  • commit将容器转换为新图片
  • push新图片到您的docker注册表

答案 2 :(得分:0)

我的客户也需要。最后,我们将占位符放在Dockerfile中,这些占位符在docker build之前使用sed替换。 这样,您就可以在FROM或任何文件名中的多个位置使用该版本。

示例:

FROM custom:@placeholder@

ENV VERSION @placeholder@

RUN wget ***/myjar-${VERSION}.jar && ...

关于一致性,使用了唯一的版本:

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