繁体   English   中英

使用 Jenkins 从 Artifactory 获取 BuildInfo

[英]Get BuildInfo From Artifactory Using Jenkins

使用 Jenkins DSL,我可以使用 Artifactory.newBuildInfo 创建和发布构建信息,但我正在寻找补充方法来读取在 Artifactory 上生成的 BuildInfo JSON 数据。 已经浏览了许多资源。 任何建议,将不胜感激。

Artifactory REST API看来,您确实可以检索 buildInfo。 我希望这也必须从 jenkins 插件中公开。

Build Info
Description: Build Info
Since: 2.2.0
Security: Requires a privileged user with deploy permissions (can be anonymous)
Usage: GET /api/build/{buildName}/{buildNumber}
Produces: application/vnd.org.jfrog.build.BuildInfo+json
...

JFrog 在 github 上的项目示例和他们的jenkins 插件一样是极好的资源

通过快速搜索,您似乎定义了一个下载规范,然后使用 server.download 方法(请参阅在 Jenkins 中使用管道作业

def buildInfo1 = server.download downloadSpec

上一个答案创建了一个新的 buildInfo,它不会将原始 buildInfo 下载到我已经尝试了几天试图弄清楚如何做原始海报想要做的事情。 我成功的最好方法是将 buildinfo 下载到哈希表中,使用它,然后通过 REST 调用上传更改。

                    def curlstr = "curl -H 'X-JFrog-Art-Api:${password}' ${arturl}api/build/${buildName}/${buildNumber}"
                    def buildInfoString = sh(
                            script: curlstr,
                            returnStdout: true
                    ).trim()
                    buildInfo = (new JsonSlurperClassic().parseText(buildInfoString))
                    sh("echo '${JsonOutput.toJson(buildInfo)}'|curl -XPUT  -H 'X-JFrog-Art-Api:${password}' -H 'Content-Type: application/json'  ${arturl}api/build --upload-file - ")

我能够使用这种技术修改工件存储库中的 buildInfo。 没有我想要的那么干净。 我也无法让 jfrogCLI 修改现有的 buildInfo 文件。

对于任何值得我尝试做的事情的意图是推广 docker 工件并在执行时更改名称。 我发现没有办法向工件表达这一点,而不涉及将工件下载到 docker 然后再次推送它。 如果来自@jfrog 的人能告诉我如何做,我会很高兴。

更新:注意! 我问错了。 这是您在声明性管道脚本中获取本地 BuildInfo-Object 的方式。


我通过使用来自 jenkins-artifactory-plugin 的内部 api 来管理这个。

    // found in org.jfrog.hudson.pipeline.declarative.utils.DeclarativePipelineUtils

     /**
     * Get build info as defined in previous rtBuildInfo{...} scope.
     *
     * @param rootWs            - Step's root workspace.
     * @param build             - Step's build.
     * @param customBuildName   - Step's custom build name if exist.
     * @param customBuildNumber - Step's custom build number if exist.
     * @return build info object as defined in previous rtBuildInfo{...} scope or a new build info.
     */
    public static BuildInfo getBuildInfo(FilePath rootWs, Run<?, ?> build, String customBuildName, String customBuildNumber, String project) throws IOException, InterruptedException {
      ...
    }

使用此代码,您可以在声明性管道脚本步骤中获取 BuildInfo。

def buildInfo = org.jfrog.hudson.pipeline.declarative.utils.DeclarativePipelineUtils.getBuildInfo(new hudson.FilePath(new java.io.File(env.WORKSPACE)), currentBuild.rawBuild, null, null, null);

更新:当心自定义构建名称和编号。 如果您定义了自定义构建名称和/或构建编号,则必须通过getBuildInfo调用为其提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM