Replaying a dynamically loaded library will load the latest version of the library and not the library available at the time of the build.
Â
Reproduction Steps:
(1) Submit following file to Perforce:
//depot/lib_autoload/libs/src/com/f5/v4/Device.groovy
Â
#!groovy package com.f5.v4class Device implements Serializable { static void main() { println("This is Device in the Library I EDITED THIS.") } static void test() { println("This is test in Device in the Library") } static String test2() { return "This is test2() in Device in the Library" } }
(2) Create a pipeline job with code similar to:
Â
Â
def f5Lib
timestamps{
try {
node ('master') {
f5Lib = loadF5Lib()
def buildData = f5Lib.com.f5.v4.Device.test2();
echo buildData
}
}
catch (e) {
throw e
} echo "Running some tests here..."
}
// Load a specific Library
def loadF5Lib() {
def lib = library( identifier : '@now',retriever: modernSCM(globalLib(charset: 'none', credential: 'JenkinsMaster', id: '9bb4320c-c31c-46ce-8c5f-68872f519067', path: '//depot/lib_autoload/libs/...')))
return lib
}
(3) Run the job (Build#1). The following text is seen in the console log:
Â
Â
This is test2() in Device in the Library
(4) Change the returned text in the library method ' test2' to be:
Â
Â
static String test2() { return "This is the edited test2() in Device in the Library" }
Â
(5) Run the job (Build #2)
(6) Replay Build #1. The text displayed is the latest text from the edit made in step (4):
This is the edited test2() in Device in the Library
Expected Result:
This is test2() in Device in the Library
Â
Â