Hi, I am looking for some help regarding the Pipeline Global Library <https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/README.md> functionality.
it seems like there is no way (or at least no straight way) to create a script that will hold both predefined properties and pipeline methods. I need to do this in order to write a wrapper to some Artifactory <https://github.com/JFrogDev/project-examples/tree/master/jenkins-pipeline-examples> functionality to be used in multiple pipelines. I need the Artifactory api to be placed inside the global library so I can call it with simple calls, yet those methods need to interact with a single-per-build Artifactory object instance which holds the Artifactory identity and a global build info object to aggregate the published artifacts info into. the naive implementation was something like this: > server = Artifactory.server('artifactory-server-id') buildInfo = Artifactory.newBuildInfo() > def upload(file, target) { def uploadSpec = "{....$file,.....$target......}" > > server.upload(uploadSpec, buildInfo) > > } def publisInfo() { server.publishBuildInfo(buildInfo) > > } I managed to implement it fairly easily using the fileLoader plugin, but pulling from the external git seems to be problematic from various reasons. I thought implementing it as a Global Library would be fairly easy, but is seems to be much more pain that I thought. the script itself is indeed recognized as the artifactory variable (the script is called artifactory.groovy and placed in the vars folder), but when I call the artifactory.upload method I get the following error: > No such property: server for class: groovy.lang.Binding > > which suggests that the server property wasn't defined as I expected (and as happens in the fileLoader method of running things). I then tried to create some sort of functionality that will define these properties only if they are not yet defined. something like this.server = this.server ?: Artifactory.server('artifactory-server-id') or calling on binding.variables.containsKey("server") inside an if statement, but this kind of logic seems to throw the entire pipeline into an infinite recursion. I will appreciate any idea, workaround or alternative way to achieve the same effect. calling Artifactory.server('artifactory-server-id') in each method is an option, but I can't call Artifactory.newBuildInfo() inside a method since the object needs be used on all upload calls. right now it seems like the only way is to keep those in the actual pipeline script, which ruins much of the idea of keeping all Artifactory management inside artifactory.groovy Itai -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/36998b3d-9089-4823-8118-8114b1933c67%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.