Jump to content

Continuous integration/Quibble

From mediawiki.org

Quibble is a Python script for setting up a MediaWiki instance and running various tests against it.

It works by cloning MediaWiki core and several extensions, installing dependencies, creating the database, and running one or more test commands.

Further reading

[edit]

Creating and deploying a new Quibble release

[edit]

This is moderately fiddly and stressful, and should be done when you have a fair amount of time free and CI is relatively quiet; Fridays are commonly picked.

Creating the release

[edit]

See RELEASE.rst in the repository.

Creating images

[edit]

This covers the creation of Docker images using the Quibble git tag (example)

  1. In integration-config's dockerfiles directory, manually edit the Dockerfile.template for the primary Quibble image to specify the new version (as of 2022-02-02, this is for quibble-buster). That is done in the pip3 install command line.
  2. Use docker-pkg to create the appropriate cascade of changelog updates, e.g. docker-pkg -c dockerfiles/config.yaml --info update --reason "Bump quibble to 0.0.44" --version 0.0.44 quibble-buster dockerfiles/
  3. Build the images locally to ensure they still build: docker-pkg -c dockerfiles/config.yaml --info build --use-cache dockerfiles/
  4. Check the locally-built images to ensure that quibble correctly updated: ./dockerfiles/debug-image quibble-buster-php72 and then head /usr/local/bin/quibble and see that the correct version number is shown.
  5. Create this update as a change, submit it to code review, and wait for it to be merged.
  6. Create and publish the new images on the CI production server: ./fab deploy_docker (remember to !log this action in IRC) – 🐌 this will take a while, perhaps an hour or more

Update Jenkins jobs

[edit]

Switch CI jobs over to the new image (example)

  1. In integration-config's jjb directory, update the Jenkins job-builder YAML files to specify the new docker images: sed -i '' s/:0.0.42/:0.0.43/' jjb*
  2. Verify all Quibble images have been updated: ./utils/docker-updates
  3. Verify that these jobs build correctly: ./jjb-test -o output/
  4. Get a list of all jobs which will be updated by the change; there will be around 150 as of 2020-06-04.
  5. Push these updates as a commit to code review.
  6. Based on your knowledge of the changes in quibble, pick a likely simple, infrequent, fast-running job to manually change over, and push it: ./jjb-update 'quibble-vendor-mysql-php72-docker'
  7. Manually trigger run a run of this job through the Jenkins Web interface, and carefully watch the output to ensure it works as it used to where it should, and in a different way where Quibble's changes should change things.
  8. If you spot an error, rollback the job to the definition in master immediately rather than debugging live; remember that other people's workflows depend on CI continuing to work.
  9. Repeat this with increasingly major/high-profile jobs until you are satisfied that you or someone else on IRC would have noticed if the jobs were broken.
  10. Update the rest of the jobs in your list.
  11. Merge the commit as deployed.
  12. You most probably want to verify that a recheck on mediawiki/core and mediawiki/extensions/Wikibase pass fully.
  13. Continue to monitor CI for a while, in case things blow up despite your hard work. If it does, revert everything.
[edit]