Development e Operations, é o conceito/processo de desenvolvimento de software que reúne metodologia, prática, ambientes, pessoas e ferramentas que integram tais áreas, de forma mais unificada, relacionada e padronizada, enfatizando melhor comunicação entre os profissionais de tais áreas, favorecendo produtividade e valor ao cliente. Profissionais DevOps são aptos para exercer funções tanto em desenvolvimento de software, quanto na administração dos mesmos. Surgimento a partir do Manifesto Ágil, em 2001, com a adesão de tecnologias e motodologias a fim de facilitar o desenvolvimento de sistemas e, com isso, aumentar a produtividade. DevOps é um processo Agile, adotando os conceitos de metodologias ágeis, além de metodologias como Scrum e Spotify Squads, onde há processo cíclico e entregas fracionadas do produto final, havendo, consequentemente, melhoria contínua. Neste ponto, tem-se os principais conceitos:
Entre 2001 e 2002, procuraram-se novos mecanismos para agilizar os processos na entrega do software, envolvendo a Agile Conference. O termo DevOps surgiu em 2009, originado a partir da Agile Conference de 2008, dando origem, futuramente, aos DevOpsDays - Criada e implantada na Bélgica. Entre os materiais que impulsionaram o conceito, tem-se o livro Phoenix Project e o site Reliability Engineering.
Development: A infraestrutura necessária para reunir o desenvolvimento, desde o compartilhamento de ativos até a escrita de código e algoritmos para aplicativos corporativos que podem aproveitar recursos avançados, como IA, containers e funções sem servidor. Além disso, testes, arquivamento, rastreamento de bugs e outras tarefas críticas são realizadas na fase de desenvolvimento, tudo na estrada para o lançamento. Ferramentas como Git e GitHub são usadas nessas etapas.
Operations: Com a aplicação implementada, o lado das operações assume o controle com foco em garantir que os desafios de negócios das plataformas em Cloud sejam atendidos. Problemas como segurança do usuário, gerenciamento de BD, escalabilidade para cargas de trabalho de produção e aplicação de patches são todos tratados nesta função. Ferramentas geralmente utilizadas: Terraform, Ansible, Puppet e Chef para gestão de infraestrutura e configurações.
Pipeline tem como objetivo automatizar o processo de entrega de infraestrutura ou software de forma rápida, garantindo qualidade, testes, estabilidade e escalabilidade. Desenvolvimento agile de software está diretamente ligado a uma pipeline de software. Uma pipeline de entrega de software normalmente constitui-se das etapas:
É um processo em ciclos, onde define-se o entregável que é trabalhado até sua conclusão. Após isso, inicia-se novo ciclo, definindo novamente o entregável e trabalhando até sua conclusão. Pipeline DevOps tem como base uma pipeline agile, diferenciando-se em alguns pontos. Trabalha-se com entregáveis, porém o processo é contínuo (Melhoria contínua). De forma geral, uma Pipeline CI/CD possui os elementos: Compilação, teste, lançamento, implantação, validação e conformidade. Tem-se 2 ciclos, Dev e Ops, compostos das etapas:
Para realizar a integração de todos os passos de uma pipeline DevOps, precisa-se seguir estruturas CI (Continuous Integration - Integração contínua) e CD (Continuous Delivery/Deployment - Entrega contínua). CI é responsável por ligar todas as partes do processo, ou gatilho que faz com que o processo ou ferramenta A conecte-se ao processo ou ferramenta B, trabalhando para garantir integração contínua entre cada elo do processo. CD é o processo de entrega do produto final. No Deployment, essa entrega final é totalmente automatizada, sem necessidade de intervenção humana. No Delivery, o produto é entregue a um usuário final, que decide se o produto será lançado, e em que momento. A escolha entre ambas dependerá do modelo de negócios utilizado. Juntas, as práticas de CI/CD geralmente são chamadas de Pipeline de CI/CD.
Desenvolvimento, Segurança e Operações, é uma abordagem à cultura, automação e design da plataforma que integra segurança como uma responsabilidade compartilhada em todo o ciclo de vida da TI. Diferente do DevOps, ou complementando-o, integra também a equipe de segurança da TI. Dessa forma, a segurança é responsabilidade compartilhada e integrada do início ao fim, reforçando, com segurança, as iniciativas DevOps. Também significa automatizar algumas barreiras de segurança, evitando o alto fluxo de trabalho DevOps nesse conceito. Características dessa cultura são manter os ciclos de desenvolvimento curtos e frequentes, integrar medidas de segurança com mínima interrupção das operações, acompanhar o ritmo das tecnologias inovadoras e, acima de tudo, estimular colaboração entre as equipes envolvidas. Entre alguns pontos da implantação de DevSecOps, tem-se:
Diferente do DevOps, Git Ops é a implementação da automação no Git Server, onde todo o desenvolvimento agile e levado do repositório local ao repositório remoto, através do Git. Webhook é uma forma de recebimento de informações ao longo de um evento. É utilizado como gatilho para disparo de funcionalidades, tarefas ou ações após um sistema A comunicar-se com o sistema B. Para trabalhar com Git Ops, desenvolve-se o código em repositório local, em Branch não principal (Não master). O código é enviado para o repositório remoto (Git Server), criando-se o Pull Request para, após Review, efetuar o Merge do código. Após tais passos, é ativado um Webhook para dar prosseguimento do processo de entrega.
ChatOps trabalha com os conceitos de GitOps, sendo a junção das tarefas de automação e colaboração. É delegar a responsabilidade de tarefas e ações para bot interno, que também faz parte da organização e está executando as conversas. É uma metodologia assim como DevOps (ChatOps = Chat + DevOps). O funcionamento se dá por meio de aplicação de chat (Slack, Rocket.Chat, Microsoft Teams), adiciona-se bots para executar as ações da infraestrutura, através de comandos enviados pelas equipes de profissionais DevOps.
Aplicação monolithic (monolítica) é construída em unidade unificada (front-end, back-end, tudo no mesmo projeto). Aplicação em microservices (microsserviços) é coleção de serviços menores implementados de forma independente (front-end um projeto, back-end outro projeto, infraestrutura outro projeto, BD outro projeto, etc).
Uma das características do DevOps é a utilização, geralmente, de ferramentas Open Source, que fornecem melhor personalização às equipes, evitando vendor lock-in (Aprisionamento tecnológico perante a ferramenta). Existem inúmeras ferramentas para automatização em DevOps, inclusive fora criada uma tabela periódica com as principais do mercado (Acesse). Entre as principais ferramentas para cada estágio, tem-se:
Para a criação da pipeline DevOps a seguir, será seguido o fluxo de trabalho abaixo. Será utilizado o Github Actions para o processo automatizado de Deploy, que atualizará, no repositório, os status do CI usando o arquivo 'pipeline.yml'. Após a integração concluir, o Github Actions efeturará o deploy da aplicação Heroku, deixando-a disponível publicamente. A aplicação que será feito deploy será uma aplicação web python flask de Hello World, que deverá ser feito 'fork' da mesma (Acesse).
Passo a passo:
#Conteúdo do arquivo pipeline.yml
name: CI - Lint / Tests / Deploy
on: [push]
jobs:
lint:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
tests:
needs: lint
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Integrations Test
run: |
python test.py
deploy:
needs: tests
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: deploy into heroku
uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: ${{secrets.HEROKU_APP_NAME}}
heroku_email: ${{secrets.HEROKU_USER_EMAIL}}
Sintaxe do arquivo:
name: Nome do processo de workflow CI
on: Condicional (Toda vez que for realizado 'Push', esse CI será ativado)
job lint: Verifica sintaxe do arquivo, se escrito de forma correta (Informado plataforma que o arquivo é executado e os passos - steps)
steps: 1º uses chamará o Actions do Github, após isso é configurado o Python, instala dependências que executarão o lint via flake8
job tests: Com o Lint executado e concluído (need), executando em determinada plataforma, haverá matriz de estratégia Python (Fará testes em todas versões do Python informadas)
steps: Executar o Actions, configurando Python na matriz de estratégia (Cada versão será feito o step), instala dependências e executará o arquivo 'test.py', responsável por testes
deploy: Com o tests executado e concluído (Implicitamente o lint também), em determinada plataforma, chamará Actions e configurará o Python, executará Action que fará deploy no Heroku, com as chaves cadastradas nos Secrets,
Elaborado por Mateus Schwede
ubsocial.github.io