Hello Krisztián,

> Am 05.09.2019 um 14:22 schrieb Krisztián Szűcs <szucs.kriszt...@gmail.com>:
> 
>> * The build configuration is automatically updated on a merge to master?
>> 
> Not yet, but this can be automatized too with buildbot itself.

This is something I would  actually like to have before getting rid of the 
Travis jobs. Otherwise we would be constrainted quite a bit in development when 
master CI breaks because of an environment issue until one of the few people 
who can update the config become available.

Uwe 


> 
>> 
>> And then a not so simple one: What will happen to our current
>> docker-compose setup? From the PR it seems like we do similar things with
>> ursabot but not using the central docker-compose.yml?
>> 
> Currently we're using docker-compose to run one-off containers rather
> than long running, multi-container services (which docker-compose is
> designed for). Ursabot already supports the features we need from
> docker-compose, so it can effectively replace the docker-compose
> setup as well. We have low-level control over the docker API, so we
> are able to tailor it to our requirements.
> 
>> 
>> 
>> Cheers
>> Uwe
>> 
>>> Am 29.08.2019 um 14:19 schrieb Krisztián Szűcs <
>> szucs.kriszt...@gmail.com>:
>>> 
>>> Hi,
>>> 
>>> Arrow's current continuous integration setup utilizes multiple CI
>>> providers,
>>> tools, and scripts:
>>> 
>>> - Unit tests are running on Travis and Appveyor
>>> - Binary packaging builds are running on crossbow, an abstraction over
>>> multiple
>>>  CI providers driven through a GitHub repository
>>> - For local tests and tasks, there is a docker-compose setup, or of
>> course
>>> you
>>>  can maintain your own environment
>>> 
>>> This setup has run into some limitations:
>>> - It’s slow: the CI parallelism of Travis has degraded over the last
>>> couple of
>>>  months. Testing a PR takes more than an hour, which is a long time for
>>> both
>>>  the maintainers and the contributors, and it has a negative effect on
>>> the
>>>  development throughput.
>>> - Build configurations are not portable, they are tied to specific
>>> services.
>>>  You can’t just take a Travis script and run it somewhere else.
>>> - Because they’re not portable, build configurations are duplicated in
>>> several
>>>  places.
>>> - The Travis, Appveyor and crossbow builds are not reproducible locally,
>>> so
>>>  developing them requires the slow git push cycles.
>>> - Public CI has limited platform support, just for example ARM machines
>>> are
>>>  not available.
>>> - Public CI also has limited hardware support, no GPUs are available
>>> 
>>> Resolving all of the issues above is complicated, but is a must for the
>>> long
>>> term sustainability of Arrow.
>>> 
>>> For some time, we’ve been working on a tool called Ursabot[1], a library
>> on
>>> top
>>> of the CI framework Buildbot[2]. Buildbot is well maintained and widely
>>> used
>>> for complex projects, including CPython, Webkit, LLVM, MariaDB, etc.
>>> Buildbot
>>> is not another hosted CI service like Travis or Appveyor: it is an
>>> extensible
>>> framework to implement various automations like continuous integration
>>> tasks.
>>> 
>>> You’ve probably noticed additional “Ursabot” builds appearing on pull
>>> requests,
>>> in addition to the Travis and Appveyor builds. We’ve been testing the
>>> framework
>>> with a fully featured CI server at ci.ursalabs.org. This service runs
>> build
>>> configurations we can’t run on Travis, does it faster than Travis, and
>> has
>>> the
>>> GitHub comment bot integration for ad hoc build triggering.
>>> 
>>> While we’re not prepared to propose moving all CI to a self-hosted setup,
>>> our
>>> work has demonstrated the potential of using buildbot to resolve Arrow’s
>>> continuous integration challenges:
>>> - The docker-based builders are reusing the docker images, which
>> eliminate
>>>  slow dependency installation steps. Some builds on this setup, run on
>>>  Ursa Labs’s infrastructure, run 20 minutes faster than the comparable
>>>  Travis-CI jobs.
>>> - It’s scalable. We can deploy buildbot wherever and add more masters and
>>>  workers, which we can’t do with public CI.
>>> - It’s platform and CI-provider independent. Builds can be run on
>>> arbitrary
>>>  architectures, operating systems, and hardware: Python is the only
>>>  requirement. Additionally builds specified in buildbot/ursabot can be
>>> run
>>>  anywhere: not only on custom buildbot infrastructure but also on
>> Travis,
>>> or
>>>  even on your own machine.
>>> - It improves reproducibility and encourages consolidation of
>>> configuration.
>>>  You can run the exact job locally that ran on Travis, and you can even
>>> get
>>>  an interactive shell in the build so you can debug a test failure. And
>>>  because you can run the same job anywhere, we wouldn’t need to have
>>>  duplicated, Travis-specific or the docker-compose build configuration
>>> stored
>>>  separately.
>>> - It’s extensible. More exotic features like a comment bot, benchmark
>>>  database, benchmark dashboard, artifact store, integrating other
>> systems
>>> are
>>>  easily implementable within the same system.
>>> 
>>> I’m proposing to donate the build configuration we’ve been iterating on
>> in
>>> Ursabot to the Arrow codebase. Here [3] is a patch that adds the
>>> configuration.
>>> This will enable us to explore consolidating build configuration using
>> the
>>> buildbot framework. A next step after to explore that would be to port a
>>> Travis
>>> build to Ursabot, and in the Travis configuration, execute the build by
>> the
>>> shell command `$ ursabot project build <builder-name>`. This is the same
>>> way we
>>> would be able to execute the build locally--something we can’t currently
>> do
>>> with the Travis builds.
>>> 
>>> I am not proposing here that we stop using Travis-CI and Appveyor to run
>> CI
>>> for
>>> apache/arrow, though that may well be a direction we choose to go in the
>>> future. Moving build configuration into something like buildbot would be
>> a
>>> necessary first step to do that; that said, there are other immediate
>>> benefits
>>> to be had by porting build configuration into buildbot: local
>>> reproducibility,
>>> consolidation of build logic, independence from a particular CI provider,
>>> and
>>> ease of using and maintaining faster, Docker-based jobs. Self-hosting CI
>>> brings
>>> a number of other challenges, which we will concurrently continue to
>>> explore,
>>> but we believe that there are benefits to adopting buildbot build
>>> configuration
>>> regardless.
>>> 
>>> Regards, Krisztian
>>> 
>>> [1]: https://github.com/ursa-labs/ursabot
>>> [2]: https://buildbot.net
>>>    https://docs.buildbot.net
>>>    https://github.com/buildbot/buildbot
>>> [3]: https://github.com/apache/arrow/pull/5210
>> 
>> 

Reply via email to