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本身无法做到这一点,也许还有一个插件?
答案 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*/
技巧与别名设置器结合使用。