Updating from cloudbees docker build and publish v1.0.1 to v1.1 causes docker build failures.

82 views
Skip to first unread message

Liam

unread,
Mar 8, 2016, 5:14:45 PM3/8/16
to Jenkins Developers
We're using https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Build+and+Publish+plugin to do our docker builds.

I've tried to update from v1 -> v1.2, which caused previously successful builds to fail. I went back through and isolated the issue to be the jump from v1.0.1 to v1.1.
I didn't alter any of the build configuration during this process.

Looking at the logs, it seems like the commands are run differently, despite the lack of change in configuration:
v1.0.1:
docker build -t lfn3/bs-api:142 --no-cache=true bs-api

v1.1
docker build -t lfn3/bs-api:141 --no-cache=true --file=bs-api /var/lib/jenkins/jobs/docker-bs-api/workspace

It appears that the parameter that was previously treated as the docker context dir is now passed as the docker file-path. 
It seems like the field was mis-named in v1.0.1: "Directory dockerfile is in", and I'm guessing it was renamed to something like "Dockerfile name" and a separate context dir was introduced?

Michael Neale

unread,
Mar 8, 2016, 6:05:36 PM3/8/16
to Jenkins Developers
Some of these changes were due to changes in docker itself - what version of docker are you running? 

Yes, I suspect the meaning is a subtle change. 

So in the past bs-api I guess would have been the PATH. 

So according to this, in 1.1 of the plugin, bs-api would be the name of your "Dockerfile", which is probably not what you mean? the bs-api was the directory that had the Dockerfile in it before if I am right? 

Liam

unread,
Mar 8, 2016, 6:57:53 PM3/8/16
to Jenkins Developers
I'm not sure what version of docker is running on the Jenkins machine at the moment. I'll find out, but that may take a little while.

Yes, you're correct that bs-api is the directory containing the dockerfile (the path). In v1.0.1 it was treated as such, but now it's treated as the path to the Dockerfile (the --file flag). 

We're not really in a position to be able to manually adjust this for all of our builds, since we've got loads that use this property.

Michael Neale

unread,
Mar 8, 2016, 7:37:24 PM3/8/16
to Jenkins Developers
In the short term, I don't think you are missing out on anything by using 1.0 while you work out what docker version. 

May need to adjust this to work more as expected.

Liam

unread,
Mar 9, 2016, 3:18:49 PM3/9/16
to Jenkins Developers
So our Jenkins machine is running docker 1.7.1 atm. We're going to upgrade to 1.10 shortly.

I don't think that we actually need to change anything, and it's not like we can rewrite past versions or anything, for me it's more about providing a working migration path forwards. 

Even if that takes the form of a script or something, that's totally fine.

Michael Neale

unread,
Mar 9, 2016, 5:28:12 PM3/9/16
to Jenkins Developers
OK, interested in how things are when you upgrade docker. 

I'll take a closer look at the confusion around Dockerfile name vs path. 

nicolas de loof

unread,
Mar 10, 2016, 1:26:33 AM3/10/16
to jenkin...@googlegroups.com
looks to me the plugin didn't correctly handle legacy data migration

in 1.0 dockerfilePath was used to store the build context - as there was only one possible dockerfile the variable name looked good
in 1.1, support for --file was introduced by changing the meaning of this field, and adding buildContext to replace it on its initial role
so the confusion



seems it's too late now to change this, will need to reconfigure the job.

--
You received this message because you are subscribed to the Google Groups "Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-de...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/e0483afc-b782-49c3-a4ac-534c13ceaa6d%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Michael Neale

unread,
Mar 10, 2016, 1:38:15 AM3/10/16
to jenkin...@googlegroups.com
A bulk-ish update could be scripted. 

You received this message because you are subscribed to a topic in the Google Groups "Jenkins Developers" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/jenkinsci-dev/1d29YSpPxYA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to jenkinsci-de...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/CANMVJz%3Dd5tYz%2B1ScGzWtZL9aDjT41_Yab1r8DMY-K%3DXfXgYi-A%40mail.gmail.com.

For more options, visit https://groups.google.com/d/optout.
--

-- 
Regards, 

Michael Neale
(twitter: @michaelneale, skype: michael_d_neale)
Cofounder & Engineer @ large in CTO office. 

Liam

unread,
Mar 20, 2016, 5:03:26 PM3/20/16
to Jenkins Developers
So we've successfully updated to Docker 1.10.3 on our Jenkins machines, and had it running for a bit, and everything seems to be working fine.

Can you give me any for pointers for tackling the bulk-ish update? I'm basically a novice at using Jenkins, so I'm not really sure where to start with this kind of thing, apart from trying to find a database and twiddling values in it, which seems like it could end badly...

Michael Neale

unread,
Mar 20, 2016, 6:13:23 PM3/20/16
to jenkin...@googlegroups.com
Liam, one way would be to take jenkins down, backup JENKINS_HOME, and then use shell scripting to modify the config.xml (lets call that the "ghetto way"), then start it up. 

I am not sure off the top of my head how to modify it with the groovy shell, but will see if can work it out. 


For more options, visit https://groups.google.com/d/optout.

Liam

unread,
Apr 25, 2016, 5:34:23 PM4/25/16
to Jenkins Developers
So I ended up writing a little script using the groovy shell:

import com.cloudbees.dockerpublish.DockerBuilder

for(item in Hudson.instance.allItems) {
 
for (builder in item.builders) {
   
if (builder instanceof DockerBuilder && builder.dockerfilePath) {
      println
("Changing build context of " + item.name + " to: " + builder.dockerfilePath);
      builder
.buildContext = builder.dockerfilePath;
      println
("Blanking dockerfilePath of " + item.name);
      builder
.dockerfilePath = "";
   
}
 
}
}

Which worked on my machine.

Michael Neale

unread,
Apr 26, 2016, 2:26:45 AM4/26/16
to Jenkins Developers
That is great Liam, that looks pretty neat. 

Anyone using this - as always, try to take a backup first before running powerful scripts ;)
Reply all
Reply to author
Forward
0 new messages