-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: groovy-plugin
-
Environment:groovy:2.0
Jenkins LTS 2.121.3
I am trying to execute this script as a step in a freestyle job.
Script was tested in the script console and it ran successfully. But it gets MissingProperty exception during the run.Â
The script is read from a file in workspace.
The script:
import hudson.util.Secretimport import com.cloudbees.plugins.credentials.CredentialsScope import com.cloudbees.plugins.credentials.domains.Domain import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl import com.cloudbees.hudson.plugins.folder.* import com.cloudbees.hudson.plugins.folder.properties.FolderCredentialsProvider.FolderCredentialsProperty credentials = [   [     'credential_type': 'StringCredentialsImpl',     'credentials_id': 'SECRET_ID',     'description': 'Super secret text',     'secret': 'secretsecret',     'folder': 'folder',     'folder_cred_domain': 'folder_cred_domain'   ] ] def addCredential(String credentials_id, def credential, String folder_name, String folder_cred_domain) {   def j = Jenkins.instance   boolean modified_creds = false   Domain domain   for (folder in j.getAllItems(Folder.class)) {     if (folder.name.equals(folder_name)) {       AbstractFolder<?> folderAbs = AbstractFolder.class.cast(folder)       Map folder_creds_map = folderAbs.getProperties().get(FolderCredentialsProperty.class).getDomainCredentialsMap()      store = folderAbs.getProperties().get(FolderCredentialsProperty.class).getStore()      domain = store.getDomains().find { it.getName() == folder_cred_domain }       if (!folder_creds_map[domain] || (folder_creds_map[domain].findAll {credentials_id.equals(it.id)}).size() < 1) {         if (folder_creds_map[domain] && folder_creds_map[domain].size() > 0) {           // Other credentials exist so should only append           folder_creds_map[domain] << credential         } else {           folder_creds_map[domain] = [credential]         }        modified_creds = true       }       // Save any modified credentials       if (modified_creds) {         println "--> ${credentials_id} credentials added to folder ${folder_name}."       } else {         println "--> Nothing changed. ${credentials_id} credentials already configured."       }     }   } } /**  Supports String credential provided by StringCredentialsImpl class.  Example:   [     'credential_type': 'StringCredentialsImpl',     'credentials_id': 'some-credential-id',     'description': 'A description of this credential',     'secret': 'super secret text'   ]  */ def setStringCredentialsImpl(Map settings) {   String credentials_id = ((settings['credentials_id'])?:'').toString()   String description = ((settings['description'])?:'').toString()   String secret = ((settings['secret'])?:'').toString()   String folder_name = ((settings['folder'])?:'').toString()   String folder_cred_domain = ((settings['folder_cred_domain'])?:'').toString()   addCredential(       credentials_id,       new StringCredentialsImpl(         CredentialsScope.GLOBAL,         credentials_id,         description,         Secret.fromString(secret)       ),       folder_name,       folder_cred_domain   ) } if(!binding.hasVariable('credentials')) {   credentials = [] } if(!(credentials instanceof List<Map>)) {   throw new Exception('Error: credentials must be a list of maps.') } //iterate through credentials and add them to Jenkins credentials.each {   if("set${(it['credential_type'])?:'empty credential_type'}".toString() in this.metaClass.methods*.name.toSet()) {     "set${it['credential_type']}"(it)   }   else {     println "WARNING: Unknown credential type: ${(it['credential_type'])?:'empty credential_type'}. Nothing changed."   } }
I am using Groovy plugin version 2.0 and Jenkins LTS 2.121.3. Stack trace attached.Â
Â