github.com/jaylevin/jenkins-library@v1.230.4/documentation/jenkins_workspace/Jenkinsfile (about) 1 import groovy.json.JsonOutput 2 import groovy.json.JsonSlurper 3 4 import jenkins.model.Jenkins 5 6 unresolvableCalls = [ 7 podTemplate:'kubernetes', 8 container: 'kubernetes', 9 10 docker: 'docker-plugin', 11 12 usernamePassword: 'credentials-binding', 13 string: 'credentials-binding', 14 file: 'credentials-binding', 15 ] 16 17 node() { 18 stage('Resolve Plugins') { 19 try { 20 resolvePlugins() 21 } catch(Exception e) { 22 def result = System.getenv()['result'] 23 new File(new File(result).getParentFile(), 'FAILURE').text = "${e.getMessage()}" 24 throw e 25 } 26 } 27 } 28 29 def resolvePlugins() { 30 def stepCallMapping = new JsonSlurper().parseText(new File(System.getenv()['calls']).text) 31 32 def stepPluginMapping = [:] 33 34 println "[INFO] Resolving plugins ..." 35 36 for(def step in stepCallMapping) { 37 def resolvedPlugins = [:] 38 for(def call in step.value) { 39 def resolvedPlugin = resolvePlugin(call) 40 if (! resolvedPlugin) { 41 resolvedPlugin = unresolvableCalls[call] 42 if(! resolvedPlugin) resolvedPlugin = 'UNIDENTIFIED' 43 } 44 if(resolvedPlugins[resolvedPlugin] == null) 45 resolvedPlugins[resolvedPlugin] = (Set)[] 46 resolvedPlugins[resolvedPlugin] << call 47 stepPluginMapping.put(step.key,resolvedPlugins) 48 } 49 } 50 51 def result = System.getenv()['result'] 52 new File(result).write(new JsonOutput().toJson(stepPluginMapping)) 53 54 println "[INFO] plugins resolved. Result: ${result}." 55 } 56 57 def resolvePlugin(call) { 58 59 def plugins = Jenkins.get().pluginManager.getPlugins() 60 61 def s = new org.jenkinsci.plugins.workflow.cps.Snippetizer() 62 63 def pDescs = s.getQuasiDescriptors(false) 64 65 66 for(def pd in pDescs) { 67 if(pd.getSymbol() == call) 68 return pd.real.plugin?.shortName 69 } 70 return null 71 }