Rundeck como Continuous Delivery

12 Flares Twitter 0 Facebook 0 Google+ 0 LinkedIn 12 12 Flares ×

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.

Para execução de comandos, o Rundeck separa em “Jobs”, uma job pode ser um comando, um script, uma URL(com um script) ou até mesmo chamar 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, o Rundeck permite que seja especificada 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 no Rundeck é necessário alterar o arquivo resources.xml dentro do diretório do seu projeto. (/var/rundeck/projects/${NOMEDOPROJETO}/etc/resources.xml)

Outro fator interessante do Rundeck é que ele permite o envio de notificações por e-mail ou via 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.

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.

Instalar o pacote com o repositório.

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

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: O Rundeck funciona com IP, porém é sempre recomendado o uso de DNS.

 

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

Nesse momento já podemos acessar via Web Broswer.

http://rundeck.fordevops.com:4440

O usuário padrão é “admin” e a senha “admin”.

Na tela inicial, o rundeck solicita a criação de um projeto, vamos criar o nosso !

Como exemplo vou criar um projeto “Dexter”.

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.

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

Vamos clicar em “Create a new Job”

OBS: O campo grupo é utilizado para separar as jobs e para 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.

Nesse comando, vamos criar um arquivo em /tmp, passando algumas váriaveis.

– ${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 executa-lá.

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.

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. Para maiores informações deixarei a doc oficial e alguns links úteis sobre o rundeck.

Docs:

Docs Rundeck

Integração Jenkins + Rundeck:

Plugin do Jenkins para integração

 

 

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.

edgarsilva948

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.