Saya telah membuat perpustakaan bersama pipa untuk membuat hash ruang kerja sehingga kita menghindari masalah panjang jalur pada build windows kita:
import java.security.MessageDigest
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
ws(getWsHash(config.length ?: 10)) {
body()
}
}
def getWsHash(length) {
def md5Hash = MessageDigest.getInstance("MD5").digest("${env.JOB_NAME}_${env.EXECUTOR_NUMBER}".bytes).encodeHex().toString()
return md5Hash.substring(0,10)
}
yang ingin saya gunakan seperti ini:
node('windows') {
wsHash {
stage('Checkout') {
checkout scm
}
stage('Build') {
bat '.\\src\\Build.cmd'
}
}
}
Namun ini gagal karena variabel scm
adalah nol. Saya telah berhasil memperbaikinya dengan mengubah ini:
node('windows') {
def scm = scm
wsHash {
stage('Checkout') {
checkout scm
}
stage('Build') {
bat '.\\src\\Build.cmd'
}
}
}
Namun ini kikuk dan tidak berfungsi untuk semua kasus. Misalnya kami juga menggunakan artefaktori dan ketika mencoba menggunakan ini:
def server = Artifactory.server('advancedcsg')
Saya mendapatkan pengecualian berikut:
java.lang.NullPointerException: Tidak dapat memanggil metode server() pada objek null
Jika saya mencoba "trik" dengan melakukan:
def Artifactory = Artifactory
Saya mendapatkan pengecualian ini:
java.lang.UnsupportedOperationException: Menolak marshal org.codehaus.groovy.runtime.GStringImpl karena alasan keamanan
Dapatkah seseorang membantu menjelaskan apa yang terjadi di sini dan kesalahan apa yang saya lakukan?