On Mon, Jun 01, 2020 at 04:51:19PM +0200, Pavel Hrdina wrote:
On Fri, May 29, 2020 at 03:00:39PM +0200, Andrea Bolognani wrote:
> Branch:
https://gitlab.com/abologna/libvirt/-/tree/ci-full-gitlab-registry
> Pipeline:
https://gitlab.com/abologna/libvirt/pipelines/150891361
>
> This is what we're already doing with the subprojects we've migrated
> to GitLab CI and, as of earlier today, all projects under the
> libosinfo umbrella.
>
> Once this is merged, we can stop publishing container images on Quay
> and archive the libvirt-dockerfiles repository.
>
> Patch 3/5 has been trimmed in order to comply with the size limits
> of the mailing list. You can grab the unabridged version with
>
> $ git fetch
https://gitlab.com/abologna/libvirt ci-full-gitlab-registry
This is a lot of files and lines of text/code. I was wondering about
building the dockerfiles as part of the container_job_definition.
To me it seems like a lot of duplication and a lot of noise in the
future if we decide to change the dockerfiles generation. The main
difference that I can think of is that with files in repository we
need to regenerate all the dockerfiles to apply changes made in
libvirt-ci but with the automatic generation we would have that for
free.
The key reason for keeping the dockerfiles in the libvirt.git repo and
NOT auto-generating them on the fly is to ensure the CI process is
self-contained, with no dependancy on external moving parts in other
git repos.
If you automatically generated dockerfiles from libvirt-ci.git, then
you end up with unstable CI when changes in libvirt.git need to be
made in lock-step with changes in libvirt-ci.git. If you change
libvirt.git first, CI will break if it runs before libvirt-ci.git
is updated. If you change libvirt-ci.git first, then CI will break
if it runs before libvirt.git is updated. This is a no-win situation.
This is especially painful when you consider that a user's fork of
libvirt.git may not updated to current master. Or consider a user
who needs to make changes to libvirt.git that require updated
dockerfiles and needs to be able to test them before any change
in libvirt-ci.git is present.
We've seen these problems many times with our current Jenkins setup
where CI breaks for a period when we have to do matching updates
between both libvirt-ci.git & libvirt.git.
With dockerfiles kept in libvirt.git we know that the containers
we're building will always contain exactly what we need. This also
makes it easy for users to experiment with changes, as they can
modify the dockerfiles directly to add/remove pieces. Such changes
can be propagated back to libvirt-ci.git out of band.
Both approaches have some benefits and drawbacks and I guess we
could
have some variable to prevent automatic generation of dockerfiles to
make sure that unwanted changes in libvirt-ci doesn't affect CI for
all libvirt repositories, on the other hand it would automatically
check that changes to libvirt-ci doesn't break anything.
Changes to libvirt-ci that affect the dockerfiles, should come with
a URL pointer to a merge request against the affected project(s),
showing the succesful CI run with updated dockerfiles.
I personally don't like the need to introduce 5000+ lines just
for
compilation testing.
That's a tiny proportion of the code we have in libvirt.git, so IMHO
it is not worth worrying about. The benefits of having the CI self
contained far outweigh the downside.
Essentially we are prioritizing the main libvirt.git as that is the
primary content from the POV of most contributors.
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 :|