6 de mar. de 2021

17 de fev. de 2021

Set different version of JDK in JBoss EAP 7 / 6 domain mode


Red Hat JBoss Enterprise Application Platform (EAP)

  • 7.x
  • 6.x


  • Is it possible to set different versions of JDK to different server-groups/server-instances or profiles. For example, one profile needs to use JDK 1.7 and another one JDK 1.6 ?
  • Running two different JDK for servers in parallel on same host slave.
  • Does EAP6 support use of JVM option in host.xml something like
  • Configure a new server group with a different JVM than other server groups


  • This feature is fully tested and supported on EAP 6.2. The code is present in EAP 6.1.1 and is very likely to work there, but has not gone through full QA testing so it isn't officially supported.

  • Just put the property java-home at the jvm line in each server-group level at the domain.xml file (as shown below) or in each server level in the host.xml file:

        <server-group name="main-server-group" profile="full">
            <jvm name="default" java-home="/path/jdk">
                <heap size="128m" max-size="1024m"/>
            <socket-binding-group ref="full-sockets"/>

Monitoring Jenkins with Prometheus and Grafana

Jenkins monitoring

Monitoring Jenkins With prometheus

Access this post on my hack.md https://hackmd.io/@isweluiz/SkOZI65-_


Host Tools Plataform Jenkins Docker Prometheus Docker Grafana Docker

Configuring Jenkins

Jenkins: https://hub.docker.com/_/jenkins

The command bellow store the jenkins data in /your/home on the host. Ensure that /your/home is accessible by the jenkins user in container (jenkins user - uid 1000) or use -u some_other_user parameter with docker run.

You can also use a volume container:

docker run -d -u root --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home jenkins/jenkins
[root@otrs-ansible is_otrs_az]# docker run -d -u root --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home jenkins/jenkins
[root@otrs-ansible is_otrs_az]# docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   2 seconds ago       Up 2 seconds         >8080/tcp,>50000/tcp   jenkins
08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago          Restarting (0) 3 minutes ago                                                      ocsinventory-server
eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago          Up 10 minutes        >3306/tcp, 33060/tcp                  ocsinventory-db

Access you jenkins on your IP and port 8080

Unlok your jenkins, get you password

[root@otrs-ansible is_otrs_az]# cat  /var/jenkins/secrets/initialAdminPassword 

After put your password, click on install suggested plugins

Now, create a admin user:

Now, you are logged on your jenkins lab. Let's create our frist project, click on create a job.

We will execute a shell command for test our job

echo "This is test, for monitoring jenkins jobs"

Like this:

Save and execute our frist build:

Configure Prometheus

Prometheus: https://hub.docker.com/r/prom/prometheus

Architecture overview


docker run -d -u root --name prometheus -p 9090:9090 -v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

docker rm 

docker run -d -u root --name prometheus -p 9090:9090 -v prometheus_config:/etc/prometheus/ prom/prometheus

[root@otrs-ansible is_otrs_az]# docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   3 seconds ago       Up 2 seconds         >9090/tcp                             prometheus
1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   24 minutes ago      Up 24 minutes        >8080/tcp,>50000/tcp   jenkins

Then, access you prometheus on browser:

Our configure prometheus file:

$vim /var/lib/docker/volumes/prometheus_config/_data/prometheus.yml

Let's configure our jenkins for send metrics for prometheus:

On context targets we can see the targets that prometheus is monitoring:

Now, install the prometheus plugin: https://plugins.jenkins.io/prometheus/

After that, go to configure Jenkins: find for prometheus,

Then access you jenkins URL, you will see the metrics;

Create a new JOB monitoring on you prometheus file:

 32   - job_name: 'jenkins'
 34     metrics_path: /promehteus
 36     static_configs:
 37     - targets: ['']

After that, restart the prometheus container

 [root@otrs-ansible is_otrs_az]# docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS                         PORTS                                              NAMES
515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   23 minutes ago      Up 23 minutes        >9090/tcp                             prometheus
1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   48 minutes ago      Up 48 minutes        >8080/tcp,>50000/tcp   jenkins
08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago          Restarting (0) 3 minutes ago                                                      ocsinventory-server
eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago          Up 58 minutes        >3306/tcp, 33060/tcp                  ocsinventory-db
[root@otrs-ansible is_otrs_az]# docker restart 515fced9aa52        

Accessing our targets on prometheus again:

Run Grafana

