Jenkins工件URL允许抽象"最后成功的构建",而不是
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已经内置了类似的功能.
您可以/*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并保留所需的压缩工件.
如果您需要将此链接提供给其他人,则需要一个替代解决方案.
备选方案1:
构建完成后,执行构建后步骤,该步骤将获取您的工件,并将其重命名为MyJob-latest.zip
,但您将丢失文件名中的版本.您也可以选择复制而不是重命名,但最终会有两倍的空间用于存储这些工件.
备选方案2(推荐):
作为构建后操作,将工件上载到中央存储库.它可以是Artifactory,甚至是普通的SVN.上传时,它将被重命名MyJob-latest.zip
,前一个将被覆盖.这样,您就拥有了一个始终具有最新工件的静态链接lastSuccessfulBuild