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.
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.
- 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.
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 Hoptransforms→ diretório contendo pipelinesfilename.hpl→ pipeline a ser executado
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 jenkinsEssa imagem estende o Jenkins oficial e adiciona o Docker CLI, permitindo que o Jenkins execute containers diretamente.
Executar o comando abaixo no diretório onde está o Dockerfile:
docker build -t jenkins:latest .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:latestParâ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 |
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/initialAdminPasswordO 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á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 |
-v "/path/to/projects:/files"
Esse volume permite que o container acesse os pipelines armazenados no host.
No Jenkins:
- Criar um New Item
- Selecionar Freestyle Project
- Na seção Build
- Adicionar Execute Shell
- Inserir o comando Docker do Apache Hop
- Configurar o Build periodically
Exemplo de cron:
*/5 * * * *
Executa a cada 5 minutos.
Essa abordagem traz diversas vantagens.
Cada execução do Hop ocorre em um container independente, evitando conflitos de dependência.
O ambiente é sempre idêntico entre execuções.
Atualizações podem ser feitas apenas trocando a imagem Docker.
Múltiplos pipelines podem ser executados paralelamente.
Permite integrar pipelines de dados a fluxos de automação.
Uso de --rm garante que o container seja removido após execução.
Uso de volume:
jenkins_home
Evita perda de configurações.
- Jenkins → orquestração
- Hop → processamento de dados
Facilita parametrização e reutilização de pipelines.
jenkins/jenkins:ltsapache/hop:latest
Garantindo estabilidade e suporte da comunidade.