Skip to content

dbandre76/apache-hop-jenkins-docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Apache Hop + Jenkins (Docker) — Execução de Pipelines e Workflows Agendados

Este projeto demonstra como executar pipelines e workflows do Apache Hop de forma agendada utilizando Jenkins, ambos rodando em Docker, sem necessidade de instalar ferramentas diretamente na máquina host.

A abordagem utiliza:

  • Docker para isolamento do ambiente
  • Jenkins para orquestração e agendamento
  • Apache Hop para execução de pipelines e transformações
  • Volumes Docker para persistência e compartilhamento de arquivos

Essa arquitetura permite criar um ambiente reproduzível, portátil e de fácil manutenção, ideal para automação de processos de dados.


Arquitetura

Fluxo de execução:

Jenkins (Docker)
     │
     │ executa job agendado
     ▼
Docker Run
     │
     ▼
Apache Hop Container
     │
     ▼
Execução de pipeline (.hpl)

O Jenkins dispara o comando docker run que executa o Apache Hop em container efêmero, processando os pipelines armazenados em um diretório compartilhado.


Pré-requisitos

  • Docker instalado na máquina host
  • Permissão para executar containers
  • Estrutura de projeto Apache Hop criada

Nenhuma instalação adicional de Jenkins ou Apache Hop é necessária.


Estrutura do Repositório

O diretório do projeto deve estar organizado da seguinte forma:

/path/to/projects/

project_test
 ├─ project-config.json
 └─ transforms
     └─ filename.hpl

Onde:

  • project-config.json → configuração do projeto Hop
  • transforms → diretório contendo pipelines
  • filename.hpl → pipeline a ser executado

Construção da Imagem Jenkins

Dockerfile utilizado:

FROM jenkins/jenkins:lts

USER root

RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release && \
    install -m 0755 -d /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
    chmod a+r /etc/apt/keyrings/docker.asc && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list && \
    apt-get update && \
    apt-get install -y docker-ce-cli && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

USER jenkins

Essa imagem estende o Jenkins oficial e adiciona o Docker CLI, permitindo que o Jenkins execute containers diretamente.


Build da Imagem

Executar o comando abaixo no diretório onde está o Dockerfile:

docker build -t jenkins:latest .

Execução do Jenkins em Container

docker run -d \
  --name jenkins-container \
  -u root \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins:latest

Parâmetros importantes:

Parâmetro Função
-p 8080:8080 Interface Web do Jenkins
-p 50000:50000 Comunicação entre agentes Jenkins
jenkins_home:/var/jenkins_home Persistência dos dados do Jenkins
/var/run/docker.sock Permite que Jenkins execute containers no host

Acesso ao Jenkins

Após iniciar o container, acessar:

http://localhost:8080

Para obter a senha inicial do usuário admin:

docker exec -it jenkins-container cat /var/jenkins_home/secrets/initialAdminPassword

Comando de Execução do Apache Hop

O Jenkins executará o seguinte comando para rodar a transformação:

docker run --rm \
  --env HOP_LOG_LEVEL=Basic \
  --env HOP_FILE_PATH='/files/project_test/transforms/filename.hpl' \
  --env HOP_PROJECT_FOLDER='/files/project_test' \
  --env HOP_PROJECT_NAME='project_test' \
  --env HOP_RUN_CONFIG='local' \
  --name hop-container \
  -v "/path/to/projects:/files" \
  apache/hop:latest

Variáveis utilizadas

Variável Descrição
HOP_LOG_LEVEL Nível de log da execução
HOP_FILE_PATH Caminho do pipeline
HOP_PROJECT_FOLDER Pasta do projeto Hop
HOP_PROJECT_NAME Nome do projeto
HOP_RUN_CONFIG Configuração de execução

Volume

-v "/path/to/projects:/files"

Esse volume permite que o container acesse os pipelines armazenados no host.


Agendamento no Jenkins

No Jenkins:

  1. Criar um New Item
  2. Selecionar Freestyle Project
  3. Na seção Build
  4. Adicionar Execute Shell
  5. Inserir o comando Docker do Apache Hop
  6. Configurar o Build periodically

Exemplo de cron:

*/5 * * * *

Executa a cada 5 minutos.


Importância desta Arquitetura

Essa abordagem traz diversas vantagens.

Isolamento do ambiente

Cada execução do Hop ocorre em um container independente, evitando conflitos de dependência.

Reprodutibilidade

O ambiente é sempre idêntico entre execuções.

Facilidade de manutenção

Atualizações podem ser feitas apenas trocando a imagem Docker.

Escalabilidade

Múltiplos pipelines podem ser executados paralelamente.

CI/CD para dados

Permite integrar pipelines de dados a fluxos de automação.


Boas Práticas Aplicadas

Containers efêmeros

Uso de --rm garante que o container seja removido após execução.


Persistência de Jenkins

Uso de volume:

jenkins_home

Evita perda de configurações.


Separação de responsabilidades

  • Jenkins → orquestração
  • Hop → processamento de dados

Execução via variáveis de ambiente

Facilita parametrização e reutilização de pipelines.


Uso de imagens oficiais

  • jenkins/jenkins:lts
  • apache/hop:latest

Garantindo estabilidade e suporte da comunidade.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors