jenkins - 如何从 Jenkins 声明式管道中替换 Artifactory File Spec "Spec Vars"

标签 jenkins jenkins-pipeline artifactory jfrog jfrog-pipelines

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

jfrog rt dl --spec spec.json  --spec-vars="foo=fooValue;bar=barValue"
运行此命令时,${foo} 的所有实例和 ${bar} spec.json 内部将被替换为相应的值。一切都用一行干净利落地工作。
使用 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。

关于jenkins - 如何从 Jenkins 声明式管道中替换 Artifactory File Spec "Spec Vars",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66144963/

相关文章:

ssh - 使用 Jenkins 中的 SSH 插件发布传输 0 个文件

jenkins - 从属性文件加载属性并使其在整个作业/管道中可用 - Jenkins 声明性语法

git - 应该使用 Git 来存储持续集成构建吗?

npm - JFrog Xray 是否扫描 package.json 依赖项以查找易受攻击的包?

nuget - Artifactory NuGet 安装未获取最新的软件包版本

jenkins - 如何检测 Jenkins 声明式管道中哪个并行阶段失败?

git - 如何加速使用 jenkins 触发的 git pull?

Jenkinsfile 失败一步,继续剩下的

bash - 如何从 Jenkins 管道 Groovy 脚本调用资源文件中定义的 bash 函数?

jenkins - 如何自动清理 master 上的工作区文件夹 "...@script"和 "...@libs"以进行管道构建?