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:

menu do jenkins

Clique em Manage Plugins:

Manage Plugins

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

Aba para buscar e gerenciar plugins

Busque por nodejs e marque seu checkbox.

Nodejs plugin

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

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”.

Instalando Plugins com reinicialização marcada

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.

Global Tool Configuration

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

Botão NodeJS Installations

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

configurações do NodeJS

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.

menu do jenkins

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

criando job

Você verá isso:

Abas do job

No pipeline, cole o código

pipeline {
  agent any
 
  tools {nodejs “node”}
 
  stages {
    stage(‘Example’) {
      steps {
        sh ‘npm config ls’
      }
    }
  }
}

O job ficará assim:

Pipeline Script

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.

menu do Job

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

Build Histoy

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.

Stage View

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:

Stage View do git clone

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.

Stage View com git, download das dependências e npm test

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.

Jenkinsfile dentro do projeto git

Volte ao jenkins e mude o job.

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

Pipeline script from SCM

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

Build sua pipeline de um repositório git

Credenciais Git

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

Botão Add credenciais git

Adicione suas credenciais git

Adicione suas credenciais git

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

Configuração git com credenciais

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

Em breve