Image name and version of containerTemplate by variable created during execution of pipeline?

58 views
Skip to first unread message

WANG, YAN-HONG

unread,
Aug 11, 2017, 6:14:55 AM8/11/17
to jenkins...@googlegroups.com
Hello all,

I saw the tutorial with jenkins-kubernetes-plugin.
https://github.com/jenkinsci/kubernetes-plugin

The examples of containerTemplate are all created in the beginning of groovy file.
And the image name with version number are fixed, too.
Example like this below.

containerTemplate(
    name
: 'maven',
    image: 'maven:3.3.9-jdk-8-alpine',
    ttyEnabled: true,
    command: 'cat'
)

Is that possible or some syntax can implement container created during execution of pipeline?
So this container could also run in the same Pod.
Maybe the syntax looks like below.

//////////////////////////////////////////////////////////////////////

......
......

containerTemplate(
    name
: 'maven',
    image: 'myregistry:5000/$ImageName:$VersionNumber',
    ttyEnabled: true,
    command: 'cat'
)

......
......

//////////////////////////////////////////////////////////////////////

Thanks very much.

BR
Hong

Carlos Sanchez

unread,
Aug 11, 2017, 8:57:50 AM8/11/17
to jenkins...@googlegroups.com

Have you tried?


--
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/CADLWyO3katWvkMezE80XJ8u%3DFna_QW5%2BjWT12PYa%3Dar_BUgAxQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

YAN-HONG WANG

unread,
Aug 11, 2017, 5:55:11 PM8/11/17
to Jenkins Users
Hello Carlos,

I tried it already with all plain hard code. And insert in the execution of pipeline.

Something like this below:

podTemplate(

  label: "pod",

  containers: [
    containerTemplate(
      name: "worker",
      image: "myregistry:5000/jenkins-worker:latest",
      envVars:[
        containerEnvVar( key: "PGUSER", value: "pguser" ),
        containerEnvVar( key: "PGPASSWORD", value: "pgpassword" )
      ],
      alwaysPullImage: true,

      ttyEnabled: true,
      command: "cat"
    )
  ]
)
{
node( "pod" ) {

  container( "worker" ) {

    stage( "DB Tests" ) {

      containers: [
        containerTemplate(
          name: "db",
          image: "myregistry:5000/postgresql-server:1.0",
          alwaysPullImage: true,
          ttyEnabled: true
        )
      ]


      container( "db" ) {
        sh "psql --host=127.0.0.1 --dbname=$project --echo-all --command='SELECT timestamp FROM info'"
      }
    }
  }
}
}

And I got the error message result below:

Waiting for container container [db] of pod [slave-87s57-3zc4x] to become ready.

Do I make something wrong in script?
Or that need to be implemented by other form or syntax?


Thanks very much.

BR
Hong

Carlos Sanchez

unread,
Aug 14, 2017, 3:42:11 AM8/14/17
to Jenkins Users
you can't define containers outside podTemplate

To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/6d679b02-1099-45a8-a35b-c89e25fae0a5%40googlegroups.com.

YAN-HONG WANG

unread,
Aug 14, 2017, 2:32:19 PM8/14/17
to Jenkins Users
Hello Carlos,

Thanks for correction.
But, if containerTemplate can't be defined outside of podTemplate.

How could I create a container in the execution of pipeline?
And that container can also stay in the same pod.
Is there some other syntax or some container creation function could be applied in node area?

Thanks very much again.

Best regards,
Hong

YAN-HONG WANG

unread,
Aug 14, 2017, 2:44:58 PM8/14/17
to Jenkins Users
Hello Carlos,

If I use the container created function like below:

def dbImage = docker.image( "myregistry:5000/imagename:1.0.0.1" )
def c = dbImage.run("--network jenkins-network --name mycontainer")

But, this container seems will be created in host side, not in Kubernetes side, right?

So this container even was created ... but it could not communicate with other container ...

Best regards,
Hong

Carlos Sanchez

unread,
Aug 14, 2017, 3:20:03 PM8/14/17
to Jenkins Users
You can not add containers to a pod after the pod is created, that doesn't work in kubernetes nor docker swarm

To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/800b3663-ec78-4223-8718-2ed7ba781256%40googlegroups.com.

YAN-HONG WANG

unread,
Aug 14, 2017, 3:58:46 PM8/14/17
to Jenkins Users
Hello Carlos,

Thanks for your hint.
I will try to create new container in other new pod.

Hong

YAN-HONG WANG

unread,
Aug 16, 2017, 7:55:32 AM8/16/17
to Jenkins Users
Hello Carlos,

Now in my Jenkinsfile.groovy I create a slave container in other pod.
I use "load" this function to implement.

But, I found out that pod will be destroyed automatically when that slave container was executed.
That slave container is a PostgreSQL daemon. That needs to be held for waiting other container binding.
And then unfortunately that slave container was destroyed by destroyed pod.

Is there any syntax or podTemplate argument can avoid pod destroyed automatically?

Thanks very much.

Best regards,
Hong

Carlos Sanchez

unread,
Aug 16, 2017, 11:01:27 AM8/16/17
to Jenkins Users
On Wed, Aug 16, 2017 at 1:55 PM, YAN-HONG WANG <allway...@gmail.com> wrote:
Hello Carlos,

Now in my Jenkinsfile.groovy I create a slave container in other pod.
I use "load" this function to implement.

But, I found out that pod will be destroyed automatically when that slave container was executed.
That slave container is a PostgreSQL daemon. That needs to be held for waiting other container binding.
And then unfortunately that slave container was destroyed by destroyed pod.

Is there any syntax or podTemplate argument can avoid pod destroyed automatically?

You can create multiple containers as part of a pod, then can use them until podTemplate is closed, when the pod is destroyed
 
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/afbe15cf-35c9-4b99-a795-a73961c0f910%40googlegroups.com.

WANG, YAN-HONG

unread,
Aug 17, 2017, 4:59:58 PM8/17/17
to jenkins
Hello Carlos,

Thanks for your reply and explanation.

My situation is that one of container images doesn't exist in the beginning of pod creation.
And then that container image will be established in the "build stage" of pipeline execution.

So that is why I cannot let this containerTemplate claimed in the beginning of Pod Definition.

Best regards,
Hong

--
You received this message because you are subscribed to a topic in the Google Groups "Jenkins Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/jenkinsci-users/m5ZXydq8gtc/unsubscribe.
To unsubscribe from this group and all its topics, send an email to jenkinsci-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CALHFn6NsOu2iE2UBNdhDFg90A4q5dszG_ZJzfaMD-nT0-Yr%3DQw%40mail.gmail.com.

Carlos Sanchez

unread,
Aug 18, 2017, 3:42:51 AM8/18/17
to Jenkins Users
The you would need 2 podTemplate entries, one after another

WANG, YAN-HONG

unread,
Aug 18, 2017, 3:50:47 AM8/18/17
to jenkins
Hello Carlos,

Thanks for your hint. I will try it.

Hong

Reply all
Reply to author
Forward
0 new messages