Professional Documents
Culture Documents
Aumentando a produtividade na
administrao de
servidores Jenkins
Como fazer o essencial e o no to essencial com o Jen-
kins. Aprenda a configurar ambientes distribudos, criar
scripts para automatizar tarefas e integrar o Jenkins com
outras ferramentas como Puppet.
/ 16
Bruno P. Kinoshita | bruno@tupilabs.com
engenheiro de software formado no Mackenzie, scio de uma empresa de consultores independentes e um dos fundadores da
TupiLabs http://www.tupilabs.com. D palestras e escreve artigos no Brasil e no exterior, committer da Apache e membro ativo
de projetos de cdigo livre. No tempo livre, pratica escalada, slack line, surfa, corre e desenha.
Site pessoal http://www.kinoshita.eti.br e GitHub http://www.github.com/kinow.
17 \
master e slaves. O master sendo responsvel pela
Scale out VS. Scale up aplicao Web e por coordenar a execuo de builds
O Jenkins scale out melhor que scale up. Isso (bem como plug-ins e build steps) tanto no master
quer dizer que no modelo de sistema distribudo como nos slaves.
do Jenkins, melhor voc criar vrios slaves,
mesmo em mquinas simples, do que voc
tentar criar um master em um supercomputador.
Criando um Slave simples
H diversas formas de adicionar slaves no Jenkins.
Neste vdeo o criador do Jenkins, Kohsuke Kawaguchi,
Voc pode criar um slave simples (chamado tambm
fala mais sobre o modelo distribudo do Jenkins alm
de dumb slave) que controlado pelo master; criar
de sobre outros tpicos de integrao contnua e
um slave na nuvem com os plug-ins JClouds ou EC2;
Jenkins, http://www.infoq.com/presentations/Whats-
Next-in-Continuous-Integration usar o Swarm Plug-in para auto-provisionamento de
slaves ou at inventar um novo mecanismo especfico
para a configurao do seu projeto.
Vamos mostrar como criar um slave simples. Nos-
so master um Linux e vamos criar um slave Windo-
cores). A fila de builds continua com builds concor-
ws que pode executar builds de aplicaes nativas ou
rendo pelos executores.
realizar testes com o IE.
A soluo montar um ambiente distribudo com
O primeiro passo (figura 1) acessar a pgina de
configurao do Jenkins (http://<jenkins>/manage),
e procurar pela opo para gerenciar slaves (Manage
Nodes).
Na pgina de gerenciamento de slaves (figura 2)
voc vai encontrar o master sendo listado com suas
configuraes. Procure por um link na sua esquerda
para adicionar novo slave (New Node).
Digite um nome para o novo slave e selecione
Dumb Slave (figura 3).
Em seguida voc ser apresentado com um for-
mulrio para inserir mais parmetros do slave (figura
4). Voc ainda pode alterar o nome do slave e adicio-
nar uma descrio. Mas os parmetros mais impor-
tantes so nmero de executores, o file system remo-
to e os labels.
Por padro, utilizamos dois executores, mas de-
Figura 1. Pgina de gerenciamento do Jenkins. pendendo do nmero de cores disponveis, este n-
/ 18
mero pode ser aumentado. O file system remoto o
diretrio onde o slave armazena arquivos serializa-
dos do master ou criados durante um build. Por fim,
os labels so usados para a execuo de builds, como
veremos mais adiante.
Quando voc salvar a listagem de ns (nodes)
haver um novo, alm do master (figura 5). Porm o
cone do seu slave ter uma marca em vermelho, in-
dicando que est offline. Voc pode conferir o status
dos slaves abaixo da fila de builds tambm.
Se voc tiver selecionado para iniciar o sla-
ve pelo Java Web Start, basta executar javaws
http://<jenkins>/computer/slave01/slave-agent.jnlp
(ou baixar o arquivo JNLP e execut-lo da mesma for-
Figura 6. Slave conectado no Windows.
ma). Se o slave for iniciado com sucesso, voc ver
uma janela como a da figura 6.
E quando voltarmos para a tela de listagem de
19 \
Figura 8. Criando um job que utilize o slave.
21 \
possvel ver o nmero de downloads de cada plug-in. 4. Continuous Integration Game - Plug-in que
Prefira plug-ins mais antigos e com o nmero de do- atribui pontos para os membros do time de de-
wnloads alto. Acompanhe tambm os bugs do plug-in senvolvimento conforme eles vo evoluindo os
para ver se no h nenhum grave. Com o tempo pas- seus builds.
saremos a ter uma lista de plug-ins favoritos e saber
at a verso que funciona melhor com certa verso Desenvolvendo Plug-ins
do Jenkins. Por padro, o Jenkins vem com alguns plug-ins
Abaixo h uma lista de plug-ins que podem ser embutidos, como o Maven Plug-in que fornece os
teis nos seus servidores Jenkins, independentemen- templates de projetos para Maven, e o Subversion
te de linguagem de programao ou do tipo do pro- Plug-in que nos permite fazer check out de projetos
jeto. de servidores Subversion no Jenkins.
1. Email-ext Permite anexar logs ou utilizar um H mais de 600 plug-ins hoje para o Jenkins, e
template para o corpo da mensagem quando todo ms h plug-ins novos sendo criados e lana-
notificar usurios de status de builds. dos no update site oficial do projeto. Porm h casos
2. Build Timeout Habilita um timeout (fixo ou dentro de empresas que um build de certo projeto
elstico) nos builds. Assim no ficamos com pode precisar de um plug-in tambm, mas que no
builds prendendo sua fila por horas. faa sentido publicar este plug-in para a comunidade
3. JobConfig History Esse plug-in versiona a toda.
configurao dos seus jobs. Assim conseguimos A maneira mais fcil de desenvolver plug-ins
auditar alteraes na configurao dos seus seguindo o tutorial de plug-ins, do Wiki do Jenkins,
jobs e at voltar verses. e usando plug-ins existentes como base. Por exem-
4. Console Column Adiciona um cone para o plo, se quisermos que um plug-in rode um executvel
ltimo console na tabela de jobs. Muito til do Windows e gere algumas pginas customizadas
quando precisamos abrir o console do ltimo no Jenkins, podemos usar o MSBuild Plug-in como
build do seu projeto rapidamente. exemplo.
5. Extended Read Permission Permite mostrar Podemos escrever plug-ins em Java ou Ruby, po-
a configurao dos seus jobs mesmo sem estar rm nem todos os recursos do projeto esto dispon-
logado, em modo de apenas leitura. veis em Ruby ainda. Em Java, podemos utilizar tanto
Mas h tambm plug-ins no to essenciais, mas Maven quanto Gradle (maioria dos projetos utiliza
que so divertidos ou modificam de maneira simples Maven). E possvel utilizar Eclipse, Netbeans, In-
o Jenkins. telliJ ou o editor da sua preferncia.
1. Chuck Norris Plug-in - Insere o famoso Chuck A parte Web do projeto utiliza o framework Sta-
Norris nos builds, parabenizando quando ocor- pler para MVC e REST, enquanto plug-ins utilizam
rer um sucesso e se preparando para um roun- Jelly, HTML e Groovy para escrever as telas que so
dhouse kick quando o build est quebrado. apresentadas aos usurios.
2. Green Balls Plug-in Mostra cones verdes ao
invs de cones azuis para builds com sucesso.
3. Beer Plug-in Quando precisamos realizar
Actions
Actions so objetos que respondem certas URLs.
qualquer outra tarefa longe do computador,
Quando criamos um plug-in normal a necessidade
enquanto estamos monitorando nosso builds.
de mostrarmos grficos ou criar novas pginas. Nor-
malmente utilizamos Actions que respondem a uma
determinada URL, organizando objetos e usando Jelly
ou Groovy para mostrar o contedo para o usurio.
A action abaixo do Job DSL Plug-in. Quando o
plug-in cria um novo Job usando uma DSL, ele adi-
Lista de plug-ins essenciais por Andrew Bayer ciona essa action ao build. Essa Action possui um ar-
Andrew Bayer um dos membros mais antigos do quivo summary.groovy. Quando abrimos a pgina do
projeto. Trabalha na Cloudera, empresa que contribui build, o plug-in adiciona informaes sobre os jobs
com o Apache Hadoop, um Apache Committer e est criados ao sumrio do build.
sempre no canal do #jenkins na Freenode com o nick
@abayer. Ele fez uma tima seleo de plug-ins que Listagem 5. Build Action do Job DSL Plug-in.
pode ser conferida em uma apresentao com o ttulo
7 hbitos de usurios Jenkins altamente eficazes package javaposse.jobdsl.plugin;
http://www.slideshare.net/andrewbayer/7-habits-of-
highly-effective-jenkins-users import com.google.common.collect.Sets;
/ 22
Vdeo-tutoriais sobre desenvolvimento de plug- public Collection<GeneratedJob> getModifiedJobs() {
ins para o Jenkins return modifiedJobs;
Confira os vdeos tutoriais disponveis no Youtube }
em portugus http://www.youtube.com/tupilabs. Eles
seguem o mesmo script do tutorial de plug-ins do }
Jenkins, usando Java, Maven e Eclipse.
import hudson.model.Action;
import javaposse.jobdsl.dsl.GeneratedJob;
package javaposse.jobdsl.plugin.
import java.util.Collection;
GeneratedJobsBuildAction;
import java.util.Set;
import lib.LayoutTagLib
class GeneratedJobsBuildAction implements Action {
l=namespace(LayoutTagLib)
public final Set<GeneratedJob> modifiedJobs;
t=namespace(/lib/hudson)
st=namespace(jelly:stapler)
public GeneratedJobsBuildAction(
f=namespace(lib/form)
Collection<GeneratedJob> modifiedJobs) {
if (my?.modifiedJobs != null) {
this.modifiedJobs = Sets.newHashSet(modifiedJobs);
t.summary(icon:folder.png) {
}
raw(Generated Jobs:)
ul(class:jobList) {
/**
my.getModifiedJobs().each { af ->
* No task list item.
li() {
*/
a(href:${rootURL}/job/${af.jobName}/,
public String getIconFileName() {
class:model-link tl-tr) { raw(af.jobName) }
return null;
}
}
}
public String getDisplayName() {
}
return Generated Jobs;
}
}
}
public String getUrlName() {
return generatedJobs;
}
23 \
Padro Describable/Descriptor global.jelly cria um novo DescriptorImpl, com con-
No Jenkins quando escrevemos plug-ins, utili- figuraes globais que podem ser acessadas por ins-
zamos sempre Extension Points. Existem diversos tncias do GitSCM.
Extension Points, como o SCM para Source Code
Management, utilizado pelos plug-ins Bazaar, Git e Como obter ajuda e onde aprender mais
Subversion. Tambm possvel criar novos Extension Participar do desenvolvimento do Jenkins mui-
Points para o seu plug-in. Uma atividade rotineira
to fcil, mesmo que voc no programe Java. H bin-
quando desenvolvemos plug-ins a criao de for-
dings para Ruby, bem como um trabalho que ainda
mulrios usados para preencher objetos Java. H um
padro na API de plug-ins do Jenkins onde criamos no ficou pronto de bindings para Python. Tambm
um Descriptor que funciona como uma Factory para h testes Selenium e sempre so necessrios testes
novos objetos (describables). O Descriptor exposto antes de uma release LTS (Long Term Support). Mas
por uma pgina de configuraes (global ou de job). se voc programa em Java, voc pode contribuir (ou
se tornar o mantenedor) com plug-ins ou mesmo com
Listagem 7. Extension Point SCM usado no Git Plug- o core.
-in.
No Wiki do Jenkins tambm encontramos muitas
informaes teis, assim como no site da CloudBe-
es. Os desenvolvedores e alguns usurios conversam
public class GitSCM extends SCM
implements Serializable { no canal IRC #jenkins da FreeNode, mas h tambm
// ... mailing lists para usurios e desenvolvedores.
@DataBoundConstructor Recentemente foi criada uma lista para eventos e
outra para segurana. Se voc tiver um evento, ou se
public GitSCM(String scmName, List
<UserRemoteConfig> userRemoteConfig, ...) { encontrar um bug crtico, consulte os links no final
this.scmName = scmName; deste artigo para enviar mensagens para a lista cor-
//... reta. H ainda uma lista de discusses em Portugus,
} criada aps o evento Jenkins Meetup So Paulo em
// ...
}
2012. Consulte as referncias bibliogrficas no final
deste artigo para o link.
/ 24
/referncias
> Jenkins CI http://www.jenkins-ci.org Plug - ins essenciais ( e os no to essenciais
tambm )
> Jenkins: The Definitive Guide John Fergusson Smart
> Jenkins E-mail-ext Plug-in - https://wiki.jenkins-ci.org/
> @jenkins-br Conta do Twitter brasileiro do Jenkins
display/JENKINS/Email-ext+plugin
> Lista de e-mails em portugus do Jenkins https://
> Jenkins Build Timeout Plug-in - https://wiki.jenkins-ci.org/
groups.google.com/forum/?fromgroups#!forum/jenkinsci-br
display/JENKINS/Build-timeout+Plugin
> Administering Jenkins https://wiki.jenkins-ci.org/
> Jenkins JobConfigHistory Plug-in - https://wiki.jenkins-ci.
display/JENKINS/Administering+Jenkins
org/display/JENKINS/JobConfigHistory+Plugin
Automatizando o Jenkins com Groovy
> Jenkins Column View Plug-in - https://wiki.jenkins-ci.org/
> Jenkins CLI https://wiki.jenkins-ci.org/display/ display/JENKINS/Console+Column+Plugin
JENKINS/Jenkins+CLI
> Jenkins Extended Read Permission Plug-in - https://wiki.
> Groovy Beginners Tutorial http://groovy.codehaus.org/ jenkins-ci.org/display/JENKINS/Extended+Read+Permissio
Beginners+Tutorial n+Plugin
> Jenkins Groovy Plug-in https://wiki.jenkins-ci.org/ > Jenkins ChuckNorris Plug-in - https://wiki.jenkins-ci.org/
display/JENKINS/Groovy+Plugin display/JENKINS/ChuckNorris+Plugin
> Jenkins Scriptler Plug-in https://wiki.jenkins-ci.org/ > Jenkins Green Balls Plug-in - https://wiki.jenkins-ci.org/
display/JENKINS/Scriptler+Plugin display/JENKINS/Green+Balls
> Scriptler Google App http://scriptlerweb.appspot.com/ > Jenkins Beer Plug-in - https://wiki.jenkins-ci.org/display/
JENKINS/Beer+Plugin
Jenkins em ambientes distribudos
> Jenkins Continuous Integration Game Plug-in - https://
> Distributed builds https://wiki.jenkins-ci.org/display/
wiki.jenkins-ci.org/display/JENKINS/The+Continuous+Integ
JENKINS/Distributed+builds
ration+Game+plugin
> Jenkins Amazon EC2 Plug-in https://wiki.jenkins-ci.
Desenvolvendo Plug - ins
org/display/JENKINS/Amazon+EC2+Plugin
> Tutorial de desenvolvimento de Plug-ins - https://wiki.
> BioUno PBS Plug-in https://github.com/tupilabs/pbs-
jenkins-ci.org/display/JENKINS/Plugin+tutorial
plugin
> Definindo um novo extension point - https://wiki.jenkins-
> Jenkins Swarm Plug-in https://wiki.jenkins-ci.org/
ci.org/display/JENKINS/Defining+a+new+extension+point
display/JENKINS/Swarm+Plugin
> Post no blog da CloudBees sobre Actions - http://blog.
Utilizando Jenkins com Puppet
cloudbees.com/2011/08/jenkins-internal-action-and-its.html
> PuppetLabs Puppet http://puppetlabs.com/
Padro Describable/Descriptor
> Puppet no Jenkins com Ubuntu https://wiki.jenkins-ci.
> Extension Points - https://wiki.jenkins-ci.org/display/
org/display/JENKINS/Puppet
JENKINS/Extension+points
> Mdulo puppet-jenkins https://github.com/rtyler/
> Jenkins Git Plug-in - https://wiki.jenkins-ci.org/display/
puppet-jenkins
JENKINS/Git+Plugin
> Post do rtyler sobre Jenkins e Puppet http://
Como obter ajuda e onde aprender mais
unethicalblogger.com/2011/12/28/jenkins-with-puppet.
html > Listas de e-mail do Jenkins - http://jenkins-ci.org/content/
mailing-lists
> Repositrio de manifestos e mdulos Puppet do Jenkins -
https://github.com/jenkinsci/infra-puppet > Plug-ins do Jenkins - https://wiki.jenkins-ci.org/display/
JENKINS/Plugins
25 \