Intrudução
Para este tutorial, você precisa do jenkins instalado. Este pode rodar em docker com o seguinte tutorial: Iniciando com jenkins no docker.
O pipeline é melhor pois:
- você pode reutilizar tudo que já fez
- você pode colocar seu código de build dentro do projeto, junto do seu código
- você pode versionar o código do job
- as mudanças feitas no pipeline são mostradas em “changes” dentro do “job history”
Todas mudanças no git iniciarâo o job. Com Jenkinsfile (arquivo com o código do pipeline) dentro do seu projeto git, todas as mudanças do pipeline ou do seu projeto iniciarão o job e as modificações ficarão no log.
Instalando a ferramenta Node.js
Na home do jenkins, clique em Manage Jenkins:

Clique em Manage Plugins:

Em Plugin manager, clique na aba Available e depois de carregá-la, busque o plugin.

Busque por nodejs e marque seu checkbox.

Clique no botão “Download now and install after restart”.

Na próxima tela, marque o checkbox “Restart Jenkins when installation is complete and no jobs are running”.

Aguarde um tempo, se a tela não mudar, vá para a home do jenkins clicando no logo do jenkins que fica no topo esquerdo do site.
Configurando a ferramenta Node.js
Depois de instalar e reiniciar, vá para a home do jenkins > Manage Jenkins > Global Tool Configuration.

Busque por NodeJS e clique no botão NodeJS instalation.

Coloque um nome para a configuração do node, ex: node. Selecione a versão do node que você precisa.

Teste o plugin nodejs
OK. NodeJS instalado com sucesso. Vamos testa-lo.
Vá para a home do jenkins e clique em New Item no menu do jenkins.

Vamos criar um job. Nomeie-o com build-test e selecione pipeline. Clique em “OK”.

Você verá isso:

No pipeline, cole o código
pipeline {
agent any
tools {nodejs “node”}
stages {
stage(‘Example’) {
steps {
sh ‘npm config ls’
}
}
}
}
O job ficará assim:

Explicação do Pipeline
Antes de continuar, vamos entender o pipeline:
agent any
O job irá executar em qualquer agente do jenkins.
- Podemos ter vários nós do jenkins, um mestre e alguns servos, e o job poderá executar em qualquer um.
- Você pode executar o job em um jenkins específico, ex: Você tem 3 jenkins com Linux e um com Windows. Você pode forçar executar este job somente no jenkins com Windows.
tools {nodejs “node”}
Esta linha busca pela ferramenta nodejs, nomeada como “node” e a usa no pipeline. É necessário para os próximos scripts encontrarem o comando node.
stages {
Stages são as etapas do pipeline.
stage(‘Example’) {
steps {
...
}
}
Este comando inicia uma nova etapa chamada “Example” e executa os passos dentro da etapa.
sh ‘npm config ls’
Executa um script sh na máquina. Com isso, podemos testar se o npm está rodando corretamente.
Rodando o test
Agora, vamos executar o script. Salve o job. Dentro deste, no menu a esquerda, clique em Build Now.

Aguarde um tempo para o build aparecer no build history abaixo do menu (Se necessário, recarregue a página).

Depois do build terminar, o círculo poderá ser vermelho ou azul. Se o círculo for azul, o job foi executado com sucesso.
No centro da página, você pode visualizar as etapas.

Pode se ver o log do build clicando no circulo azul dentro do build history. Você verá isto:
Started by user Gustavo
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/build-test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Tool Install)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Example)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
[build-test] Running shell script
+ npm config ls
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/5.6.0 node/v9.10.1 linux x64"
; node bin location = /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node/bin/node
; cwd = /var/jenkins_home/workspace/build-test
; HOME = /var/jenkins_home
; "npm config ls -l" to show all defaults.
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Ok. O build de test está certo. Vamos criar um real job com node.
Testando a aplicação
Vá para a home do jenkins, clique em “new item”. Selecione pipeline e crie um job nomeado “node_test” e coloque este script:
pipeline {
agent any
stages {
stage('Cloning Git') {
steps {
git 'https://github.com/gustavoapolinario/microservices-node-example-todo-frontend.git'
}
}
}
}
Teste o job, ele irá fazer download de um projeto node para seu jenkins. O stage view precisa ser:

Agora, na tela do job. Clique em “configure” e vamos mudar o código.
pipeline {
agent any
tools {nodejs "node"}
stages {
stage('Cloning Git') {
steps {
git 'https://github.com/gustavoapolinario/microservices-node-example-todo-frontend.git'
}
}
stage('Install dependencies') {
steps {
sh 'npm install'
sh 'npm run bowerInstall'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
}
}
Depois do passo de clonar, instalaremos as dependências do npm e as dependências do bower usando npm run. Finalmente o teste é executado.

A aplicação foi testada com sucesso.
Pipeline dentro do projeto
Agora, vamos colocar o script do pipeline dentro do projeto git em um arquivo chamado Jenkinsfile.

Volte ao jenkins e mude o job.
Primeira etapa, troque a definição do job pipeline para “Pipeline script from SCM”.

Selecione Git em SCM Select. Coloque seu repositório git Repository URL.

Credenciais Git
Se você precisar de credenciais para acessar seu repositório git, Clique no botão “Add”.

Adicione suas credenciais git

E a configuração do job está com sua credencial.

Temos um projeto node testado. Agora vamos gerar um container docker com nosso projeto.
Em breve