我尝试使用groovy将Snyk安装添加到Jenkins。插件已安装,并且我可以在全局工具配置中看到安装选项:
问题是,在我手动添加安装程序并单击“保存”之前,描述符不可用。如果我不手动执行此任务(我希望避免),则会导致代码失败,并显示以下错误消息“Cannot invoke method setInstallations()on null object”
我的代码:
import hudson.model.*
import jenkins.model.*
import hudson.tools.*
import hudson.tasks.*
import io.snyk.jenkins.tools.SnykInstaller
import io.snyk.jenkins.tools.SnykInstallation
def snyk_name = "Snyk"
def snyk_home = ""
def snyk_installer = new SnykInstaller("", "latest", 24)
def snyk_properties = new InstallSourceProperty([snyk_installer])
def instance = Jenkins.getInstance()
println("[init.groovy.d] START Configuring Snyk Installation...")
// Get the GlobalConfiguration descriptor of Snyk plugin.
def snyk_conf = instance.getDescriptor("io.snyk.jenkins.SnykStepBuilder.SnykStepBuilderDescriptor")
def snyk_inst = new SnykInstallation(
snyk_name,
snyk_home,
[snyk_properties]
)
// Only add the new Snyk setting if it does not exist - do not overwrite existing config
def snyk_installations = snyk_conf.getInstallations()
def snyk_inst_exists = false
snyk_installations.each {
installation = (SnykInstallation) it
if (snyk_inst.getName() == installation.getName()) {
snyk_inst_exists = true
println("Found existing installation: " + installation.getName())
}
}
if (!snyk_inst_exists) {
snyk_installations += snyk_inst
snyk_conf.setInstallations((SnykInstallation[]) snyk_installations)
snyk_conf.save()
}
// Save the state
instance.save()
println("[init.groovy.d] END")
有没有什么方法可以通过编程来完成我想做的事情?
1条答案
按热度按时间bvjxkvbb1#
在我的本地Jenkins(v 2.263.1)上测试了你的groovy之后,我想到了下面的方法,然后对我起作用:
在基本术语中,
SnykInstaller
期望4个值,而不是3个。Groovy还将第3个值作为整数,而它期望的是长值。参考文献: