[Kubernetes-Plugin] Declarative pipelines with Pod yaml, jnlp arguments issue

1,272 views
Skip to first unread message

Hung Do

unread,
May 1, 2018, 8:53:06 AM5/1/18
to Jenkins Users
Hi everyone,

I have a problem with this Jenkinsfile, which doesn't wants to build for me

#!/usr/bin/env groovy

pipeline {
  agent {
    kubernetes {
      label 'maven2'
      cloud 'openshift'
      serviceAccount 'jenkins'
      yaml """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: jnlp
    image: docker-registry.default.svc:5000/cicd/jenkins-slave-maven-centos7:v3.9
    imagePullPolicy: Always
    workingDir: /tmp
    args: ["${computer.jnlpmac} ${computer.name}"]
"""
        }
    }
    stages {
        stage('Check Java') {
            steps {
                sh 'java -version'
            }
        }
    }
}

With this Jenkinsfile, I get the following error

[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: computer for class: groovy.lang.Binding
        at groovy.lang.Binding.getVariable(Binding.java:63)
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
        at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:268)
        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
        at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
        at WorkflowScript.run(WorkflowScript:18)
        at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.call(jar:file:/var/lib/jenkins/plugins/pipeline-model-definition/WEB-INF/lib/pipeline-model-definition.jar!/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy:56)
        at WorkflowScript.run(WorkflowScript:3)
        at ___cps.transform___(Native Method)
        at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)
        at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
        at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:66)
        at sun.reflect.GeneratedMethodAccessor425.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
        at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
        at com.cloudbees.groovy.cps.Next.step(Next.java:83)
        at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
        at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
        at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
        at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
        at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
        at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$101(SandboxContinuable.java:34)
        at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.lambda$run0$0(SandboxContinuable.java:59)
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
        at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:58)
        at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
        at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:332)
        at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)
        at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)
        at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)
        at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
        at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

If I remove this part
args: ["${computer.jnlpmac} ${computer.name}"]

Then the Jenkinsfile gets accepted, the pod get started, but the container crashes because there are no arguments. It is the official openshift/jenkins-slave-maven-centos7:v3.9 image.
If I try scripted pipelines without the YAML format, it will work if I pass the args via the containertemplate syntax.

Am I doing something wrong here?

Hung Do

unread,
May 1, 2018, 8:56:53 AM5/1/18
to Jenkins Users
I am running on Kubernetes plug 1.6.0 and Jenkins 2.89.4 btw.

Matthew Ceroni

unread,
May 1, 2018, 1:55:23 PM5/1/18
to Jenkins Users
Why even over ride the JNLP container? Just use the default and add another container to the POD with your build tools (then you don't even have to use the YAML format since you won't require any of the extended benefits it provides). Then use the container step to execute in that container.

Hung Do

unread,
May 1, 2018, 2:18:36 PM5/1/18
to Jenkins Users
Ah I thought I could just use the JNLP from the openshift-slave-maven-centos7 directly. The end goal is to do the build with the openshift-slave-maven container and do some integration tests with an attached mysql container, while at the end also do some openshift CLI commands with the maven container. For example, I started with the scripted pipelines syntax first. 

podTemplate(label: 'maven2', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
 containerTemplate(name: 'jnlp', image: 'docker-registry.default.svc:5000/cicd/jenkins-slave-maven-centos7:v3.9', alwaysPullImage: true, workingDir: '/tmp', args: '${computer.jnlpmac} ${computer.name}', envVars: [
   containerEnvVar(key: 'MAVEN_MIRROR_URL', value: 'xxxxxx')
 ]),
 containerTemplate(name: 'mysql', image: 'mysql:5.6', alwaysPullImage: true, envVars: [
   containerEnvVar(key: 'MYSQL_DATABASE', value: 'xxx'),
   containerEnvVar(key: 'MYSQL_USER', value: 'xxx'),
   containerEnvVar(key: 'MYSQL_PASSWORD', value: 'xxx'),
   containerEnvVar(key: 'MYSQL_RANDOM_ROOT_PASSWORD', value: 'yes')], ports: [portMapping(containerPort: 3306)])], volumes: [
 emptyDirVolume(mountPath: '/var/lib/mysql')
 ]
 ) {

node('maven2') {
   stage('checkout') {
       checkout scm
   }

        stage('check java') {
           sh "java -version"
       }

This worked out perfectly fine, I thought mapping  it 1:1 to the declarative + yaml format would achieve the same result, but that was not the case.

Op dinsdag 1 mei 2018 19:55:23 UTC+2 schreef Matthew Ceroni:

Carlos Sanchez

unread,
May 1, 2018, 2:55:32 PM5/1/18
to jenkins...@googlegroups.com
Just remove the 'args' parameter, it would use environments variables 

--
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-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/2424ca0f-f4d9-48ed-ab0f-c1a90076df07%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Hung Do

unread,
May 1, 2018, 5:51:08 PM5/1/18
to Jenkins Users
I have removed the 'args' parameter from the yaml in the declarative syntax and the container(openshift-slave-maven-centos7) just crashes unfortunately.

    

Op dinsdag 1 mei 2018 20:55:32 UTC+2 schreef Carlos Sanchez:

Hung Do

unread,
May 1, 2018, 5:58:55 PM5/1/18
to Jenkins Users
Sorry, for another post. I don't know how to edit the previous post, I forgot to add this, when I removed the args parameter and saw the created pod with the crashing container, I have looked into the 'created yaml file' in Openshift and saw this :



Op dinsdag 1 mei 2018 23:51:08 UTC+2 schreef Hung Do:
Reply all
Reply to author
Forward
0 new messages