3

我正在将一堆旧脚本转换为 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,或者添加另一个函数来手动修改此文件以包含变量,但理想情况下,我希望通过包含的管道集成干净地完成所有事情。

任何建议将不胜感激。

4

1 回答 1

3

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/"
                                }
                        ]
                }"""
             )
         }
      }
   }
}

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

如果它不能满足您的需求,另一种方法是使用第三方功能或您提到的 JFrog CLI。

于 2021-02-11T08:49:12.923 回答