Grafana: https://grafana.com/grafana/download Documentation: https://grafana.com/docs/grafana/latest/installation/docker/

docker run -d --name=grafana -p 3000:3000 -v grafana_config:/etc/grafana -v grafana_data:/var/lib/grafana grafana/grafana
[root@otrs-ansible is_otrs_az]# docker run -d --name=grafana -p 3000:3000 -v grafana_config:/etc/grafana -v grafana_data:/var/lib/grafana grafana/grafana
Unable to find image 'grafana/grafana:latest' locally
Trying to pull repository docker.io/grafana/grafana ... 
latest: Pulling from docker.io/grafana/grafana
801bfaa63ef2: Pull complete 
bfa9705a3cb2: Pull complete 
12c11a7e9d94: Pull complete 
377c2dc21544: Pull complete 
4a20d1f981fb: Pull complete 
4f4fb700ef54: Pull complete 
5d9743dc37f2: Pull complete 
ec2035efdb39: Pull complete 
Digest: sha256:29e4e68a557fac7ead72496acea16a9b89626f3311ba7c4a9e39f7fb99f8f68f
Status: Downloaded newer image for docker.io/grafana/grafana:latest
[root@otrs-ansible is_otrs_az]# docker ps
CONTAINER ID        IMAGE                                          COMMAND                  CREATED              STATUS                          PORTS                                              NAMES
adc8418dcfcb        grafana/grafana                                "/run.sh"                About a minute ago   Up About a minute     >3000/tcp                             grafana
515fced9aa52        prom/prometheus                                "/bin/prometheus -..."   56 minutes ago       Up 24 minutes         >9090/tcp                             prometheus
1e61d87865dc        jenkins/jenkins                                "/sbin/tini -- /us..."   About an hour ago    Up About an hour      >8080/tcp,>50000/tcp   jenkins
08f6e8bd0217        ocsinventory/ocsinventory-docker-image:2.8.1   "/usr/bin/docker-e..."   9 days ago           Restarting (0) 36 minutes ago                                                      ocsinventory-server
eae9e938a74e        mysql:5.7                                      "docker-entrypoint..."   9 days ago           Up About an hour      >3306/tcp, 33060/tcp                  ocsinventory-db

Now we have 3 conteiners;

Access you grafana on 3000 port, user: admin, password: admin

Add a new Data Source for prometheus

Save and then, create your own dashboards or download one ready in https://grafana.com/grafana/dashboards

9 de dez. de 2020

Instalando Wildfly 21.0.1 com Ansible

Os Playboks são usados na maioria das vezes para construir interações complexas que requerem, por exemplo, provisionamento de software em máquinas remotas. Neste exemplo, veremos como combinar nosso Playbook que irá instalar o JDK o unzip e o Wildfly, o servidor de aplicativos por sua vez será configurado no modo standalone, e, ao fim da execução do playbook o mesmo estará pronto para utilização em ambiente de teste.

20 de nov. de 2020

Resolvendo o erro: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

sudo yum install libmpc-devel mpfr-devel gmp-devel

cd ~/Downloads
curl ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.bz2 -O
tar xvfj gcc-4.9.2.tar.bz2

cd gcc-4.9.2
./configure --disable-multilib --enable-languages=c,c++
make -j 4
make install

Oficial GCC GNU https://ftp.gnu.org/gnu/gcc/gcc-4.9.4/

19 de nov. de 2020

Resolvendo permissionamento para execução de JOB no Jenkins: sorry, you must have a tty to run sudo

+ sudo npm install

sudo: sorry, you must have a tty to run sudo

Build step 'Execute shell' marked build as failure

Set build name.





[WS-CLEANUP] Deleting project workspace...[WS-CLEANUP] done

Finished: FAILURE

A saída do Jenkins disse que deseja que um determinado usuário não exija um tty. Esse é o comportamento padrão. No entanto, você pode definir explicitamente assim:

Como usuário root ou executando sudo com seu usuário, acesse o arquivo /etc/sudoers com o comando visudo e inclua a linha abaixo; 

#### Jenkins
Defaults:jenkins !requiretty

22 de out. de 2020

Permitir regras de iptables para agentes Zabbix


     Como habilitar a porta Zabbix em diferentes firewalls Linux. Por exemplo, nosso servidor Zabbix rodando em IP:, precisamos habilitar Zabbix-agent.d porta TCP/10050 nos cliente

iptables -I OUTPUT 1 -p tcp -s --dport 10051 -j ACCEPT

