If the mountain will not come to Mohamet, Mohamet must go to the mountain.
Journeyman is an attempt to create a build server environment that is reasonably easy to use and set up. Focussing on the notion that different applications need different build steps, Journeyman employs a domain specific language called "journey" to describe a project's build process.
Journeyman currently focusses on use with Python projects, as it will do the following:
- connect to a worker node via ssh
- create a virtualenv repository
- check out a given repository (currently git only)
- run build steps as defined in journey file
- archive virtualenv
- determine build result from xunit-test conforming xml
Journey files consist of named rules and steps that are formulated in YAML.
Let's take a look into such a journey file:
build: - dependencies - install - test - fetch_results dependencies[fetch_pip_dependencies]: - spielwiese/requirements.txt install: - cd spielwiese && python setup.py install test[run_tests]: - cd spielwiese && nosetests --with-xunit fetch_results[fetch_xunit_results]: - spielwiese/nosetests.xml
The journey build runner uses this file to determine the steps in a build. Journeyman will always look for a "build"-rule, if it does not exist, try to execute a default build rule:
build: - dependencies - install - test - testresults
To execute a rule, journeyman will follow the steps in the build rule and run the associate step. The first rule to run obviously is "dependencies".
dependencies[fetch_pip_dependencies]: - spielwiese/requirements.txt
Rules can optionally use square brackets to specify a plugin to run the steps defined in them. When no plugin was specified, it is assumed that the steps are shell commands and will by run by the plugin "run_commands".
Journeyman comes with the following plugins:
- Runs every single command step, if one of the steps fails i.e. return code != 0, the build fails and execution ends immediately
- Since most testing tools return non-0 results for failing tests and we might want to run multiple test suites, this plugin keeps on executing all steps even if they fail.
- Given one path to a dependency file per step, this plugin will run install -r $file
- Given one path to an xml unittest file per step, this plugin will download the file and thus allow to see the unittest results in the build results view.
- Add build configuration to project repository and let journeyman take care of the rest
- When you don't have access to the repository, the build server can save your journey script and use it when appropriate
- Support for xUnit XML test results
- Support for future enhancements: new build steps, new result processing steps