2015-01-20 21 views
6

Jenkins'de bir 'Execute Groovy komut dosyası' adım adım var. Bu adım iki dosyadan oluşur: createWorkspaces.groovy adlı bir istemci dosyası ve WorkspaceBean.groovy adlı bir fasülye dosyası. Her ikisi de iş çalışma alanında aynı yerde yaşıyor.Jenkins groovy sınıf yolu sorunu - sınıfı çözemiyor sınıf

önce Jenkins 1,554 çalışan bu sorun olmadan koştu, ama 1.594 yükselttikten sonra aşağıdaki hatayı alıyorum: Ben yeni komut dosyası onay fonksiyonunda komut dosyalarını onayladı

/jenkins/workspace/testjob/scripts/groovy/createWorkspaces.groovy: 75: unable to resolve class WorkspaceBean 
@ line 75, column 21. 
     def workspace = new WorkspaceBean() 
        ^

1 error 

ve ben de yeri eklemiş Dosyaların iş adımındaki sınıf yolu parametresinin yanı sıra jenkins-core.jar dosyasının konumu.

Bunun neden çalışmadığı konusunda bir fikriniz var mı?

cevap

5

Bu, groovy eklentisinde bir hata gibi görünüyor. Eklenti yapılandırmasındaki Sınıf yolu alanına yollar eklemek, sınıf yolunu değiştirmez.

Bu işe yaramazsa:

Adding here does not work

eklentisi 'inşa sürecine enjekte ortam değişkenleri' aracılığıyla çalışmalarını bir CLASSPATH'E değişkeni gelmez ekleme.

Bu çalışır:

enter image description here

+0

Hata bildirimini Jenkins ekibine bildirdiniz mi? [İşte nasıl] (https://wiki.jenkins-ci.org/display/JENKINS/Issue+Tracking). – Lernkurve

+0

@JamesE, sizin çözümünüz işe yaramadı –

+2

Bu nasıl kabul edilir? gerçek sınıf yolunu yapıştır – sloven

1

deneyin dinamik kavanoz yüklemek için. Bu bulduğum son çalışma çözümü. Bu örnek yerel ağa kopya ağ klasörü içindir.

def file = new File("jcifs-1.3.18.jar") 
this.class.classLoader.rootLoader.addURL(file.toURI().toURL()) 


def auth_server = Class.forName("jcifs.smb.NtlmPasswordAuthentication").newInstance("domain", "username", "password") 
def auth_local = Class.forName("jcifs.smb.NtlmPasswordAuthentication").newInstance(null, "local_user", "password") 

def source_url = args[0] 
def dest_url = args[1] 
def auth = auth_server 

//prepare source file 
if(!source_url.startsWith("\\\\")) 
{ 
    source_url = "\\\\localhost\\"+ source_url.substring(0, 1) + "\$" + source_url.substring(1, source_url.length()); 
    auth = auth_local 
} 
source_url = "smb:"+source_url.replace("\\","/"); 
def source = Class.forName("jcifs.smb.SmbFile").newInstance(source_url,auth_server) 

//prepare destination file 
if(!dest_url.startsWith("\\\\")) 
{ 
    dest_url = "\\\\localhost\\"+ dest_url.substring(0, 1) + "\$" +dest_url.substring(2, dest_url.length()); 
    auth = auth_local 
} 
dest_url = "smb:"+dest_url.replace("\\","/"); 
def dest = Class.forName("jcifs.smb.SmbFile").newInstance(dest_url,auth_local) 
source.copyTo(dest) 
İlgili konular