This week, in a customer, I had to write a Groovy script to import some projects from an old installation. The SVN URL
had changed. Not only the domain, but now the SVN structure was broken in modules (i.e. instead of /svn/…
now there was /repo1/…, /repo2/…, etc).
The solution I found, was scan the SVN directory structure with Perl and produce a JSON file. Then I wrote a quick PHP
application (with Slim) with an URL like /repo?projectName=XYZ,
that returned the new repository URL.
The last step was the hardest, since I needed to query the REST application. The script would get the current SVN
address from the SVN SCM, query the REST URL to get the new URL, and lastly update the job with the new URL.
The solution I found was copy the necessary jars to jenkins lib/ folder, restart the server and execute my
script. Then stop the server, remove the jars and check the new SVN URL’s. Here’s the list of jars I had to copy.
http-builder
nekohtml-1.9.9
xml-resolver-1.2
httpclient
httpcore
xercesImpl
If you have a Maven project with your REST client, you can get a list of dependencies with
mvn dependency:copy-dependencies
. Then copy the jars to Jenkins class path.
Groovy é uma linguagem dinâmica e simples de usar. Ele é baseada no Java (mas mais simples) e roda dentro da JVM. Assim, você consegue executar trechos de código dentro da sua JVM e modificar objetos em tempo de execução, sem nem precisar compilar seus scripts.
O Jenkins utiliza Groovy de diversas maneiras. Quando você escreve plug-ins, você pode usar Groovy tanto para o código quanto para a UI (a vantagem disso é que você pode depurar a tela, diferente do Jelly). Há também diversos plug-ins que permitem que você execute Groovy ou algum DSL com Groovy (como o Job DSL Plug-in). E há também o CLI do Jenkins, um cliente que permite que você execute diversos comandos no Jenkins, entre eles o groovysh, um shell para Groovy, e o groovy, que permite que você envie um script para o Jenkins executar no master.
Há um exemplo que vem com o Jenkins de um script groovy bem simples, que imprime todos os plug-ins instalados:
println(Jenkins.instance.pluginManager.plugins)
pluginManager é o responsável por gerenciar plug-ins no Jenkins, e é um membro da classe Jenkins. Você pode ver mais sobre esta classe lendo o Javadoc do projeto. Ou se você utilizar Eclipse (ou outro IDE) você pode utilizar auto complete e ir escrevendo seu código Groovy com auxílio do IDE :o).
No vídeo acima você aprenderá como configurar seu Eclipse. O segredo é criar um projeto Maven + Groovy (com o plug-in Groovy para Eclipse) e incluir uma dependência para o projeto do Jenkins no seu pom.xml. Assim o Eclipse, utilizando Maven e Groovy, consegue usar o auto complete no seu código. Você pode digitar o começo do nome de uma classe e apertar CTRL + TAB para o Eclipse mostrar as opções e auto completar, ou clicar F3 e ver o código-fonte no projeto Jenkins ou CTRL + T e ver a hierarquia (de onde herda, quem estende essa classe, etc).
Aproveite este começo de ano (já que alguns dizem que o ano começo depois do carnaval) e automatize aquelas tarefas chatas como verificar se todos os jobs estão usando time-out (com o Build Timeout Plug-in) ou para realizar migrações ou atualizações em plug-ins, jobs ou slaves.