小编典典

别名詹金斯工件URL

jenkins

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)本身无法做到这一点,那么也许有一个插件?


阅读 246

收藏
2020-07-25

共1个答案

小编典典

从未见过任何此类插件,但是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

2020-07-25