Multi-platform parallel integration with Jenkins
- February 15, 2012
- No Comments
Our back-end C applications are supported across platforms, at least currently running on Linux and Solaris, so we need to consider how to implement the need to trigger multi-platform parallel (and simultaneous) integration after code commit when configuring a continuous integration environment.
Prior to using Buildbot, this requirement was met by configuring multiple builder for a scheduler. But now for Jenkins, how do we do that? Yesterday, when I was tossing Jenkins, I thought it was easy, today I looked at the build log carefully before discovering that the previous configuration did not really realize multi-platform parallel integration.
The initial Jenkins configuration was roughly the same: I added two nodes (Slave node) to Jenkins, respectively, X86-linux-ci-slave and X86-solaris-ci-slave, and set the same label for the two nodes " Foo-ci-slaves ". Then I created a new job– "Foo-multiplatform-ci" and chose "build a free-style software project (build a Free-style software project)." In order for the job to perform parallel integration, I chose "Restrict where this project can be run" and "Foo-ci-slaves" in "Label Expression", other configurations are not described here.
As I initially understood, by clicking "Build Now" after this configuration, two slave node will be associated with the integration at the same time. But build log tells me the truth is not what I imagined: Jenkins just performed the job on a slave node. How do you use Jenkins to achieve the above-mentioned multi-platform parallel integration? Look, I found out it was me. When creating a job, I chose the wrong configuration, and I should choose "Build a multi-configuration project (build Multiconfiguration)".
The Restrict where this project can be run configuration option is missing from the configuration page of Multiconfiguration project compared to Free-style project, but there is an extra " Configuration Matrix "Config area. In this area, we can choose slaves, and in Node/label we can see all the labels and nodes that are configured in the current Jenkins. Choosing a label does not meet our requirements, so Jenkins only chooses one of several nodes in the label to perform the integration. So I choose Nodes, X86-linux-ci-slave and X86-solaris-ci-slave are selected, after saving we will see the "Foo-multiplatform-ci" job on the main page of the two configuration : X86-linux-ci-slave and X86-solaris-ci-slave. Click "Build Now", the two configuration corresponding to the ball symbol will be flashing at the same time, this shows that "Foo-multiplatform-ci" is running in parallel on two slave node, this is the result I want.
Support for multi-platform parallel integration is just one of the uses of Multiconfiguration project, and the Jenkins:the definitive Guide is a more detailed explanation that you can combine to customize axis and parameterized build for more complex build requirements. But at present I have not met similar demand, so here also dare not utter ^_^.
© Copyright, Bigwhite. All rights reserved.
Resources:
http://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/
"Continuous integration" uses Jenkins for multi-platform parallel integration