ฉันได้สร้างไลบรารี่ที่ใช้ร่วมกันไปป์ไลน์เพื่อสร้างแฮชพื้นที่ทำงานเพื่อหลีกเลี่ยงปัญหาความยาวเส้นทางบนบิลด์ windows ของเรา:
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)
}
ซึ่งฉันต้องการใช้แบบนี้:
node('windows') {
wsHash {
stage('Checkout') {
checkout scm
}
stage('Build') {
bat '.\\src\\Build.cmd'
}
}
}
อย่างไรก็ตาม สิ่งนี้ล้มเหลวเนื่องจากตัวแปร scm
เป็นโมฆะ ฉันจัดการเพื่อแก้ไขโดยเปลี่ยนเป็นสิ่งนี้:
node('windows') {
def scm = scm
wsHash {
stage('Checkout') {
checkout scm
}
stage('Build') {
bat '.\\src\\Build.cmd'
}
}
}
อย่างไรก็ตาม นี่เป็นเรื่องยุ่งยากและใช้งานไม่ได้กับทุกกรณี ตัวอย่างเช่น เรายังใช้ artifactory และเมื่อพยายามใช้สิ่งนี้:
def server = Artifactory.server('advancedcsg')
ฉันได้รับข้อยกเว้นต่อไปนี้:
java.lang.NullPointerException: ไม่สามารถเรียกใช้เมธอดเซิร์ฟเวอร์ () บนวัตถุ null
ถ้าฉันลองใช้ "เคล็ดลับ" โดยทำ:
def Artifactory = Artifactory
ฉันได้รับข้อยกเว้นนี้:
java.lang.UnsupportedOperationException: ปฏิเสธที่จะ marshal org.codehaus.groovy.runtime.GStringImpl ด้วยเหตุผลด้านความปลอดภัย
ใครช่วยอธิบายสิ่งที่เกิดขึ้นที่นี่และสิ่งที่ฉันทำผิดได้ไหม