iptables -I INPUT 1 -p tcp -s --dport 10050 -j ACCEPT

AD-HOC com Ansible

$$ ansible -i inventory/hosts nodes -a "iptables -I OUTPUT 1 -p tcp
-s 10051 -j ACCEPT"

$$ ansible -i inventory/hosts nodes -a "iptables -I INPUT 1 -p tcp
-s --dport 10050 -j ACCEPT"

Teste com NMAP 

10050/tcp open unknown

RedHat / Centos

Caso esteja com o firewall habilitado

firewall-cmd --new-zone=zabbix --permanent
firewall-cmd --permanent --zone=zabbix --add-source=
firewall-cmd --permanent --zone=zabbix --add-port=10050/tcp
firewall-cmd --reload

14 de out. de 2020

OTRS6 Community - Kernel::System::Email::SMTP Could not send message to server: 550, Start mail input; end with .


12 Kernel::System::Email::SMTP Could not send message to server: 550,
Start mail input; end with <CRLF>.<CRLF> ! 14/10/2020 18:01:03
13 Kernel::System::Email Error sending message using backend
'Kernel::System::Email::SMTPTLS'. 14/10/2020 18:01:03
14 Kernel::System::MailQueue Message could not be sent! Error message:
Could not send message to server: 550, Start mail input; end with <CRLF>.
<CRLF> ! 14/10/2020 18:01:03
15 Kernel::System::MailQueue Permanent sending problem or we reached
the sending attempt limit. Message will be removed

Links úteis para resolução do problema: 

Para atualizar os módulos execute 

$  perl -MCPAN -e shell

Verifique os módulos que estão com algum BUG ou possuem versões superiores

$ /opt/otrs/bin/otrs.CheckModules.pl


