IC/EC Conteinerizado

Introdução

Desta vez vamos descrever o processo de deploy contínuo usando a tecnologia de contẽiners baseados em Docker. Para tanto serão utilizadas as ferramentas Gitlab1, Gitlab-CI2 e a plataforma para ambientes Conteinerizados Rancher3.

Tomemos como referência esta imagem da própria Gitlab

Tomemos como referência esta imagem da própria Gitlab

As fases do pipeline4 podem, de forma macro, serem definidas em: código fonte, testes, construção e liberação. Aqui também trataremos em separado a fase de deploy contínuo - que é nosso principal objetivo final.

Como código fonte iremos usar uma aplicação de referência escrita em Flask (Python)5, cujo tutorial está disponível lá no site deles.

Para os testes de referência serão usados os casos escritos lá no tutorial, inclusive os testes de integração com banco de dados.

Considerando que nosso ambiente de deploy é uma plataforma conteinerizada, a construção será de imagens Docker e esta imagem será disponibilizada (liberação) no registry do próprio Gitlab.com.

Por fim, o deploy será realizado de maneira automatizada e contínua na plataforma de ambientes conteinerizados sob Rancher.

O Pipeline

Já ha algum tempo, mas principalmente nos dias atuais o desenvolvimento de aplicações requer uso de ferramentas que nos auxiliem a controlar a evolução do código fonte que escrevemos em qualquer linguagem. Nada de ficar criando .zip, .tar.gz, .bak, .old etc de nossos diretórios ou arquivos de programas.

Hoje em dia há uma gama enorme delas e o git6 está entre as mais modernas e mais utilizadas7. O Gitlab possui suporte nativo a esta tecnologia e é uma interface web bem moderna para interagir com repositórios git.

Pipeline como software

Para a construção do fluxo de IC/EC8 no Gitlab-CI usa-se o arquivo .gitlab-ci.yml residente na raiz do repositório de fontes do projeto.

/home/user/Projects/flask-tutorial
├── flaskr/
├── tests/
├── .gitlab-ci.yml
├── setup.py
└── MANIFEST.in

Um exemplo simples para o arquivo .gitlab-ci.yml é:

image: alpine:3.4

before_script:
  - echo "Hello, before script!"

test:
  script:
  - echo "Hello, test script!"
  except:
  - master

build:
  script:
  - echo "Hello, build script!"
  only:
  - master

release:
  script:
  - echo "Hello, release script!"
  only:
  - master

deploy:
  script:
  - echo "Hello, deploy script!"
  only:
  - master

Arquitetura do pipeline

Arquitetura e ferramentas do pipeline

Arquitetura e ferramentas do pipeline

Nas fases do pipeline temos que o código fonte escrito na fase de desenvolvimento é enviado para o Gitlab. O recurso de “CI” do Gitlab executa o script do pipeline através de seu runner9 - basicamente, é um serviço com servidores que irá executar o .gitlab-ci.yml e respectivas definições de testes, construção e liberação de artefatos, bem como a fase de deploy contínuo.

O processo de deploy é feito no ambiente Rancher via sua API que é acionada diretamente no pipeline. O Rancher encarrega-se de distribuir as novas versões do software entre os ambientes da sua aplicação (exemplo: teste, homologação, produção etc) e escalar a sua aplicação conforme necessidade.

Referências