| If I setup a external library for different pod templates and use them also as documented it doesn't work: Here is the library:
#!groovy
package myjenkins
public void mavenTemplate(body) {
podTemplate(label: label,
containers: [
containerTemplate(name: 'maven', image: 'maven:3.5.2-jdk-8', command: 'cat', ttyEnabled: true)
],
volumes: [
secretVolume(secretName: 'maven-settings', mountPath: '/root/.m2'),
persistentVolumeClaim(claimName: 'maven-local-repo', mountPath: '/root/.m2nrepo')
]) { body() }
}
public void helmTemplate(body) {
podTemplate(label: label,
containers: [
containerTemplate(name: 'helm', image: 'lachlanevenson/k8s-helm:latest', command: 'cat', ttyEnabled: true)
],
volumes: []) { body() }
}
and here is the Jenkinsfile:
@Library('myjenkins')
import myjenkins.PodTemplates
label = "worker-${UUID.randomUUID().toString()}"
slaveContainers = new PodTemplates();
slaveContainers.mavenTemplate {
slaveContainers.helmTemplate {
node(label) {
def myRepo = checkout scm
def gitCommit = myRepo.GIT_COMMIT
def gitBranch = myRepo.GIT_BRANCH
def shortGitCommit = "${gitCommit[0..10]}"
def previousGitCommit = sh(script: "git rev-parse ${gitCommit}~", returnStdout: true)
stage('Test') {
try {
container('maven') { sh """
pwd
echo "GIT_BRANCH=${gitBranch}" >> /etc/environment
echo "GIT_COMMIT=${gitCommit}" >> /etc/environment
mvn -B test
""" }
}
catch (exc) {
println "Failed to test - ${currentBuild.fullDisplayName}"
throw(exc)
}
}
stage('Build') {
container('maven') { sh "mvn -B package" }
}
stage('Run helm') {
container('helm') {
sh "helm list"
}
}
}
}
}
This will result in the following error:
[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: label for class: com.masergy.jenkins.PodTemplates
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
This all works when I define the podTempaltes directly in the Jenkinsfile so I am pretty sure the plugin itself is setup correctly. I just don't know enough about Groovy to fix this issue myself so maybe somebody could fix the documentation so that it works as documented? Thanks |