<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 2/28/14 3:56 PM, Albert-Jan Roskam
      wrote:<br>
    </div>
    <blockquote
      cite="mid:1393621005.71779.YahooMailNeo@web163806.mail.gq1.yahoo.com"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=iso-8859-1">
      <div id="yiv3520227838">
        <div>
          <div>I would like to run my unittests (--&gt; nose) on
            multiple platforms. I also would like to test different
            python versions and implementations on each platform (--&gt;
            tox [2]). These platforms also include Windows, so Travis CI
            or Docker is not an option, AFAIK. I was thinking about
            using Vagrant [3] to fire up VirtualBox [4] VMs for each
            platform-to-be-tested, then either (a) fire up nose or tox
            through SSH or (b) (the easy way) prepare each VM such that
            nose/tox is fired up right when the OS starts (ie., edit
            .bashrc, autoexit.bat or whatever it is called for the OS at
            hand). But this all feels like reinventing the wheel. Can
            you recommend a package or strategy to use? Beautiful is
            better than ugly, although practicality beats purity. In
            other words: it would nice if it is The Right Way, but I am
            a lazy bastard so I am also open for quick-and-dirty
            approaches ;-)</div>
        </div>
      </div>
    </blockquote>
    I don't think there is a standalone, open standard how to do this
    kind of things.<br>
    <br>
    Testing is very project dependent and I often run into problems
    testing on external servers, hence why I prefer not to build on
    Travis, or drone.io.<br>
    <br>
    Docker is a container and as far as I (and you) know, Docker does
    not run on Windows (and Docker is based on LXC technology).<br>
    <br>
    A lot of people run Jenkins to manage continuous integration.
    Basically, Jenkins is a job management software. I don't really run
    Jenkins these days. But you can check this out:
<a class="moz-txt-link-freetext" href="http://stackoverflow.com/questions/5543413/reconfigure-and-reboot-a-hudson-jenkins-slave-as-part-of-a-build">http://stackoverflow.com/questions/5543413/reconfigure-and-reboot-a-hudson-jenkins-slave-as-part-of-a-build</a><br>
    <br>
    Basically you can boot slaves on demand when a test is triggered.<br>
    <br>
    For larger software, I have seen people run openstack to handle
    creating new vms and putting them into farms.<br>
    <br>
    Bottom line is:<br>
    For Linux, create a docker container of everything you need to run
    your job (call this a base docker image). Export the docker. Each
    time you run a test, tell Jenkins / your own custom bash script to
    create a new docker instance based on the base image. Run the job
    and report the result then remove the instance if you want to. I
    mention to use docker here because it's cheaper to launch docker
    instance. But for consistency, you may consider going for full
    vagrant vm as windows one would use vagrant vm. It's up to you.<br>
    <br>
    For windows, just create a windows machine, bootstrap the machine,
    export the machine into a vagrant box/ova file. On each test, boot
    up the new VM and then run the tests.<br>
    <br>
    That's how I handle things right now, but if anyone have any
    exceptional method, do share please.<br>
    <br>
    In my opinion, the best testing tool is the one that works for your
    need. Generic tool often makes things more complicated.<br>
    To add complexity, some people go as far as using
    puppet/chef/ansible instead of vanilla bash/shell scripts. That's
    great if you have a big test farms. If I were you, first get
    multiple platform testing working, then start transiting. I don't
    know how many hours I lost trying to invent complication :)<br>
    <br>
  </body>
</html>