Hi everybody, As I'm sure everybody knows, we use Apache's Jenkins instance for all our testing, including pre-commit, post-commit, nightly snapshot, etc. (Travis CI is a backup system and recommended for individual forks only.)
Managing Jenkins projects has been a big pain point so far. Among other reasons, only a few of us have access to configure it, way too few of us have visibility into what those jobs do, and nobody has any visibility into changes being made or an opportunity to comment on them. Well, not any more! I was playing a little bit with Jenkins DSL plugin and was able to move our configuration out of Jenkins and into the git repository. I've done it as a proof of concept for the website repository only [1], but Jason is planning on extending that work to the main repository. Look for a PR shortly! Going forward, anyone can see what our Jenkins jobs are doing, and anyone can add new jobs or improve existing ones by simply proposing a pull request to change the configuration. Finally, the project maintains a history in source repository, instead of direct changes without much accountability. How this works? There's a "seed" job that periodically applies configuration specified in the source repository into Jenkins. Currently, this happens once per day. If you modify the configuration in the source repository, it will be applied within 24 hours. If you, however, modify the configuration in Jenkins directly, it will revert back to whatever is specified in the code repository also within 24 hours. How to understand Jenkins DSL? There are many resources available; I've found Jenkins Job DSL API [2] particularly helpful. I hope you are excited to have this feature available to us! If you have any thoughts on improving this further, please comment. Thanks! Davor [1] https://github.com/apache/incubator-beam-site/pull/80 [2] https://jenkinsci.github.io/job-dsl-plugin/