[ovirt-devel] Using travis yaml files to specify dependencies and tests
Eyal Edri
eedri at redhat.com
Wed Jan 21 12:00:39 UTC 2015
----- Original Message -----
> From: "David Caro" <dcaroest at redhat.com>
> To: infra at ovirt.org
> Cc: devel at ovirt.org
> Sent: Tuesday, January 20, 2015 5:50:03 PM
> Subject: Using travis yaml files to specify dependencies and tests
>
>
> Hi everyone!
>
> After talking a bit with some of you, I think that we can start
> planning a common build and dependency declaration for tests for the
> ovirt products, to improve and automate most of the ci process and
> maintenance.
>
>
>
> Current status:
>
> == Dependencies
>
> Right now we have 4 types of dependencies:
>
> * test dependencies
> * tarball/srcrpm build dependencies
> * rpm build dependencies
> * installation dependencies
>
> The last two are managed from the spec files through rpm/yum
> dependency systems. But the first ones are managed manually on the
> jobs on jenkins or puppet manifests. What separates it from the code
> that actually requires them and adds an extra layer of maintenance and
> synchronization between the code, the jenkins jobs and the puppet
> repository.
>
>
> == Builds
>
> We started using autotools to build most of the projects, but it's
> not a global methodology and even being used on some projects, you
> need to tune the run for each of them, specifying different variables
> and running some side scripts.
>
>
> == Tests
>
> Some projects use make check to run some of the tests, some tests are
> totally outside the code and run only in jenkins jobs.
>
>
>
> Some possible improvements:
>
> == Tests/builds
>
> Using shell scripts:
> We talked before in another thread to create some generic script to
> build the artifacts for the product and to run the tests, namely we
> talked about having 3 executables (bash scripts probably) at the root
> of each project, that should not require any parameters:
>
> ./build-artifacts
> This should generate any artifacts to be archives (isos, rpms,
> debs, tarballs, ...) and leave them at ./exported-artifacts/
> directory, for the build system to collect, removing any
> previous artifacts if needed.
>
> ./check_patch
> Runs all the tests required for any new patchset in gerrit, for
> non-merged changes, should be fast to run to get feedback easily
>
> ./check_merge
> Runs all the tests for any change that is going to be merged
> (right now we are not using gates, so it actually after merge,
> but the idea is to use this as gate for any merge to the
> repo). This can be more resource hungry than check_path.
>
> That way it will let you use easily any framework that you want to use
> for your project, but still let it be easy to maintain in the global
> ci/build system (you can use pip, tox, maven, gradle, autotools, make,
> rake, ...). This will not allow at first running tests in parallel in
> jenkins, but we can in the future add that possibility (for example,
> allowing the user to define more than one check script, like
> check_patch.mytest1 and check_patch.mytest2 and make jenkins run them
> in parallel).
> I started a POC of this process here [1]
>
> Using travis yaml files:
> Using a travis compliant yaml file [2]. That will be less flexible
> than the above solution and will not allow you to run tests in
> parallel, though it will let you use travis at any point to offload
> our ci if needed.
>
>
> == Dependencies
>
> Using plain text files:
> Similar to the above scripts solution, I though of adding an extra
> file, with the same name, to declare the dependencies to run that
> script. Adding a suffix in case of different requirements for
> different distros (matching facter fact strings), for example:
>
> ./build-artifacts.req
> Main requirements file, used if no more specific one
> found. With a newline separated list of packages to install on
> the environment (jenkins will take care of which package
> manager to use).
>
> ./build-artifacts.req.fc20
> Specific requirements for fc20 environment, replaces the
> general one if present.
>
> And the same for the other scripts (check_patch and check_merge).
>
> Using travis yaml file:
> Using a travis compliant yaml file with some extensions to declare
> the different dependencies for each type and os/distro. That will
> allow you to have only one extra file in your repo, though you'd have
> to duplicate some of the requirements as travis only has ubuntu and
> forces you to run scripts to install dependencies.
>
>
> What do you think? Do you have any better idea?
without referring to the actual suggestions, i think this is big enough to track
via a wiki or etherpad so data won't get lots in the thread.
>
>
> ps. About using an external repository to store the
> scripts/requirements for the code. The issue with this is that it
> forces you to bind a code change in the code repo, to a
> script/dependency change in the scripts repo, and that adds a lot of
> extra maintenance and source of issues and failures. If you know a way
> of doing it like that without all the fuss, I'd love to hear it.
>
> For example, imagine that you have vdsm and the dependencies are in
> another repo, now you send a patch to vdsm that requires you to run a
> specific pep8 version to pass the patch tests, so you have to change
> the script repo to add that dependency, but doing that you will brake
> all the other patches tests because they require the older pep8
> version, so you have to somehow specify in the vdsm patch that you
> require a specific commit from the scripts repo to be tested with...
>
> Having both in the same repo, allows you to do the code change and the
> dependency/script change in the same patchset, and test it right away
> with the correct scripts/deps.
>
> It also binds together code and tests to some point, what is nice to
> have in a product view, because you know for each version which tests
> it passed and have a better idea of the possible failures for that
> version.
>
>
> [1] http://gerrit.ovirt.org/#/admin/projects/repoman
> [2] http://docs.travis-ci.com/
>
> --
> David Caro
>
> Red Hat S.L.
> Continuous Integration Engineer - EMEA ENG Virtualization R&D
>
> Tel.: +420 532 294 605
> Email: dcaro at redhat.com
> Web: www.redhat.com
> RHT Global #: 82-62605
>
> _______________________________________________
> Infra mailing list
> Infra at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/infra
>
More information about the Devel
mailing list