Continuous integration/status

Last update on: 2012-05-monthly

2011-07-25
This project aims to rebuild the Wikimedia continuous integration legacy server (currently hosted on a virtual machine) on a dedicated server in eqiad, our new data center. Chad Horohoe started to consolidate the platform to run automated tests systematically at post-commit time, to check that the SVN trunk is in an (almost) constantly deployable state. This project also relates to the will to have more frequent code deployments, as continuous integration will give us more confidence in new code if it already passed the automated tests. The new server will be combined with TestSwarm, a distributed continuous integration tool for JavaScript, currently hosted on the Toolserver. Timo Tijhof reached out to the TestSwarm team, who were enthusiastic about incorporating our improvements, notably on performance.

2011-08-31
Chad Horohoe continued to set up the virtual machine environment, while the Operations team set up the physical hardware in the Virginia data center. The final server will use Jenkins instead of CruiseControl.

2011-09-30
Chad Horohoe worked with Daniel Zahn to set up the dedicated server in our Virginia data center. Its configuration was automated with Puppet. TestSwarm remains to be pupettized. The server is expected to be put in production in early October.

2011-10-31
Chad Horohoe worked with the operations team to finalize the setup of the testing server, now online at http://integration.mediawiki.org. It is currently running Jenkins (PHPUnit), and TestSwarm should be added soon. Antoine Musso will be leading this project going forward.

2011-11-16
Antoine Musso has been making many improvements and additions to the system. Chad Horohoe has the beginnings of a TestSwarm .deb package, which he will soon check in and hand off to Antoine (see bug 32433).

2011-11-30
Chad Horohoe and Antoine Musso created a Debian package for TestSwarm, so it can be installed in our common infrastructure with Jenkins. Antoine and Timo Tijhof wrote a script to fetch individual revisions of MediaWiki's code, in order to run tests against each one of them. PostgreSQL testing in Jenkins is planned for implementation in the coming weeks.

2011-12-16
TestSwarm (used to test our javascripts) was packaged and now runs from Labs. A first step toward production deployment (tracked by RT 2059).

2011-12-22
TestSwarm is now deployed in production and is linked from the [//integration.mediawiki.org continuous integration portal]. The package was Debianized and its configuration is almost entirely managed by puppet. The operation team was of a great help in assisting us deploying that. Thanks to them!

2011-12-31
<section begin=2011-12-31/>The TestSwarm package was Debianized and its configuration almost entirely entered into Puppet. Antoine Musso and Daniel Zahn deployed TestSwarm to the production [//integration.mediawiki.org continuous integration portal].<section end=2011-12-31/>

2012-01-12
<section begin=2012-01-12/>Jenkins now runs our PHPUnit test suite against a PostgreSQL backend. That should help us stabilize our support for that DBMS.<section end=2012-01-12/>

2012-01-31
<section begin=2012-01-31/>The team has rearranged Jenkins jobs to make them easier to manage in the long run, and to add capacity. TestSwarm is pending testing of the new Special:JavaScriptTest page.<section end=2012-01-31/>

2012-02-29
<section begin=2012-02-29/>The focus for February has been around integration with Git and Gerrit (bug 34141). Various Ant configurations were merged into a single Ant configuration, reducing duplication and opportunity for breakage. Also new in February is that the tests have been broken up into three suites: dbless, db, and parser. Only dbless tests (which run quickly) will block a commit. Work on CI slowed down due to Antoine being pulled into 1.19 bugfixing.<section end=2012-02-29/>

2012-03-31
<section begin=2012-03-31/>This activity was somewhat deprioritized in March in favor of the git migration. Nonetheless, Jenkins is now running the PHPUnit test suite and reporting tests results in Gerrit interface. This will help catch possible culprits as soon as a patch is submitted. Timo Tijhof wrote workflow specifications for continuous integration. Over the course of April, the Jenkins/Gerrit interaction will be polished and we will start looking at Selenium and bringing Testswarm back in action.<section end=2012-03-31/>

2012-04-25
<section begin=2012-04-25/>Jenkins has been upgraded, providing a nicer GUI and the jobs rewrite deployed.

Progress was made on implementing a universal linter for all gerrit changes (so far it lints all (modified) PHP files as part of the Jenkins job for each mediawiki/core changeset in gerrit).

The TestSwarm connection with Jenkins has been established - TestSwarm is now running MediaWiki's QUnit test suite again. The TestSwarm installation became idle after the migration to Gerrit+Git because it was configured for SVN. The old configuration is now disabled, and everything is now handled by Jenkins instead.

Christian Aistleitner created a test suite for the (rewritten) MWDumper system and are also monitored live on Jenkins. <section end=2012-04-25/>

2012-04-monthly
<section begin=2012-04-monthly/>Jenkins has been upgraded, providing a nicer GUI. Progress was made on implementing a universal linter for all gerrit changes, and not just those with modified PHP files. The TestSwarm connection with Jenkins has been established, and TestSwarm is now [//integration.mediawiki.org/testswarm/user/mediawiki running MediaWiki's QUnit test suite] again. Christian Aistleitner created a test suite for the (rewritten) MWDumper system, and the tests are monitored live on Jenkins.<section end=2012-04-monthly/>

2012-05-monthly
<section begin="2012-05-monthly"/>Timo Tijhof continued to work on the TestSwarm rewrite. The team is considering moving the continuous integration environment into Wikimedia Labs. The new TestSwarm version will probably be first deployed in the new environment instead of the current environment.<section end="2012-05-monthly"/>