First of all i should describe how build was defined in Jenkins and what it does.
We have a repository with SaltStack configuration. If you are not familiar with salt, you can assume cheff recipes, puppet modules instead.
This configuration defines provisioning for wide range of host systems.
My build performs next steps:
- Selects a revision (commit) in salt formula repository (most often it's branch tip)
- Run provisioning test for this formula revision (instantiates VMs and launches salt commands on this VMs)
- If provisioning successful, launches set of integration/functional test suites against provisioned software.
In Jenkins its organized in three jobs (build configuration).
- First one is Build flow. It linked to salt formula repository and acts like a trigger. Dosn't do any testing, but determines revision and pass this revision to nested jobs. Also it does aggegation of nested job results. If second job successful, third job is launched with meta information about second job as parameters.
- Second one perform all the provisioning things. Once it done, it save all the generated data (addresses of provisioned hosts and so) as artifacts.
- Third job got parameters which help to identify second job run and artifacts location. Since these artifacts are retrieved, functional test configuration and running takes place.
Why do i have three jobs? Because flexibility! I can run manualy or by script (git bisect for example) to trigger only second job. This is why i don't like new Pipeline concept in jenkins.
Why do i consider moving to TeamCity? Because i like how it handles multibranch build configuration.
What i missing? I cant figure out how to implement first one (trigger) job, because TC lacks of something like Jenkins Build Flow plugin.
If anybody have any idea or experience implementing similar build, i would be very thankful for any advices.
What i want to save from Jenkins structure is ability to run provisioning test with parameter, which specifies salt formula revision.
If something is unclear, please ask me, i'll provide any details.