我正在将一堆旧脚本转换为 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/