o Net::SMTP........................ok (v2.31)
Please consider updating to version 3.11 or higher: This version fixes email sending (bug#14357).

Comando para atualização: 

cpan[1]> upgrade Net::SMTP

Módulos do OTRS atualizados

# /opt/otrs/bin/otrs.CheckModules.pl
o Apache::DBI......................ok (v1.12)
o Apache2::Reload..................ok (v0.13)
o Archive::Tar.....................ok (v1.92)
o Archive::Zip.....................ok (v1.30)
o Crypt::Eksblowfish::Bcrypt.......ok (v0.009)
o Crypt::SSLeay....................ok (v0.64)
o Date::Format.....................ok (v2.24)
o DateTime.........................ok (v1.04)
o DBI..............................ok (v1.627)
o DBD::mysql.......................ok (v4.023)
o DBD::ODBC........................ok (v1.50)
o DBD::Oracle......................Not installed! (optional - Required to connect to a Oracle database.)
o DBD::Pg..........................ok (v2.19.3)
o Digest::SHA......................ok (v5.85)
o Encode::HanExtra.................ok (v0.23)
o IO::Socket::SSL..................ok (v2.068)
o JSON::XS.........................ok (v3.01)
o List::Util::XS...................ok (v1.27)
o LWP::UserAgent...................ok (v6.26)
o Mail::IMAPClient.................ok (v3.37)
o IO::Socket::SSL................ok (v2.068)
o Authen::SASL...................ok (v2.15)
o Authen::NTLM...................ok (v1.09)
o ModPerl::Util....................ok (v2.000011)
o Net::DNS.........................ok (v0.72)
o Net::LDAP........................ok (v0.56)
o Net::SMTP........................ok (v3.11)
o Template.........................ok (v2.24)
o Template::Stash::XS..............ok (undef)
o Text::CSV_XS.....................ok (v1.00)
o Time::HiRes......................ok (v1.9725)
o XML::LibXML......................ok (v2.0018)
o XML::LibXSLT.....................ok (v1.80)
o XML::Parser......................ok (v2.41)
o YAML::XS.........................ok (v0.54)

8 de out. de 2020

Ansible: Playbook para desinstalar apache e firewall

Estrutura dos arquivos: 

[root@ansible-master Projeto2_managing_includes]# tree
├── ansible.cfg
├── desinstall-playbook.yml
├── inventory
├── playbook.yml
├── tasks
│   └── enviroment.yaml
└── vars
└── variables.yml

2 directories, 6 files

Arquivo variables.yml

firewall_pkg: firewalld
firewall_svc: firewalld
web_pkg: httpd
web_svc: http

Playbook para desinstalar serviços: 

- name: Desinstall playbook web
hosts: web-hosts
- vars/variables.yml
- name: Remove index file
path: /var/www/html/index.html
state: absent

- name: Daemon reload
name: "{{ item }}"
state: stopped
daemon_reload: yes
- "{{ firewall_pkg }}"
- "{{ web_pkg }}"
register: var
- name: register var
debug: msg="{{ var }}"
- name: Remove web service and firewalld
- "{{ firewall_pkg }}"
- "{{ web_pkg }}"
state: absent

Execução e saída: 

[root@ansible-master Projeto2_managing_includes]# ansible-playbook desinstall-playbook.yml

PLAY [Desinstall playbook web] *************************************************************************

TASK [Gathering Facts] *********************************************************************************
ok: []

TASK [Remove index file] *******************************************************************************
changed: []

TASK [Daemon reload] ***********************************************************************************
changed: [] => (item=firewalld)
changed: [] => (item=httpd)

TASK [register var] ************************************************************************************
ok: [] => {
"msg": {
"changed": true,
"msg": "All items completed",
"results": [

TASK [Remove web service and firewalld] ****************************************************************
changed: []

PLAY RECAP ********************************************************************************************* : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

3 de out. de 2020

Fix rpmdb: Thread died in Berkeley DB library [CentOS 8]

Fix rpmdb: Thread died in Berkeley DB library [CentOS 8]


Se você vir erros de rpmdb durante o gerenciamento de pacotes (durante as operações yum / rpm), como este:

[root@a-node ~]# yum clean all
Failed to set locale, defaulting to C.UTF-8
error: rpmdb: BDB0113 Thread/process 2456/140690658715456 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 -  (-30973)
error: cannot open Packages database in /var/lib/rpm
Error: Error: rpmdb open failed
[root@a-node ~]# yum make cache
Failed to set locale, defaulting to C.UTF-8
error: rpmdb: BDB0113 Thread/process 2456/140690658715456 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 -  (-30973)
error: cannot open Packages database in /var/lib/rpm

Isso significa que o banco de dados RPM está corrompido.


Siga estas etapas para fazer backup e reconstruir o banco de dados rpmdb:

[root@a-node ~]# mkdir /var/lib/rpm/backup
[root@a-node ~]# cp -a /var/lib/rpm/__db* /var/lib/rpm/backup/
[root@a-node ~]# rm -f /var/lib/rpm/__db.[0-9][0-9]*
[root@a-node ~]# rpm --quiet -qa
[root@a-node ~]# rpm --rebuilddb
error: could not delete old database at /var/lib/rpmold.2590
[root@a-node ~]# rpm --rebuilddb
[root@a-node ~]# yum clean all
Failed to set locale, defaulting to C.UTF-8
26 files removed
[root@a-node ~]# dnf install mariadb
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream                                                    2.1 MB/s | 5.8 MB     00:02    
CentOS-8 - Base                                                         541 kB/s | 2.2 MB     00:04    
CentOS-8 - Extras                                                        11 kB/s | 8.1 kB     00:00    
Last metadata expiration check: 0:00:01 ago on Sat Oct  3 15:57:20 2020.
Package mariadb-3:10.3.17-1.module_el8.1.0+257+48736ea6.x86_64 is already installed.
Dependencies resolved.
Nothing to do.

30 de set. de 2020

Remote: HTTP Basic: Access denied [Windows]


Para corrigir o erro de Access denied ao se conectar no GITLAB utilizando o windows é simples, basta seguir as etapas mencionadas logo abaixo. 


remote: HTTP Basic: Access denied

fatal: Authentication failed for 'https://xpo.gov.br/repositorio/XPTO/ansible.git/'

Abra o Menu Iniciar do Windows e procure por Gerenciador de Credenciais. Ao abrir a janela do Gerenciador, clique em Credenciais do Windows.

Abaixo na lista de credenciais, irá existir as várias credenciais salvas pelo Windows, dentre elas uma lista de credenciais genéricas, que é onde as credenciais do GitLab são salvas. Basta identificar a linha referente ao seu repositório e excluí-la, ou atualizar a senha ali mesmo.

28 de set. de 2020

[DevOps #03] - Prometheus

Olá pessoal, espero que estejam bem! Este é o segundo post da série semana DevOps, hoje iremos conhecer o Prometheus e Grafana, com um breve resumo e logo em seguida partiremos para a prática(hands-on)...

Acesse esse post no meu GitHub




  • O que é Prometheus?
    • Recursos
    • Componentes
    • Arquitetura
    • Em que cenário devo utilizar?
    • Em que cenários não devo utilizar?
  • Instalando e configurando o Prometheus
    • Configurando o Prometheus
    • Configurando um exporter
  • Modelo de dados do Prometheus
    • O que são dados de série temporal?
  • Tipos de métricas


  • O que é Grafana?
  • Instalação e configuração da Grafana
  • Construindo um dashboard no Grafana com dados do Prometheus

Prometheus e grafana

Oque é Prometheus?

O Prometheus é um kit de ferramentas de monitoramento e alerta de sistemas de código aberto originalmente criado no SoundCloud. Desde o seu início em 2012, muitas empresas e organizações adotaram o Prometheus, e o projeto tem uma comunidade de desenvolvedores e usuários muito ativa. Agora é um projeto autônomo de código aberto e mantido independentemente de qualquer empresa. Para enfatizar isso, e para esclarecer a estrutura de governança do projeto, a Prometheus se juntou à Cloud Native Computing Foundation em 2016 como o segundo projeto hospedado, depois do Kubernetes.

Para visões gerais mais elaboradas do Prometheus, consulte os recursos vinculados na seção de mídia.


As principais características do Prometheus são:

  • um modelo de dados multidimensional com dados de série temporal identificados por nome de métrica e pares chave/valor;
  • PromQL, uma linguagem de consulta flexível para aproveitar essa dimensionalidade;
  • nenhuma dependência de armazenamento distribuído;
  • nós de servidor único são autônomos;
  • a coleta de série temporal acontece por meio de um modelo pull sobre HTTP;
  • pushing time series é suportado por meio de um gateway intermediário;
  • alvos são descobertos por meio de descoberta de serviço ou configuração estática;
  • vários modos de suporte para gráficos e painéis.


O ecossistema Prometheus consiste em vários componentes, muitos dos quais são opcionais:

  • o servidor principal do Prometheus, que coleta e armazena dados de séries temporais
  • bibliotecas cliente para instrumentar o código do aplicativo
  • um portal push para apoiar empregos de curta duração
  • exportadores de fins especiais para serviços como HAProxy, StatsD, Graphite, etc.
  • um alertmanager para lidar com alertas
  • várias ferramentas de suporte

A maioria dos componentes do Prometheus são escritos em Go, tornando-os fáceis de construir e implantar como binários estáticos.


Este diagrama ilustra a arquitetura do Prometheus e alguns de seus componentes do ecossistema:

Arquitetura Prometheus

O Prometheus extrai métricas, diretamente ou por meio de um gateway intermediário para trabalhos de curta duração. Ele armazena todas as amostras coletadas localmente e executa regras sobre esses dados para agregar e registrar novas séries temporais de dados existentes ou gerar alertas. Grafana ou outros consumidores de API podem ser usados ​​para visualizar os dados coletados.

Em que cenário devo utilizar?

O Prometheus funciona bem para registrar qualquer série temporal puramente numérica. Ele se adapta tanto ao monitoramento centrado na máquina quanto ao monitoramento de arquiteturas orientadas a serviços altamente dinâmicas. Em um mundo de microsserviços, seu suporte para coleta e consulta de dados multidimensionais é um ponto forte particular.

O Prometheus foi projetado para ter confiabilidade,para ser o sistema que você acessa durante uma interrupção para permitir o diagnóstico rápido de problemas. Cada servidor Prometheus é autônomo, não dependendo do armazenamento de rede ou de outros serviços remotos. Você pode confiar nele quando outras partes de sua infraestrutura estão quebradas e não precisa configurar uma infraestrutura extensa para usá-la

Em que cenários não devo utilizar?

A Prometheus valoriza a confiabilidade. Você sempre pode ver quais estatísticas estão disponíveis sobre o seu sistema, mesmo em condições de falha. Se você precisa de 100% de precisão, como para faturamento por solicitação, o Prometheus não é uma boa escolha, pois os dados coletados provavelmente não serão detalhados e completos o suficiente. Nesse caso, seria melhor usar algum outro sistema para coletar e analisar os dados para faturamento e o Prometheus para o restante do seu monitoramento.

16 de set. de 2020

[DevOps #02] - Rundeck


Olá pessoal, espero que estejam bem! Este é o segundo post da série semana DevOps, hoje iremos conhecer o rundeck, com um breve resumo e logo em seguida partiremos para a prática(hands-on)...

Acesse esse post no meu GitHub



  • O que é o Rundeck?
  • O Rundeck é gratuito?
    • Rundeck Enterpise (fka Rundeck Pro)
  • Recursos destaques do Rundeck
  • Como o Rundeck difere do Jenkins?
  • O Jenkins pode integrar com o Rundeck?
  • Instalação do rundeck
  • Criação de um projeto
  • Adicionando um node
  • Executando scripts
  • Registro de logs

O que é o Rundeck?

Rundeck é uma ferramenta de código aberto que ajuda a definir, implantar e gerenciar automação. Ele fornece console da web, ferramentas CLI e uma API da web. Ele é escrito em Java e permite que você execute tarefas em um conjunto de nós. A política de controle de acesso baseado em função oferece mais flexibilidade para gerenciar diferentes permissões de acesso do usuário. As automações de processos são definidas como jobs. Você pode definir cada etapa do fluxo de trabalho, que pode ser um trabalho em si ou qualquer tarefa. O usuário pode fornecer opções de entrada na definição do trabalho. Essas opções podem ser usadas no fluxo de trabalho do trabalho como uma variável. Os valores das opções podem ser padrão, de múltipla escolha ou protegidos. O Rundeck é mais como uma ferramenta de orquestração que pode ser usada para gerenciar servidores ou ambientes em nuvem. Ele oferece suporte e se integra bem às ferramentas e práticas modernas de DevOps.

Rundeck operation

O Rundeck foi projetado para aceitar a realidade de que infraestrutura e ferramentas heterogêneas são um fato da vida em qualquer organização de tamanho considerável. É por isso que a Rundeck não obriga a substituir os scripts, comandos ou ferramentas que você usa hoje. Você usa o Rundeck para executar fluxos de trabalho em sua automação existente (por exemplo, Ansible, Puppet, Chef, Jenkins, Docker, Kubernetes, ferramentas legadas e todos os seus scripts / APIs personalizados) ou automatizar rapidamente procedimentos manuais anteriores. Com o Rundeck, você pode reutilizar as habilidades de automação que já possui e adicionar novas conforme necessário.

O Rundeck é gratuito?

Rundeck Open Source é um software de código aberto gratuito licenciado sob a Apache Software License v2.0 , e você pode participar do projeto no GitHub. Para aqueles que escrevem e executam trabalhos Rundeck em pequena escala (por exemplo, uso limitado ou dentro de uma equipe), o Rundeck de código aberto oferece os recursos de que você precisa, gratuitamente.

Rundeck Enterpise (fka Rundeck Pro)

O foco do Rundeck Enterprise, é tornar o Rundeck pronto para produção em escala empresarial. O Rundeck Enterprise, desenvolvido com base no Rundeck de código aberto, é o pacote de software e serviços para executar o Rundeck como um serviço de nível empresarial.

Construído e testado para a empresa, o Rundeck Enterprise inclui recursos exclusivos (incluindo clustering / HA, fluxo de trabalho avançado, gerenciamento de ACL aprimorado, painéis / visualização aprimorados) e plug-ins exclusivos. Suporte profissional e serviços de integração também fazem parte do pacote de assinatura Rundeck Enterprise.

Recursos destaques do Rundeck

  • Execução de comando distribuído
  • Fluxo de trabalho (incluindo passagem de opções, condicionais, tratamento de erros e várias estratégias de fluxo de trabalho)
  • Sistema de execução plugável (SSH e WinRM por padrão; Powershell disponível)
  • Modelo de recursos plugável (obtenha detalhes de sua infraestrutura de sistemas externos)
  • On-demand (Web GUI, API ou CLI) ou execução de trabalho agendada
  • Armazenamento de chaves seguro para senhas e chaves
  • Política de controle de acesso baseado em função com suporte para LDAP / ActiveDirectory / SSO
  • Ferramentas de edição / gerenciamento de políticas de controle de acesso
  • Histórico e registros de auditoria
  • Use qualquer linguagem de script

Como o Rundeck difere do Jenkins?

Em palavras simples, Jenkins é empregado para desenvolvimento e Rundeck, para operações. Ambas as ferramentas compartilham certos recursos comuns, pois a interface de trabalho fornecida é para autoatendimento.


O Jenkins pode se integrar ao Rundeck?

O Jenkins pode lidar com as compilações para o ciclo de integração contínua de desenvolvimento e o acionamento do Rundeck é necessário para controlar a orquestração distribuída na implantação. Plugins estão disponíveis para a integração do Jenkins com o Rundeck. Quando definimos um trabalho no Jenkins, podemos especificar a tarefa para acionar um trabalho após verificar o status de execução de determinado trabalho.

Da mesma forma, se os privilégios de administrador do Jenkins forem fornecidos ao Rundeck, ele poderá acessar os artefatos de trabalho. Assim, o Rundeck pode pegar os artefatos do trabalho do Jenkins e pode acionar a implantação. O mecanismo de reversão com Rundeck funciona bem quando uma implantação não funciona conforme o esperado. Podemos escolher quaisquer artefatos salvos do Jenkins como artefatos de implantação.

Instalação do rundeck

Para este laborátorio irei utilizar o Centos 7.8, na GCP. Para instalações personalizadas e/ou instalações em derivações do debian, docker ou execução via jar consulte a documentação oficial clicando aqui.

Requisitos de sistema

Sistemas operacionais suportados:

  • Red Hat Enterprise Linux
  • Oracle Linux
  • CentOS
  • Ubuntu
  • Windows Server

Recursos mínimos:

  • JAVA 8 or 11 Installed.
  • 2 CPUs
  • 2 CPUs per instance
  • 4 GB RA
  • 20 GB hard disk

15 de set. de 2020

[DevOps #01] - Jenkins

Olá pessoal, espero que estejam bem! Este é o primeiro post da série semana DevOps, hoje iremos conhecer o jenkins, com um breve resumo e logo em seguida partiremos para a prática(hands-on)...

Acesse esse post no meu GitHub


  • Tópicos

    • Oque é o Jenkins?
    • Hudson e Jenkins
    • Automação Jenkins
    • Como funciona o Jenkins
    • Oque é uma Pipelines Jenkins
      • Por que Pipeline?
      • Conceitos de pipeline
    • Instalação do Jenkins
    • Jenkins para CI / CD

Oque é o Jenkins?

Jenkins oferece uma maneira simples de configurar uma integração contínua e ambiente de entrega contínua para quase qualquer combinação de linguagens e repositórios de código-fonte

Jenkins oferece uma maneira simples de configurar um ambiente de integração contínua ou entrega contínua ( CI / CD ) para quase qualquer combinação de linguagens e repositórios de código-fonte usando pipelines, além de automatizar outras tarefas de desenvolvimento de rotina. Embora o Jenkins não elimine a necessidade de criar scripts para etapas individuais, ele oferece uma maneira mais rápida e robusta de integrar toda a sua cadeia de ferramentas de construção, teste e implantação do que você pode construir facilmente.

Integração contínua

"Don't break the night building!" é uma regra fundamental nas lojas de desenvolvimento de software que publicam uma versão diária do produto recém-construída para seus testadores. Antes do Jenkins, o melhor que um desenvolvedor poderia fazer para evitar quebrar a compilação noturna era compilar e testar cuidadosamente e com sucesso em uma máquina local antes de confirmar o código. Mas isso significava testar as mudanças de uma pessoa isoladamente, sem os compromissos diários de todos os outros. Não havia nenhuma garantia firme de que a construção noturna sobreviveria ao commit.

Hudson e Jenkins

Em 2004, Kohsuke Kawaguchi foi desenvolvedor Java na Sun. Kawaguchi se cansou de quebrar compilações em seu trabalho de desenvolvimento e queria encontrar uma maneira de saber, antes de enviar o código para o repositório, se o código iria funcionar. Então Kawaguchi construiu um servidor de automação em e para Java para tornar isso possível, chamado Hudson. Hudson se tornou popular na Sun e se espalhou para outras empresas como código aberto.

Em 2011, uma disputa entre a Oracle (que havia adquirido a Sun) e a comunidade independente de código aberto Hudson levou a uma bifurcação com a mudança de nome, Jenkins . Em 2014, Kawaguchi se tornou CTO da CloudBees, que oferece produtos de entrega contínua baseados em Jenkins.

Ambos os garfos continuaram existindo, embora Jenkins fosse muito mais ativo. Hoje, o projeto Jenkins ainda está ativo. O site da Hudson foi fechado em 31 de janeiro de 2020.

Em março de 2019, a Linux Foundation, juntamente com a CloudBees, o Google e várias outras empresas, lançou uma nova fundação de software de código aberto chamada Continuous Delivery Foundation ( CDF ). Os colaboradores do Jenkins decidiram que seu projeto deveria se juntar a esta nova fundação. Kawaguchi escreveu na época que nada de significativo mudaria para os usuários.

Em janeiro de 2020, Kawaguchi anunciou que estava mudando para sua nova startup, a Launchable . Ele também disse que estaria oficialmente se afastando de Jenkins, embora permanecesse no Comitê de Supervisão Técnica da Fundação de Entrega Contínua, e mudaria sua função na CloudBees para um consultor.

Vídeo relacionado: Como fornecer código mais rápido com CI / CD

Como fornecer código mais rápido com CI / CD

Automação Jenkins

Hoje, Jenkins é o servidor de automação de código aberto líder com cerca de 1.600 plug-ins para oferecer suporte à automação de todos os tipos de tarefas de desenvolvimento. O problema que Kawaguchi estava tentando resolver originalmente, integração contínua e entrega contínua de código Java (ou seja, construção de projetos, execução de testes, análise de código estático e implantação) é apenas um dos muitos processos que as pessoas automatizam com o Jenkins. Esses 1.600 plug-ins abrangem cinco áreas: plataformas, UI, administração, gerenciamento de código-fonte e, mais frequentemente, gerenciamento de construção.

Como funciona o Jenkins

Jenkins é distribuído como um arquivo WAR e como pacotes de instalação para os principais sistemas operacionais, como um pacote Homebrew, como uma imagem Docker e como código-fonte . O código-fonte é principalmente Java, com alguns arquivos Groovy, Ruby e Antlr.

Você pode executar o WAR do Jenkins autônomo ou como um servlet em um servidor de aplicativos Java, como o Tomcat. Em ambos os casos, ele produz uma interface de usuário da web e aceita chamadas para sua API REST.

Quando você executa o Jenkins pela primeira vez, ele cria um usuário administrativo com uma senha longa e aleatória, que você pode colar em sua página inicial da Web para desbloquear a instalação.

Oque é uma Pipelines Jenkins?

Jenkins Pipeline (ou simplesmente "Pipeline" com "P" maiúsculo) é um conjunto de plug-ins que suporta a implementação e integração de pipelines de entrega contínua no Jenkins.

13 de set. de 2020

LDAP and JBoss EAP - securing the management console

[root@master openldap]# cat console.ldif 
dn: uid=isweluiz,ou=people,dc=redhat,dc=com
changetype: add
objectclass: top
objectclass: inetorgperson
uid: isweluiz
cn: Luiz 
sn: Eduardo
userPassword: isweluiz

Editing the file host.xml or host-master.xml case you're running JBoss as a domain mode.


               . . .
               <security-realm name="LDAPRealm">
                    <ldap connection="ldapconnection" base-dn="ou=People,dc=keycloak,dc=org">
                       <username-filter attribute="uid"/>
       <ldap name="ldapconnection" url="ldap://localhost:10389" search-dn="uid=admin,ou=system" search-credential="secret"/>

Last change, is setting the LDAPRealm on the management-interfaces:
            <http-interface security-realm="LDAPRealm" http-upgrade-enabled="true">
                <socket-binding http="management-http"/>
 Now start JBoss check the you are able to log in the management console (http://localhost:9990 by default) with any of the two users you have created.

18 de ago. de 2020

[Errno 14] yum fails with HTTP/HTTPS Error 404

Typical Cause

This issue generally occurs if client system is able to communicate with given server but could not find or access the requested package on the server.


This issue can occur due to corruption of local client cache, try to clear cache on client system:

rm -fr /var/cache/yum/*
yum clean all 

If it does not help, see the section below for other known issues


15 de ago. de 2020

6 de ago. de 2020

Erro: /bin/bash^M: bad interpreter: No such file or directory (Linux)

Este problema ocorre devido as diferenças no registro da quebra de linha feito pelo Windows e pelo Linux. Para resolver, vamos utilizar uma expressão regular e o comando SED:

Explicando rapidamente o que este comando faz:

  • sed: nome do programa que estamos utilizando (sed = Stream Editor);
  • -e <expressão regular>: Adiciona um comando a ser executado no script. Pode ser utilizado varias vezes, para adicionar multiplos comandos;
  • -i: Salva as alterações do arquivo. Gera um backup automatico se você fornecer uma extensão;
  • ‘s/\r$//’: Remove os caracteres de Carriage Return (\r) que estão no arquivo, deixando apenas os Line Feed (\n). O que vai resolver o problema.