别名jenkins工件URL

时间:2014-04-30 17:02:28

标签: jenkins

Jenkins工件网址允许抽象"上次成功构建",以便代替

http://myjenkins.local/job/MyJob/38/artifact/build/MyJob-v1.0.1.zip

我们可以说

http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/MyJob-v1.0.1.zip

是否有可能进一步抽象?我的工件在其文件名中有版本号,可以从构建更改为构建。理想情况下,我想要某种"别名" URL如下所示:

http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/MyJob-latest.zip
然后

MyJob-latest.zip将解析为MyJob-v1.0.1.zip

如果Jenkins本身无法做到这一点,也许还有一个插件?

2 个答案:

答案 0 :(得分:13)

从未见过任何此类插件,但Jenkins已经内置了类似的功能。

您可以在工件路径中使用/*zip*/filename.zip,其中filename是您选择的任何内容。它将获取所有找到的工件,并将其下载到一个zip文件中(如果你的工件已经是一个zip文件,你最终可能会在zip中找到一个zip)

在您的情况下,它将是:
http://myjenkins.local/job/MyJob/lastSuccessfulBuild/artifact/build/*zip*/MyJob-latest.zip
这将为您提供名称为/artifact/build/的压缩存档中返回的MyJob-latest.zip的内容。请注意,如果该目录中只有该zip文件,则还会返回其他文件。

您可以在路径中使用通配符。单个*表示常规通配符,双**表示跳过任意数量的前面目录。

例如,要获取以MyJob开头的任何文件,以.zip结尾,并在任何工件目录中查找它,您可以使用:

/lastSuccessfulBuild/artifact/**/MyJob*.zip/*zip*/MyJob-latest.zip

编辑:

如果没有某种形式的容器(在这种情况下为zip),则不能执行此类操作。使用容器,您告诉系统:

  • 获取任何可能的[未确定的计数]通配符匹配并放入此容器,然后给我容器。这是合乎逻辑且可能的,因为只有一个容器,无论它是否为空。

但你无法告诉系统:

  • 给我一个指向特定单个文件的链接,但我不知道有哪个或多少个。系统无法保证您的通配符将匹配一个,多个或不匹配。从逻辑的角度来看,这根本不可能。

如果您需要一些脚本自动化,您可以解压缩第一级zip并保留所需的压缩工件。

如果您需要向其他人提供此链接,则需要另一种解决方案。

备选方案1:
构建完成后,执行构建后步骤,该步骤将获取您的工件,并将其重命名为MyJob-latest.zip,但您将丢失文件名中的版本。您也可以选择复制而不是重命名,但最终会有两倍的空间用于存储这些工件。

备选方案2(推荐): 作为构建后操作,将工件上载到中央存储库。它可以是Artifactory,甚至是普通的SVN。上传时,它将重命名为MyJob-latest.zip,前一个将被覆盖。这样,您就拥有了一个静态链接,该链接始终包含lastSuccessfulBuild

中的最新工件

答案 1 :(得分:0)

实际上有一个插件可以分配别名来构建你运行的插件,我发现它非常方便: Build Alias Setter Plugin

例如,您可以使用它为您自己的版本号形式为构建分配别名,而不是(或者更确切地说,另外)为内部Jenkins分配的构建号。 我发现将它与 EnvInject plugin (或您最喜欢的变体)结合使用通常是最实用的:您可以使用值导出env变量(例如MY_VAR = xyz)目标版本或名字对象,然后在作业配置中插件提供的“令牌宏别名”配置中使用${ENV,var="myvar"}形式。

如果您有这样的需要,也可以使用它以“lastSuccesful”的形式分配别名,这样您就可以区分不同类型的成功(或其他状态)构建。

等等你了!您也可以将/*zip*/技巧与别名设置器结合使用。