如何从 Jenkins 声明性管道替换 Artifactory 文件规范 "Spec Vars"

How to replace Artifactory File Spec "Spec Vars" from Jenkins Declarative Pipeline

我正在将一堆旧脚本转换为 Jenkins 管道作业。对于我们的许多脚本,我们使用 JFrog CLI 来处理与 Artifactory 的所有交互。使用 Jenkins 管道,我们现在可以选择通过 Artifactory 插件来完成。但是,我似乎找不到以这种方式替换文件内部变量的方法。

使用 JFrog CLI:

jfrog rt dl --spec spec.json  --spec-vars="foo=fooValue;bar=barValue"

当运行此命令时,spec.json内的所有${foo}${bar}实例将被替换为相应的值。一切都在一行中干净地工作。

使用 Jenkins 管道:

 rtDownload(
    serverId: 'Artifactory',
    spec: '''{
       "files": [
           {
              "pattern": "spec.json"
           }
        ]
    }'''
)

接着是

rtDownload(
   serverId: 'Artifactory',
   specPath: 'spec.json'
)

这为我提供了我想要的规范文件,并下载了列出的大部分文件,但未能找到需要变量的文件。我一直找不到任何选项来在文件下载的任何地方或之后的任何地方包含变量替换。

我仍然可以像平常一样在脚本中使用 JFrog CLI,或者添加另一个函数来手动修改此文件以包含变量,但理想情况下我希望通过包含的管道集成干净地完成所有工作。

如有任何建议,我们将不胜感激。

Jenkins Artifactory 插件目前不支持更改预定义的 FileSpec,就像 JFrog CLI 使用 spec-vars 选项所做的那样。

但是,如果您在管道中提供 FileSpec,则可以在 FileSpec 中设置变量,如下所示:

pipeline {
agent any
environment {
    fileVar="myfile"
}
stages {
    stage ('Download') {
        steps {
            rtDownload (
                serverId: SERVER_ID,
                spec: """{
                        "files": [
                                {
                                    "pattern": "generic-local/${fileVar}",
                                    "target": "/tmp/"
                                }
                        ]
                }"""
             )
         }
      }
   }
}

这意味着您现在将维护您的 FileSpec 作为 Jenkinsfile 的一部分而不是单独维护,这也将允许您避免每次都下载它。

如果它不能满足您的需求,替代方案是使用第三方功能或您提到的 JFrog CLI。