Automatize processos com Rundeck: Guia completo para DevOps

Automatize processos com Rundeck: Guia completo para DevOps

O Rundeck é uma aplicação java de código aberto que automatiza processos e rotinas nos mais variados ambientes, gerenciado via interface gráfica fica extremamente simples de verificar status de execuções, saídas de erro, etc. Muito utilizado quando se trata de ambientes DevOps, principalmente em uma abordagem de Entrega Contínua, onde em pequenos ciclos novas versões de software são construídas, testadas e liberadas de forma confiável e em curtos períodos de tempo.

A execução de comandos é separada em “Jobs”. Entenda como uma job um comando, um script, uma URL(com um script) ou até mesmo chamada para uma outra job. O fluxo de trabalho dele em relação à execução de comandos pode usar três estratégias:

– Node First, que executa todos os steps em cada node e só depois vai para o próximo.

1. Webserver step 1

2. Webserver step 2

3. Webserver step 3

4. Mailserver step 1

5. Mailserver step 2

6. Mailserver step 3

– Parallel, que executa todos os steps em todos os nodes simultaneamente. – Sequential, executa o primeiro step em todos os nós antes de prosseguir para o próximo step.

1. Webserver step 1

2. Mailserver step 1

3. Webserver step 2

4. Mailserver step 2

5. Webserver step 3

6. Mailserver step 3

Independente da estratégia utilizada, é possível especificar uma ação de tratativa de erros, que se resume em “Parar no step que falhar” ou “Execute os steps faltantes”. Com o Rundeck existe a possibilidade de executarmos a ação localmente, caso haja alguma outra ferramenta responsável pelo deploy (ansible, puppet, chef, etc) ou permite executar em outros nodes (via SSH com o usuário rundeck). Se a execução for em hosts remotos, ele permite que seja criada uma orquestração de acordo com a necessidade, por exemplo: Executar nos nodes por ordem alfabética ascendente e caso algum falhe continue executando em todos os nós restantes. OBS: Para adicionar nodes é necessário alterar o arquivo resources.xml dentro do diretório do seu projeto. (/var/rundeck/projects/${NOMEDOPROJETO}/etc/resources.xml) Outro fator interessante é a possibilidade de enviar notificações por e-mail ou API.

  • Em caso de Sucesso;
  • Em caso de Falha;
  • No momento do Start.

Também é possível agendar aquela job para executar em determinados horários dias da semana e mês (Agendamento pelo próprio Rundeck ou pela Crontab). Além disso ele permite tratar todos os níveis de log. O último campo da página de Jobs é um campo muito importante “UUID”, porque além de ser a identificação única da Job ela é usada para execuções externas.

Instalção do Rundeck

Nesse post farei a instalação no CentOS, pois o mesmo já disponibiliza o pacote pré-compilado via repositório. Primeiramente, vamos instalar o Java.

# yum install java-1.8.0 -Y

Instalar o pacote com o repositório.

# rpm -Uvh http://repo.rundeck.org/latest.rpm

Com o repositório configurado, vamos instalar o pacote do rundeck.

# yum install rundeck -Y

Com o pacote instalado, vamos entrar no diretório de configurações do Rundeck “/etc/rundeck”. Para acessarmos o Rundeck via Web Broswer, vamos tirar to localhost, para isso vamos alterar os arquivos “rundeck-config.properties” e o “framework.properties”. OBS: Apesar de funcionar com IP é sempre recomendado o uso de DNS.

# vim rundeck-config.properties
grails.serverURL=http://192.168.200.10:4440
vim framework.properties
framework.server.name = fordevops
framework.server.hostname = rundeck.fordevops.com
framework.server.port = 4440
framework.server.url = http://rundeck.fordevops.com:4440

Após essas alterações podemos dar restart no serviço.

# systemctl restart rundeckd

Nesse momento já podemos acessar via Web Broswer. http://rundeck.fordevops.com:4440 O usuário padrão é “admin” e a senha “admin”.

rundeck 09

Crie seu primeiro projeto

Na tela inicial, o rundeck solicita a criação de um projeto, vamos criar o nosso ! Como exemplo vou criar um projeto “Dexter”.

