使用 DSL 脚本从 Jenkins 中提取人工信息

Pulling Artifactory Information From Jenkins Using DSL Script

前言: 我在 Jenkins\Artifactory\DSL space 中还很新手,所以我可能听起来像是在笨手笨脚。

我正在开发 Jenkins DSL 脚本来提取信息 on\about 我们的 Artifactory 设置。

我没有 Jenkins 或 Artifactory 的管理员权限,只有正常的登录凭据和 运行 东西。

Jenkins 服务器有 Artifactory 凭据并安装了插件。

所以我的问题是...

我正在使用这段代码;

// Get Default Artifactory Info
import jenkins.model.*
def instance = Jenkins.get()
def defaultServer = Jenkins.instance.getDescriptor('org.jfrog.hudson.ArtifactoryBuilder').getArtifactoryServers()[0]
def defaultArtifactoryName = defaultServer.getName()
def defaultArtifactoryUrl = defaultServer.getUrl()
def defaultArtifactoryCredId = defaultServer.getDeployerCredentialsConfig().getCredentialsId()

提取关于我们的 Artifactory 服务器的信息,然后作为变量传递。

它以前工作正常,但在(由我们的管理员)更新后,它不再工作了。

它在 Jenkins 控制台中抛出的错误是...

No signature of method: org.jfrog.hudson.ArtifactoryBuilder$DescriptorImpl.getArtifactoryServers() is applicable for argument types: () values: []

我尝试搜索 getArtifactoryServers 方法但似乎找不到任何东西时,有人能给我指出任何文档的方向吗?

版本:

提前致谢!

看起来你是 运行 内部 Jenkins Artifactory 插件代码。

getArtifactoryServers 最近更改为 getJfrogInstances。 我不确定您要做什么,但要获得与以前相同的结果,您应该按以下方式修改脚本:

import jenkins.model.*
def instance = Jenkins.get()
def defaultServer = Jenkins.instance.getDescriptor('org.jfrog.hudson.ArtifactoryBuilder').getJfrogInstances()[0]
def jfrogInstanceId = defaultServer.getId()
def defaultArtifactoryUrl = defaultServer.getArtifactoryUrl()
def defaultArtifactoryCredId = defaultServer.getDeployerCredentialsConfig().getCredentialsId()

谢谢,成功了!

我认为它发生了变化,我只是找不到任何说它发生过或指出它发生变化的内容。

你会不会碰巧有一个 link 到我可以阅读 getJfrogInstances 的所有 methods\descriptors 的地方?

我在看这里: https://javadoc.jenkins-ci.org/hudson/model/Descriptor.html

但是他们没有列出 getArtifactoryUrl(),所以我猜我找错地方了。

再次感谢!

作为@yahavi ,你不应该使用插件的代码,除非你同意你的 code/pipeline 在插件更新时中断。

您可以使用 DSL 步骤 getArtifactoryServer 来获取您想要的信息。

在脚本管道中:

script {
    def artifactoryServer = getArtifactoryServer 'jfrog_instance_id'
    // To see all properties (Please note that this might expose the credentials!)
    artifactoryServer.properties.each { println "$it.key -> $it.value" }
    // To get URL
    echo artifactoryServer.url
    // To get credentialsId
    echo artifactoryServer.credentialsId
    // etc...
}

在声明性管道中:在声明性管道中,如果没有 script 块,您将无法分配变量,但您可以在声明性管道中将属性作为字符串获取。例如,您可以使用 ${getArtifactoryServer('jfrog_instance_id').url}

获取 Artifactory URL

PS:jfrog_instance_id 是您的管理员在 Jenkins 中提供的实例 ID。你应该可以向他们索取身份证件。 Refer Configuring Jenkins Artifactory Plug-in