github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/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  }