[libvirt] [PATCH 2/3] travis: Use pre-built Docker image

Daniel P. Berrangé berrange at redhat.com
Wed Jun 13 13:28:24 UTC 2018


On Wed, Jun 13, 2018 at 02:58:55PM +0200, Andrea Bolognani wrote:
> On Wed, 2018-06-13 at 11:32 +0100, Daniel P. Berrangé wrote:
> > On Tue, Jun 12, 2018 at 12:12:12PM +0200, Andrea Bolognani wrote:
> > > The pre-built images have been hand-crafted using the
> > > build dependencies recorded in the libvirt-jenkins-ci
> > > repository: of course that's not something that we want
> > > to keep doing manually going forward, so figuring out a
> > > sensible way to generate Dockerfiles and potentially
> > > even Docker images automatically is pretty high on the
> > > priority list.
> > 
> > When first testing I produced a custom Ubuntu docker image
> > with not much effort. I was just creating  a file in
> > "libvirt-jenkins-ci" repo called "images/ubuntu-18.04.docker"
> > that contains
> > 
> >   FROM ubuntu:18.04
> >   RUN apt-get update
> >   ENV PACKAGES \
> >      ::PACKAGE-LIST:: \
> >   RUN apt-get -y install $PACKAGES
> 
> Pretty much exactly how I've created the images you can find on
> Docker Hub, except for
> 
> >   RUN mkdir /build
> >   WORKDIR /build
> 
> this bit, which AFAICT is entirely unnecessary.

WORKDIR /build, avoids the need for the '-w /build' arg in
the .travis.yml docker run command. I think there's a slight
plus to having the workdir set automatically, avoiding the
need for a -w arg.

> > ::PACKAGE-LIST:: can be built by reading the
> > guests/vars/projects/libvirt.yml file, and then
> > expanding it based on guest/vars/mappings.yml
> > 
> > I hadn't written code for that bit, but it just
> > needs a short python script to read the two
> > yaml files and map the data sets.
> 
> Yeah, same here: I just extracted the package list from the output
> of a 'lcitool update' run this time around, but I was planning on
> writing a tool to do that for me just like you mention.
> 
> The one thing I haven't quite figured out yet is where to store
> the resulting Dockerfiles. If we committed them to some repository
> we could take advantage of Docker Hub's autobuild support, which
> would be pretty neat; on the other hand, being generated content,
> they have no business being committed, plus it would be tricky to
> ensure the generated files are always in sync with the source
> mappings without introducing a bunch of scaffoling to the
> libvirt-jenkins-ci repository.

I think we should just have the dockerfile templates (ie with
the ::PACKAGE:: placeholder) in the libvirt-jenkins-ci repo.
We don't need to store the expanded dockerfile. Then we can have
a CI job somewhere that automatically rebuilds the & uploads new
docker images whenever a change is pushed to libvirt-jenkins-ci.

> > I was only going to do packages forthe libvirt.yml,
> > but we can expand to cover the other modules too
> > quite easily, as its just taking the union of all
> > the project files.
> 
> I don't think we can/want to do that.
> 
> The way build dependencies for projects are set up right now, we
> expect to build eg. libvirt-glib against our own copy of libvirt
> rather than the distro-provided one, so libvirt is *not* included
> among the packages required by the libvirt-glib project.
> 
> So if we included build dependencies for all projects in the Docker
> images, that would make them way bigger and you would still be
> unable to build libvirt-glib or whatever on top of them. Perhaps we
> can find some way out of this later, but I'd rather move one step
> at the time instead of trying to solve all the things in one fell
> swoop :)

Yeah, lets only focus on core libvirt right now until we have an
immediate need for more.

> > ie rather than
> > 
> >  Name: libvirt/build
> >  Tag: ubuntu-18.04
> > 
> > we should have
> > 
> >   Name: libvirt/ubuntu
> >   Tag: 18.04
> 
> I don't mind having several images and using the tag only for the
> version number, if that's something that will make the result look
> less alien to Docker users; however, I think we should keep the
> names consistent with what we use on our CentOS CI, so it would be
> ubuntu:18 instead of ubuntu:18.04.

NB that is ambiguous as Ubuntu does two releases a year, 18.04 and
18.10

> > Though perhaps make clear it is for CI, so
> > 
> >   Name: libvirt/ci-ubuntu
> >   Tag: 18.04
> 
> Just like for the guests you can create and manage with lcitool,
> while these images will be primarily used for Travis CI they
> should be usable for developers as well, which is why I picked the
> name "build" instead of "ci" or "travis-ci" in the first place.

Sure, 'libvirt/build-'  is fine

> At the same time, I didn't use just the distribution name because
> I didn't want to give the impression that by pulling them you
> would get an OS with libvirt already installed.

Agreed.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list