Uma forma de simplificar a configuração dos projetos no Jenkins é utilizar um Job do tipo Matrix, com ela você consegue manter um projeto com diversas configurações. Por exemplo um projeto C++ que utiliza a biblbioteca do Qt e é multiplataforma pode ser configurado com as seguintes opções:
- SO: linux / windows / mac
- Versões do Qt: 3 / 4
- Diferentes compiladores ou versões: gcc / clang
Essas opções você adiciona com user-defined axis, com o filtro você monta as combinações necessárias para o seu projeto.
Configuração nos axis:
Nome: so
Valores: windows linux mac
Nome: qt
Valores: 3 4
Nome: compilador
Valores: gcc clang
Podemos ter o seguinte filtro:
so == "windows" && qt == "3" ||
so == "windows" && qt == "4" ||
so == "linux" && qt == "4" && compilador == "gcc" ||
so == "linux" && qt == "4" && compilador == "clang"
Isso exclui a combinação linux+qt3 por exemplo.
Até aqui tranquilo, era fácil de descobrir, a manha da lasanha é o plugin Conditional BuildStep Plugin que permite combinar múltiplas condições com um buildstep diferente pra cada, o que é necessário para diferentes sistemas operacionais
- Para o build step selecione: Conditional steps (multiple)
- Run:And
- Para a condição selecione: Regular expression match
- Expression ( valor definido no axis ): windows
- Label (nome do axis):
${ENV, var="so"}
- outra condição:Regular expression match
- Expression ( valor definido no axis ): 4
- Label (nome do axis):
${ENV, var="qt"}
- Steps to run if condition is met:Executar comando do Windows
- …colocar o comando de compilação com QT4 e no windows…
- Para o build step selecione: Conditional steps (multiple)
- Run: And
- Para a condição selecione: Regular expression match
- Expression ( valor definido no axis ): linux
- Label (nome do axis):
${ENV, var="so"}
- outra condição: Regular expression match
- Expression ( valor definido no axis ): 4
- Label (nome do axis):
${ENV, var="qt"}
- outra condição: Regular expression match
- Expression ( valor definido no axis ): gcc
- Label (nome do axis): ${ENV, var=”compilador”}
- Steps to run if condition is met: Executar shell
- …colocar o comando de compilação com QT4, no linux e com o gcc…
Configuração no Jenkins…
Job…
Matrix de configuração
Este é um exemplo de configuração, fica muito melhor do que criar um Job para cada configuração…