如何替换Jenkins声明性管道中的工件文件规范“规范变量”

8cdiaqws  于 2022-12-26  发布在  Jenkins
关注(0)|答案(1)|浏览(139)

我正在将一堆旧脚本转换为Jenkins pipeline作业。对于我们的许多脚本,我们使用JFrog CLI来处理与Artifactory的所有交互。对于Jenkins pipeline,我们现在可以选择通过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,或者添加另一个函数来手动修改这个文件以包括变量,尽管理想情况下我希望通过包括的管道集成来干净地完成所有事情。
如有任何建议,我们将不胜感激。

k75qkfdt

k75qkfdt1#

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。

相关问题