2016-04-01 70 views
1

我有點憋屈,爲什麼當我在詹金斯Scriptler運行下面的腳本和腳本控制檯它的工作原理,但在動態使用時,當失敗選擇參數(Scriptler),它失敗,出現錯誤:詹金斯[動態選擇參數(Scriptler)查詢證書信息

Error: groovy.lang.MissingPropertyException: No such property: com for class: Script1 

我只能假設它是與使用類com.cloudbees.plugins.credentials.CredentialsProvider被稱爲做。

下面是腳本:

/*** BEGIN META { 
"name" : "GetRemoteNasFolderList", 
"comment" : "Retrieve a list of folder names (in reverse order) from a remote NAS location.", 
"parameters" : [ 'ENVIRONMENT', 'SHARE_PATH', 'FOLDER_PATH' ], 
"core": "1.565", 
"authors" : [{ 
    name : "Authors Name" 
}] 
} END META**/ 

import jenkins.model.Jenkins 

try { 
    // params 
    def env = ENVIRONMENT // 'DEV" or 'TEST' or 'PROD' 
    def share_path = SHARE_PATH 
    def folder_path = FOLDER_PATH 

    String user_domain = '' 
    String nas_path = '' 

    switch (env) { 
    case 'DEV': 
     user_domain = 'dev'; 
     nas_path = 'nas_host.dev.company.com.au'; 
     break; 
    case 'TEST': 
     user_domain = 'test'; 
     nas_path = 'nas_host.test.company.com.au'; 
     break; 
    case 'PROD': 
    default: 
     user_domain = 'prod'; 
     nas_path = 'nas_host.prod.company.com.au'; 
    } 

    String user_name = 'myUserName' 
    def full_name = user_domain + '\\' + user_name 
    String pass_word = '' 
    def found = false 

    def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
     com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, 
     Jenkins.instance, 
     null, 
     null 
    ); 

    for (c in creds) { 
    if (c.username == full_name) { 
     pass_word = c.password 
     found = true 
    } 
    } 

    if (found == true) { 
    url = "smb://" + nas_path + "/" + share_path + "/" + folder_path; 

    println("Url: "+url) 
    // println(user_domain+"\\"+user_name+", "+pass_word) 

    auth = new jcifs.smb.NtlmPasswordAuthentication(user_domain, user_name, pass_word); 
    dir = new jcifs.smb.SmbFile(url, auth); 

    folders = [] 

    for (jcifs.smb.SmbFile f : dir.listFiles()) 
    { 
     folders.push(f.getName().replace('/','')) 
    } 

    return folders.sort().reverse() 
    } else { 
    print("Credential entry not found for (" + full_name + ")") 
    } 

} catch (e) { 
    return ["Error: "+e] 
} finally { 
} 

任何想法,任何人。

回答

0

Error: groovy.lang.MissingPropertyException: No such property: xx for class: yy

典型的錯誤消息,如果你缺少import參考,你有沒有試過引用的一切嗎?

import jenkins.model.* 
import com.cloudbees.plugins.credentials.* 
import com.cloudbees.plugins.credentials.common.* 
import com.cloudbees.plugins.credentials.domains.*; 

也許這就是Jenkins Scriptler和腳本控制檯在默認情況下所做的動作選擇參數(Scriptler)所沒有的。

編號:https://github.com/chef-cookbooks/jenkins/issues/174

+0

是的,我有。在這篇文章之前,再次爲了理智。相同的錯誤消息。 – AHendley

+0

剛剛嘗試過使用使用Scriptler腳本並正在工作的不同插件(活動選擇參數)。 爲什麼我以前沒有嘗試過,我不知道,但現在它讓我感到動態參數沒有,以及根源是什麼。我可能應該繼續前進並使用可行的方法,但它存在於插件中的錯誤。 – AHendley

0

切換到使用不同的插件(主動選擇參數),使得使用Scriptler腳本,現在的工作。