rundeck 08

rundeck 07

Abaixo, ele terá as opções de acesso SSH, no nosso caso faremos tudo local, então vou usar as opções padrões, podemos clicar em “Criar”. Depois de criarmos o projeto, caso não haja nenhum outro ele vai entrar nesse projeto pois entende que vamos começar a criar jobs para o mesmo.

 

rundeck 06

 

No campo superior, vamos entrar em “Jobs”, e a partir daí podemos criar a nossa Job.

rundeck 05

Vamos clicar em “Create a new Job”

rundeck 04

 

OBS: O campo grupo é utilizado para separar as jobs e pode ser usado via API. Na parte de Fluxo de Trabalho, vamos usar o padrão pois se trata de uma execução local. Vamos adicionar um step na nossa job, que executará um comando.

rundeck 03

Nesse comando, vamos criar um arquivo em /tmp, passando algumas variáveis.

rundeck 01

– ${job.execid} – ID da job que será executada.

– ${node.os-name} – Nome da versão do sistema operacional do node.

– ${node.os-version} – Versão do sistema operacional do node.

– ${node.os-arch} – Arquitetura do sistema operacional do node.

 

Feito isso podemos salvar. Nessa job não vamos alterar nenhum outro parâmetro, então podemos clicar em “Save”.

Em seguida, ele terá criado a job e podemos executá-la.

Ao clicarmos em “Run”, ele retornará o status da execução na tela e podemos validar na máquina se o arquivo realmente foi criado.

 

rundeck 01

 

step na nossa job, que executará um comando. Nesse comando, vamos criar um arquivo em /tmp, passando algumas variáveis.  – ${job.execid} – ID da job que será executada. – ${node.os-name} – Nome da versão do sistema operacional do node. – ${node.os-version} – Versão do sistema operacional do node. – ${node.os-arch} – Arquitetura do sistema operacional do node. Feito isso podemos salvar. Nessa job não vamos alterar nenhum outro parâmetro, então podemos clicar em “Save”. Em seguida, ele terá criado a job e podemos executá-la. Ao clicarmos em “Run”, ele retornará o status da execução na tela e podemos validar na máquina se o arquivo realmente foi criado.

# cat /tmp/output.log

Job 1 executada em um Linux 3.10.0-123.el7.x86_64 amd64 Conclusão O Rundeck é uma ferramenta muito boa e voltada tanto para sysadmins e desenvolvedores, que facilita o processo de deploy e sem dúvidas pode ser peça chave no processo DevOps.

Anterior Guia Completo: Como Utilizar o Ansible Galaxy para Otimizar seu Trabalho
Próxima Guia passo a passo para criar um cluster Hadoop com 3 nodes

About author

Edgar Filho
Edgar Filho 4 posts

Edgar da Silva Costa Filho é um sysadmin apaixonado por Linux, com foco na cultura DevOps, Formado em Redes de Computadores pela FIAP. Com 4 anos de experiência profissional em Tecnologia da Informação, atualmente atuando com desenvolvimento em python, infra ágil(Docker, Puppet, Ansible, Git, Jenkins e Rundeck), NoSQL (MongoDB) e também atuando como instrutor, ministrando cursos de Linux e suas mais diversas tecnologias, capacitando equipes de TI em sistemas Linux e soluções Open Source.

View all posts by this author →

Você pode gostar também

DevOps

4Linux lança novos cursos DEVOPS: Integração e Entrega Contínua e Controle de Versões com Git

A 4linux lança esta semana dois novos cursos para atender a crescente procura por profissionais que conheça as ferramentas do mundo DEVOPS. O curso Integração e Entrega Continua com Git,

DevOps

Gerenciamento eficiente de infraestrutura Docker com Portainer.io

O gerenciamento de uma infraestrutura com docker se dá quase que exclusivamente via terminal, mas quando surge a necessidade de apresentar a infraestrutura para a equipe, ou para toda a

DevOps

Guia prático: Como configurar e usar o Minio Server em sua infraestrutura

Minio é um storage de objetos, de alta performance e distribuído. A grande vantagem de usá-lo, reside em sua total compatibilidade com o Amazon S3. Neste artigo explico como subir