6
votes

I am using the OpenShift Jenkins image within an OpenShift Cluster. This default Jenkins image results in a Jenkins container that is preconfigured to point to my Kubernetes cluster. Additionally, the container has two Kubernetes pod templates defined, one for maven and one for nodejs.

enter image description here

enter image description here

What I would now like to do is use a declarative pipeline and reference these pods. I tried the following

  agent {
     kubernetes {
     //cloud 'kubernetes'
     label 'maven'
     }
  }

But that gives an error stating

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

WorkflowScript: 4: Missing required parameter for agent type "kubernetes": containerTemplate @ line 4, column 10.

        kubernetes {

        ^

All of the (examples) that I can find for declarative pipelines show the pod templates being defined when the agent is specified.

Is it possible to reuse already defined templates in a declarative pipeline?

2
As you have used the pre-configured OpenShift Jenkins image, it has OpenShift plugin (different from the Kubernetes plugin) - more information can be found at docs.openshift.org/3.9/dev_guide/openshift_pipeline.htmlMarek Jelen
Thank you @Marek but I am not sure if the plug in that you referenced is for slave provisioning. The OpenShift pipeline plug in seems to be for communicating with OpenShift in order to manage OpenShift entities such as builds, deploys, pipelines... In fact the link you referenced seems to mention kubernetes plug in when it discusses slave provisioning.ssc327

2 Answers

5
votes

Here is an example using a pre-defined pod template.

pipeline {
  agent {
      label "maven"
  }
  stages {
    stage('Run maven') {
      steps {
        sh 'mvn -version'
      }
    }
  }
}

Your original pipeline definition was in effect defining a brand new pod template and hence the error enforcing the requirement for containerTeamplates parameter. When using an existing template, you can simply specify the label in the agent block.

1
votes

In fact, the error is related to the use of a bad version of the Kubernetes plugin, you need at least la version 1.6 as described in the wiki page.