Estratégia de Backup

Versão do documento: 1.2, 04/11/2020

Introdução

Objetivo

Este documento tem por objetivo documentar toda a estratégia de backup utilizada pela Basis, bem como estabelecer critérios de backup e evidenciar a realização da prática através de relatórios, apontando problemas e correções.

Escopo

Considera-se no escopo deste documento abordar todas as etapas e procedimentos que são necessários para a construção efetiva de um backup, tal como as configurações e breves explicações sobre o funcionamento de ferramentas envolvidas.

Não Escopo

Estão fora do limite definido como escopo deste documento dados de máquinas cujo backup é realizado pelas ferramentas listadas, informações inerentes à configuração e conexão da VPN da Basis, bem como de acesso remoto à máquina do Bacula, ou especificidades desnecessárias ao contexto.

Definições, Acrônimos e Abreviações

  • Backup: Cópia de segurança de dados de um dispositivo ou software, para possível recuperação do original em casos emergenciais.

  • Daemon: Software que executa em segundo plano em sistemas operacionais multitarefa.

Ferramentas Utilizadas

Todo o processo de backup da Basis é realizado através da ferramenta Bacula, centralizada em uma máquina especializada, de nome Amsterdam. O Bacula é um framework para administração, restauração e verificação de backups e dados de máquinas seletas em uma rede. A configuração do Bacula é dividida em três partes:

Bacula Director

O Director (bacula-dir.conf) é a parte mais complexa do sistema, em que se figura toda a configuração dos trabalhos de backup (job), agendamentos, pools, seleção dos alvos de backup (FileSet), definição do tipo de armazenamento, etc. Em suma, configuram-se os clientes e arquivos que farão parte do backup, além de realizar a comunicação entre os clientes e dispositivos de armazenamento.

Bacula File Daemon

File Daemon (bacula-fd.conf). Todos os clientes que possuem esse daemon em execução estabelecem uma comunicação com o Director, que por sua vez gerencia todas as máquinas e redireciona os dados destas para o Storage.

Bacula Storage Daemon

Storage Daemon (bacula-sd.conf) é o arquivo de configuração do Bacula, em que se relacionam os dispositivos de armazenamento, como fitas e discos, de forma a organizar os dados armazenados advindos do Director. Esse agente estabelece a comunicação com tais dispositivos, armazenando ou recuperando os arquivos específicos de cada cliente.

Backup

Há três tipos diferenciados de backup realizados na Basis:

  • Backup Full/Total: backup completo dos dados. O próximo backup, seja ele Diferencial ou Incremental, usará este como referencial, portanto, é obrigatório para seguir com todos os backups seguintes. Na Basis, esse tipo de backup é realizado no primeiro domingo de cada mês. Para restaurar um backup Full, pode-se restaurar todo o job que realizou o backup, ou seja, restaurar todos os arquivos que foram copiados, ou selecionar apenas os arquivos que se deseja restaurar a partir deste job.

  • Backup Diferencial: somente os arquivos novos ou modificados desde o último backup completo (Full) são transmitidos. Neste modelo, o espaço ocupado com o armazenamento dos arquivos é maior em relação ao Incremental, mas o tempo para restauração dos dados é menor. Na Basis, fazemos esse tipo de backup todos os domingos, às 23h. Para restaurar um backup Diferencial, pode-se restaurar todo o job do backup Diferencial desejado, ou seja, apenas aqueles arquivos que foram copiados, tomando como referência o último backup Full. Se o desejado for restaurar outro diferencial que não seja o imediatamente anterior, é preciso inicialmente restaurar o último backup Full, e depois avançar até o diferencial desejado.

  • Backup Incremental: somente os arquivos novos ou modificados desde a última execução do backup são transmitidos. Nesse modelo, o espaço ocupado com o armazenamento dos arquivos é menor, e o tempo para restauração dos dados é maior. Na Basis, esse tipo de backup é realizado todos os dias, às 23h. Para restaurar um Backup Incremental, pode-se restaurar todo o Job do backup desejado, ou seja, apenas os arquivos que foram copiados, tomando como referência o último backup, seja ele Full, Diferencial ou Incremental. Caso o interesse seja restaurar todo o backup, desde outro referencial que não seja o imediatamente anterior, é preciso inicialmente restaurar o backup Diferencial antecedente ao desejado, e em seguida os incrementais seguintes até o que se deseja restaurar.

As máquinas internas que seguem as especificações de backup acima listadas são as seguintes:

  • tokyo:: Máquina do SGO, inclui todas as configurações e anexos de ocorrências da Basis. Os seguintes diretórios são salvos:

/etc
/var/lib
/volumes
  • brasilia: Servidores reverse proxy que servem de ponto de entrada externo para os principais sistemas utilizados pela Basis. Os seguintes diretórios são salvos:

/etc/apache2
  • bridgetown: Servidores reverse proxy que servem de ponto de entrada externo para os principais sistemas desenvolvidos pela Basis. Os seguintes diretórios são salvos:

/etc/nginx
  • praga: Máquina do NFS com drive SSD, onde são salvos os dados utilizados em ambientes de produção da Basis que exigem mais dinamismo de escrita e leitura, como os repositórios e configurações do Git (Gitlab) e SonarQube, entre outros. Os seguintes diretórios são salvos:

/etc
/opt
/export/rancher
  • mykonos: Máquina do NFS com drive HD, onde são salvos os dados utilizados em ambientes de produção da Basis, como dados do site da Basis, Chat Basis (RocketChat), repositórios de imagens e bibliotecas (Nexus), entre outros. Os seguintes diretórios são salvos:

/mnt/nfs_kube/nexus_docker
  • ottawa: Máquina do NFS com drive HD, onde são salvos os dados utilizados pelo Jenkins, como configurações de Jobs, plugins, bibliotecas baixadas do Nexus para construção, entre outros. Os seguintes diretórios são salvos:

/etc
/opt
/export/rancher
  • panama: Máquina do Rancher de produção da Basis, onde fica armazenada toda a configuração da infraestrutura de produção rodando em Rancher 2. Os seguintes diretórios são salvos:

/etc
/opt
/srv/rancher2/volume
  • yamoussoukro: Máquina do Rancher de desenvolvimento da Basis, onde fica armazenada toda a configuração da infraestrutura de desenvolvimento rodando em Rancher 2. Os seguintes diretórios são salvos:

/etc
/opt
/srv/rancher2/volume
  • colombo: Máquina de banco de dados onde são salvas as entradas de ponto eletrônico da Basis. Os seguintes diretórios são salvos:

C:/Backup
  • amsterdam:: Máquina do Bacula, inclui toda a configuração de backup para restauração dos clientes. O seguinte diretório é salvo:

/etc/bacula

Configurações de Hardware

O Bacula tem sua instância instalada em uma máquina física com sistema operacional Linux Ubuntu 14.04 LTS, com um CPU Xeon 4 cores, 8192MB de memória RAM, e 5,5TB de armazenamento configurado em RAID 10. Os backups são dividos em volumes pelo Storage Daemon.

Histórico de Revisões

Tabela 1. Histórico de Revisões
Data Versão Autor Revisor Observação

09/07/2015

1.0

Dyogo Cruz

Guilherme Peres

Versão Inicial

01/05/2018

1.1

Cédric Lamalle

Guilherme Peres

Correções tipográficas para conversão no formato asciidoc, ajustes nos nomes das máquinas, atualização dos servidores entrando no backup e atualização da Configuração de Hardware

04/11/2020

1.2

Guilherme Peres

Cédric Lamalle

Atualização de máquinas onde se realiza backup



Estratégia de Verificação, Validação e Integração

Versão do documento: 3.4, 06/07/2021

Introdução

Objetivo

Este documento tem por objetivo documentar toda a estratégia de integração contínua, bem como a verificação por pares e testes de software utilizados pela Basis no desenvolvimento de seus projetos, bem como estabelecer critérios de integração e evidenciar a realização da prática através de relatórios de integração, apontando problemas e correções.

Escopo

Considera-se no escopo deste documento abordar todas as etapas e procedimentos que são necessários para a verificação por partes dos artefatos elaborados pela Análise e Design dos projetos de desenvolvimento, a construção efetiva de um sistema, através de integração contínua, tal como as configurações de ferramentas envolvidas e breves explicações sobre seus funcionamentos e os procedimentos utilizados para testar o produto nos ambientes de desenvolvimento, integração e pretendido para o uso.

Não Escopo

Estão fora do limite definido como escopo deste documento as informações inerentes à configuração e conexão da VPN da Basis, bem como de acesso remoto à máquina do Jenkins e seus slaves, ou suas especificidades desnecessárias ao contexto.

Definições, Acrônimos e Abreviações

  • Agent, ou Slave: máquina responsável pela execução de jobs;

  • Build: Construção sistematizada de uma aplicação a partir de código-fonte;

  • Commit: submeter ao repositório as novas modificações realizadas em suas pastas locais;

  • CRUD: Create, Read, Update, Delete – funções básicas de manutenção de entidades;

  • Deploy: instalação do software executável no servidor de aplicação;

  • Java, PHP, C#: linguagens de programação;

  • Job: tarefa de compilação de código e execução de testes de projetos;

  • Plugin: extensão de software para adicionar novas funcionalidades;

  • Repositório Git: espaço, local ou remoto, para armazenamento de arquivos e controle de versão dos mesmos;

  • VPN: rede privada de comunicação, que busca assegurar a confidencialidade e integridade na troca de informações pela rede.

Verificação por Pares

Introdução

A verificação por pares é executada para identificar defeitos nos requisitos, na arquitetura e no desenvolvimento do produto antes que estes sejam formalizados como código fonte estável, de forma que o custo para resolução seja mais baixo e a solução mais efetiva, garantindo a integridade da informação ao longo do ciclo de vida do software.

A Basis realiza verificações por pares em seus produtos através da técnica de Inspeção, onde um revisor fará uma inspeção com base em critérios, nos produtos selecionados.

São efetuadas inspeções em requisitos, na arquitetura do produto e no código-fonte do mesmo, com base em critérios definidos nas ferramentas SGO e Git. No momento da inspeção, a tarefa deve ser atribuída ao revisor, que deverá então analisar os documentos à luz dos critérios padronizados. Caso problemas sejam identificados, estes poderão ser relatados no texto de observação existente no checklist, bem como em evidências de captura de tela, quando pertinente.

Em todas as revisões por pares o revisor deve se preocupar em:

  • Ver se o template está na versão mais atual da Biblioteca de Ativos

  • Garantir que o formato do documento está de acordo com o template

  • Garantir que as seções estão de acordo com o template

  • Garantir que houve correção ortográfico automática no documento

  • Garantir que não foram excluídas as seções do template

Requisitos

Executam-se inspeções em requisitos, representados pelas especificações funcionais de Casos de Uso ou Especificações por Exemplo (EPEs), de acordo com a opção do projeto. As inspeções são feitas com base em critérios definidos na ferramenta SGO, para cada tarefa de implementação.

As mesmas poderão ser efetuadas por amostragem, quando a quantidade de Casos de Uso ou EPEs for grande (maior que 10). Nestes casos, poderá se optar por realizar apenas a revisão de parte das especificações funcionais, ficando a cargo do revisor essa decisão. Recomenda-se que nestes casos a escolha leve em consideração:

  • A criticidade dos requisitos dentro do projeto;

  • A existência ou não de um padrão de especificações funcionais (Ex: Especificação tem vários CRUDs. Opta-se por fazer inspeção de apenas 10% dos CRUDs).

Arquitetura

Executam-se inspeções na arquitetura do produto, na qual o revisor é um par do elaborador das especificações. As inspeções são feitas com base em critérios definidos na ferramenta SGO, para cada ordem de serviço.

Desenvolvimento

Executam-se inspeções no código-fonte a ser integrado à branch principal do repositório Git do sistema em questão. As inspeções são feitas com base na checklist de validação de Merge Request, evidenciada na própria criação do Merge Request no repositório, e definida na seção Qualidade.

Integração Contínua

Introdução

A Integração Contínua é uma prática recente na engenharia de software, que consiste, resumidamente, em unificar todas as cópias de trabalho de cada desenvolvedor, várias vezes ao dia, em um ambiente centralizado e compartilhado. Ela ganhou grande importância na comunidade de desenvolvimento de software devido ao grande impacto causado pelas metodologias ágeis, sendo ela um dos pilares de tal agilidade e garantindo que todo o sistema funcione de forma correta em cada nova construção (build), mesmo que a equipe envolvida seja grande e diversas partes do código estejam sendo alteradas ao mesmo tempo.

Uma grande vantagem da integração contínua é a repercussão instantânea. A cada commit no repositório, a build é automaticamente realizada, executando testes e detectando falhas. Se o código de algum commit não compilar ou não passar em algum dos testes, a equipe envolvida toma conhecimento instantaneamente através de um E-mail, por exemplo, que aponta as falhas detectadas e o commit que contém o código defeituoso, possibilitando assim uma correção imediata.

Equipes e Funções

O processo de integração envolve três equipes principais, todos com responsabilidades, objetivos e procedimentos bem definidos:

Desenvolvimento

A equipe de desenvolvimento, composta por codificadores e testadores, é responsável pela elaboração respectiva do código-fonte relativo aos sistemas e dos testes das funcionalidades desenvolvidas, bem como sua execução. Suas tarefas são repassadas pelos gestores de projeto, seu ambiente de aplicação depende da equipe de configuração, e o código por eles produzido deve ser constantemente versionado.

Configuração

A equipe de configuração é responsável por criar e configurar os ambientes de integração, de aplicação e de avaliação do código fornecido pelos desenvolvedores, de acordo com as tarefas e planos elaborados pelos gestores. Cabe também à configuração administrar os repositórios de versionamento dos desenvolvedores, e resolver/reportar problemas relativos aos ambientes relatados no processo de integração.

Gestão

Os gestores de cada projeto são responsáveis por elaborar as solicitações de codificação e criação de ambientes, distribuindo as tarefas entre as demais equipes. Também lhes cabe a responsabilidade por aprovar ou rejeitar o código dos desenvolvedores, bem como avaliar sua aplicação nos ambientes respectivos, de acordo com o cliente.

Ferramentas Utilizadas

Jenkins

O Jenkins é uma ferramenta de Integração Contínua projetada para realizar builds automáticas de múltiplos projetos (definidos em configurações individuais nomeadas Jobs), a partir de gatilhos pré-definidos; periódicos, específicos ou a cada novo commit no repositório associado. Baseado em Java, ele permite restringir o acesso de usuários às Jobs, e possui vários plugins instaláveis para melhor atender às necessidades específicas de projetos. Sua construção garante que apenas builds de sucesso sejam publicadas em produção.

No ambiente Basis, o Jenkins, acessível pelo endereço https://cje-master1.basis.com.br/, possui uma estrutura padronizada de acesso a jobs de clientes. As pastas de acesso consistem em "Cliente/Sistema/Ambiente", e possuem acesso restrito aos grupos de recursos Basis associados àqueles clientes específicos.

A ação da construção de fato é dividida em agents, também conhecidos como slaves, que são máquinas individuais, executando construções em paralelo. Todos os agents são gerenciados no servidor central, Jenkins Master, responsável por configurar os jobs, atribuindo-lhes opções específicas de inicialização, e por direcionar as builds, disponibilizando-as em agents livres. Os agents, bem como certas ferramentas comuns do Jenkins como versões de Java e Maven, são configurados em uma instância de controle de Jenkins Masters, o Jenkins Operation Center, acessível em https://joc.basis.com.br/.

Versões mais recentes do Jenkins aplicam o conceito de Pipeline às jobs. Uma pipeline de entrega contínua no Jenkins consiste em um processo complexo de construção do software de maneira confiável e repetida, normalmente separada em estágios para melhor controle. Tais pipelines são elaboradas via código, utilizando uma sintaxe específica conhecida como Domain-specific Language (DSL), e podem ser colocadas ou em um arquivo Jenkinsfile dentro do próprio repositório de código, ou na configuração da job no Jenkins, ou em um Job Template.

Um Job Template no Jenkins consiste em uma configuração fixa e padronizada de jobs, de tal forma que qualquer job que seja criada a partir desse template só necessita de alguns parâmetros a configurar, em vez de uma configuração completa. Os templates do Jenkins Basis aplicam parâmetros específicos em pipelines, de forma a manter as jobs uniformemente configuradas.

Os templates do ambiente Basis possuem também uma funcionalidade associada ao SonarQube, de modo a realizar avaliações de qualidade de código toda vez que uma nova build é executada. Se o código sendo construído ficar aquém de um limite fixo de qualidade de código, o chamado Quality Gate, a construção é interrompida, exigindo a revisão do código pelos desenvolvedores de forma a eliminar os problemas de qualidade recém surgidos.

Maven

Apache Maven, ou simplesmente Maven, é uma ferramenta de automação de compilação utilizada primariamente em projetos Java. O Maven utiliza um arquivo XML (POM) para descrever o projeto de software em construção, bem como suas dependências de módulos e componentes externos, ordem de compilação dos mesmos, diretórios e plugins necessários. Ele possui objetivos pré-definidos para realizar tarefas específicas, como compilação e empacotamento de código.

O Maven adquire bibliotecas Java e seus plugins dinamicamente de um ou mais repositórios, como o próprio repositório central Maven ou o Nexus Basis, e armazena-os em uma área de cache local. Esse cache pode também ser atualizado com artefatos criados por projetos locais.

O Jenkins utiliza o Maven como concentrador de comandos e variáveis para integração contínua. O arquivo POM é lido para ajustar os deploys da integração a partir do plugin Cargo, bem como a migração do banco de dados a partir do Liquibase ou Flyway.

Docker

Docker é uma plataforma Open Source, que facilita a criação e administração de ambientes isolados. O Docker possibilita o empacotamento de uma aplicação ou ambiente inteiro dentro de um container, e a partir desse momento o ambiente inteiro torna-se portável para qualquer outro Host que contenha o Docker instalado. Isso reduz drasticamente o tempo de deploy de alguma infraestrutura ou até mesmo aplicação, pois não há necessidade de ajustes de ambiente para o correto funcionamento do serviço, o ambiente é sempre o mesmo, configurado uma vez e replicado quantas vezes quiser.

O backend padrão do Docker é o LXC. Com isso é possível definir limitações de recursos por container (memória, cpu, I/O, etc.)

Vantagens:

  • Implantação rápida de aplicativos: os containers incluem os requisitos mínimos de tempo de execução do aplicativo, reduzindo seu tamanho e permitindo que eles sejam implantados rapidamente.

  • Portabilidade entre máquinas: um aplicativo e todas as suas dependências podem ser agrupados em um único contêiner que é independente da versão host do kernel, plataforma de distribuição ou modelo de implantação do Linux. Este contêiner pode ser transferido para outra máquina que executam o Docker e executado na mesma sem problemas de compatibilidade.

  • Controle de versão e reutilização de componentes: pode rastrear versões sucessivas de um container, inspecionar diferenças ou reverter para versões anteriores. Os recipientes reutilizam componentes das camadas anteriores, o que os torna visivelmente leves.

  • Compartilhamento: pode usar um repositório remoto para compartilhar seu container com outras pessoas ou ambientes. A RedHat fornece um registro para esse propósito, e também é possível configurar seu próprio repositório particular.

  • Leve e mínima sobrecarga: imagens Docker são pequenas por padrão, o que facilita a entrega rápida e reduz o tempo para implantar novos recipientes de aplicativos.

  • Manutenção simplificada: Docker reduz o esforço e o risco de problemas com dependências de aplicativos.

As construções do Jenkins que utilizem um template relativo a Docker criam imagens a partir dos códigos-fonte e enviam para repositórios internos no Nexus, para que sejam utilizadas em suas máquinas respectivas. Nossas máquinas Docker, ou Docker Hosts, são separadas por cliente, mantidas e organizadas via Rancher.

Rancher

O Rancher consiste numa plataforma de operação do Docker, provendo uma interface gráfica intuitiva e várias funcionalidades que facilitam a manutenção de hosts e containers. Entre elas, o gerenciamento de redes e balanceamento de carga entre hosts, criação e manutenção de volumes de armazenamento, facilitação de uso de recursos do próprio Docker, elaboração de catálogos contendo pilhas de serviços Docker para execução direta, visualização de logs, execução de comandos, entre outros.

Uma pilha de serviços no Rancher normalmente comprime tudo o que é necessário para a execução de um sistema. É composta por um ou mais containers Docker, que se comunicam entre si através de redes internas estabelecidas pelo próprio Rancher.

As construções do Jenkins que utilizem um template relativo a Docker fazem a atualização dos serviços específicos relativos aos seus sistemas diretamente no Rancher, através de um plugin desenvolvido internamente. Portanto, não há necessidade de interação com o Rancher uma vez que os serviços estejam corretamente configurados, o próprio Jenkins se encarrega dos demais processos de atualização.

SonarQube

O SonarQube, anteriormente conhecido simplesmente como Sonar, é uma plataforma aberta de gerenciamento de qualidade de código. Abrangendo várias linguagens e métodos, o SonarQube provê estatísticas relativas à codificação de cada sistema, apresentando resultados de testes unitários e de integração, avaliação de código duplicado, documentação, complexidade, e apontando diversos problemas encontrados no código ao longo do tempo.

A integração do SonarQube com o Jenkins é direta, feita através de um plugin que adiciona um passo de pós-build à job desejada, bastando também adicionar testes e referências no POM relativo ao projeto. O sucesso em uma build configurada desta forma já coloca o código no ambiente do SonarQube, para posterior avaliação dos resultados.

Em nosso ambiente padrão de qualidade de código, acessível pelo endereço https://codequality.basis.com.br/, o SonarQube possui um Quality Gate, um “limite de qualidade” específico para cada tipo de avaliação. A BASIS define um limite de qualidade minimo padrão para seus projetos. Esses limites podem ser alterados de acordo com os níveis acordados em contrato, sendo necessária intervenção no código caso fique abaixo de tal. Este nível de qualidade deve ser garantido pelos responsáveis pelo desenvolvimento e será verificado no momento da geração das baselines de código-fonte.

Existe também um ambiente separado para verificação de qualidade imediata em builds do Jenkins. Acessível via https://codequality-build.basis.com.br/, esta instância do SonarQube possui um Quality Gate voltado especificamente para verificação de novos problemas que tenham surgido em cada uma das construções realizadas no Jenkins, bloqueando a continuidade das mesmas enquanto o problema não for resolvido.

Repositórios

Existem dois tipos de repositórios utilizados na configuração dos projetos de integração: os repositórios de código-fonte de cada sistema (Githttp://gitlab.basis.com.br) e o repositório interno referente às bibliotecas a serem utilizadas pelo Maven, NPM, Bower, bem como às imagens Docker (Nexushttp://element.basis.com.br). No Git, utilizado como ferramenta de controle de versão, armazenam-se a documentação e o código-fonte de cada sistema. Código este em que se encontra o pom.xml, responsável por fornecer os parâmetros do Maven. O Nexus é responsável pelas bibliotecas do Maven, a partir das quais os comandos de construção são executados, bem como por Docker Registries privados, onde se armazenam imagens Docker construídas e utilizadas pelo Jenkins para uso nos ambientes Basis.

Cargo

Cargo é um empacotador que permite a manipulação de diversos tipos de servidores de aplicações, como Java EE, de maneira padronizada. No Maven, ele funciona como um plugin para configurar, iniciar, parar ou implantar aplicativos em seus devidos servidores. Para chamá-lo no Jenkins, utiliza-se a opção cargo:redeploy, e seus parâmetros serão lidos do pom.xml. O Cargo é normalmente utilizado em projetos de arquitetura antiga, onde não se utiliza o Docker.

Migração de Banco de Dados

Para sistemas construídos pela Basis que necessitem de banco de dados, utilizamos ferramentas que possibilitem uma migração automatizada e controlada de forma simples. Tais ferramentas de migração de banco de dados são integradas ao Maven como um plugin, e podem ser executadas tanto em cada construção do sistema quanto na inicialização do mesmo. Funcionam com scripts SQL padrão ou no formato XML, e são compatíveis com os principais bancos de dados.

Tal abordagem tem como motivações:

  • Mudanças constantes no banco de dados;

  • Interrupção do desenvolvimento por mudanças no banco;

  • Histórico de mudança perdendo-se até chegar em produção;

  • Versionamento e ordenação dos scripts;

  • Constante recriação manual do banco de dados em ambientes diferentes (desenvolvimento, teste, etc);

  • Automação das atualizações das aplicações.

A depender do projeto, escolhe-se uma das duas ferramentas abaixo: Liquibase ou Flyway.

Liquibase

O Liquibase é a ferramenta de uso mais comum em projetos recentes, sendo configurado diretamente no repositório dos projetos que serão executados no Jenkins, incluindo o POM, sem necessitar de parâmetros extras na construção do Maven.

Os scripts de banco de dados são agregados em arquivos XML. Por padrão, a pasta “resources/config/liquibase” abrange o master.xml, responsável por listar e ordenar os scripts a serem executados, e a pasta changelog, onde ficam os scripts de fato. O Liquibase encarrega-se de recriar ou atualizar o banco de dados, desde que os scripts de mudança estejam listados e configurados no master.xml e com a sintaxe padrão (XXXXX_nome_do_script.xml, sendo XXXXX a data/hora da geração do script).

Flyway

O Flyway é usado em nosso ambiente para atualização dos bancos de dados em conjunto com o Maven e o Jenkins, aplicando o comando flyway:migrate na entrada de parâmetros do Maven dos sistemas que serão construídos. Normalmente é relacionado a projetos de arquitetura antiga, em conjunto com o Cargo.

Os scripts de banco de dados ficam em pastas específicas do repositório de código-fonte, por padrão, “resources/db/migrate” no caso de sistemas Java. O Flyway encarrega-se de recriar ou atualizar o banco de dados, desde que os scripts de mudança estejam nomeados na ordem correta e com a sintaxe padrão (VXX.XXXX__nome_do_script.sql).

Procedimentos

A integração é realizada tendo em vista objetivos bem definidos:

Planejar a Integração do Produto

A preparação determina um planejamento para a sequência de integração, o estabelecimento do ambiente de integração, os itens de software a serem integrados, bem como procedimentos e critérios para a integração do produto. A definição da estratégia e das ferramentas que serão utilizadas no projeto é registrada e aprovada no Documento de Arquitetura de Software dos projetos.

Garantia da Compatibilidade das Interfaces

A compatibilidade entre interfaces é garantida através da execução e manutenção de práticas como a revisão das descrições de interfaces internas e externas, evidenciando quaisquer alterações por rastreamento.

Montagem e Entrega dos Componentes do Produto

Executa-se, por fim, o planejamento de integração elaborado inicialmente, de forma a evidenciar por fim a disponibilidade dos componentes do produto para integração.

Para que a integração possa ocorrer de maneira completa, há três ambientes que devem estar preparados previamente:

Repositório de Código

Acessível pelos projetos específicos listados no site https://gitlab.basis.com.br/, necessita minimamente de arquivos base para inicialização das builds, como um POM, e de scripts de banco para execução do Liquibase ou Flyway. Acessos são restritos à equipe de cada sistema.

Banco de Dados:

Configurado pela equipe de banco e acessível também à equipe de configuração, deve ter suas configurações de acesso e especificidades colocadas no código e nos próprios ambientes de desenvolvimento. O tipo de banco varia de acordo com o projeto.

Ambientes DES / TST / HOM:

Criados pela equipe de configuração a partir de uma tarefa repassada pelo gestor, logo após a aprovação da proposta de trabalho relativa ao sistema. Consistem em containers Docker empilhados no Rancher, ou máquinas virtuais que possuem os requisitos de hardware e software mínimos para aplicação do código e associação com o banco de dados.

Faz-se necessário, por fim, a configuração de uma job no Jenkins propriamente dito, realizada pela equipe de configuração. Acessando o endereço apontado na sessão Jenkins, com nome e senha específicos de usuário, temos a tela inicial do ambiente:

image

A partir desta tela, a equipe de configuração seleciona um projeto do cliente desejado dentre os já existentes, organizados em pastas. Caso não haja ainda uma pasta do cliente específico, uma nova pode ser criada no botão Novo job, ou New Item, e selecionando o tipo Folder.

image

image

Na configuração que segue, por padrão, se estabelece o nome do cliente, possivelmente um nome de exibição com mais detalhamento, e uma variável de ambiente DOCKER_REGISTRY, para direcionamento das jobs ao repositório Docker associado ao mesmo.

image

Uma vez dentro da pasta do cliente, seguem-se procedimentos semelhantes para criação das pastas do sistema propriamente dito, e das instâncias separadas de DES/TST/HOM que forem necessárias. O destaque a ser feito para este ponto do processo é que, da mesma forma que a pasta do cliente possui uma variável de ambiente DOCKER_REGISTRY para direcionamento das imagens do Docker, as pastas de cada sistema devem ter também uma variável, GRUPO, para que as imagens tenham um subgrupo específico do sistema em questão.

image

Dentro da pasta final, por padrão seguindo a estrutura Cliente/Sistema/Ambiente, podem ser criadas as jobs de construção de fato. Para tal, clica-se em New Item, seleciona-se o nome e o tipo ou template de job a ser configurada. Supondo uma construção de um container Docker para o backend de um sistema, por exemplo, seleciona-se o Template Docker Backend.

image

Na tela que segue, toda a configuração acerca do sistema em questão é realizada, incluindo, entre os detalhes mais importantes, a definição do repositório a usar-se para o código, utilizando endereço de acesso SSH com as credenciais estabelecidas na configuração do próprio Jenkins, a automatização de construções baseada em frequência de atualizações do repositório, os parâmetros do Maven utilizados na build, como escolha de um profile do POM. Os parâmetros de configuração da job possuem um ícone de ajuda para maior esclarecimento sobre a utilidade de cada parâmetro.

image

image

Diferentes sistemas podem exigir diferentes configurações ou templates, incluindo jobs mais abertas que não utilizem templates propriamente. O padrão para todos, independente das configurações individuais de sistema, é utilizar os repositórios Git corretos, selecionando a branch master por padrão, e ativar a consulta periódica do SCM para ambientes de desenvolvimento. Dessa forma, sempre que houver um novo commit no repositório de código do sistema, uma build será automaticamente executada.

No caso de jobs específicas para verificação de qualidade, deve ser utilizado o Template Sonar. A job em questão terá seu foco em testes que estejam configurados para aquele cliente/sistema, para atestar qualidade e erros de código. Vale constar que existem dois Templates Sonar principais, sendo o segundo o Template Sonar Branch. Este possui como diferencial a parametrização da branch do repositório que será usada na execução manual da job, sendo que o primeiro foca numa única branch, definida na configuração, e roda automaticamente e periodicamente.

image

Configurados e salvos os detalhes da job, as construções do sistema podem ser realizadas. Na tela padrão da job, clicando em Construir agora, uma nova build é iniciada. Todos os usuários com acesso ao Jenkins e às pastas específicas dos clientes, requisitado pelo gestor, podem executar builds e visualizar os detalhes da execução.

image

Na seção “Histórico de builds”, clicando nos detalhes da build em execução, ou mesmo em alguma previamente executada, é exibida a tela de detalhes da build em questão, incluindo detalhes da alteração no repositório que iniciou sua execução.

image

Ainda dentro da tela da build, selecionando Saída do console, ou a partir de outra tela que exiba o progresso atual das builds do Jenkins, ao clicar na barra de progressão das mesmas, é possível ver o log de execução da construção em tempo real.

image

Se a build finalizar em vermelho, houve algum problema em sua execução, e o log deve ser examinado para determinar a solução. Nesse caso, o sistema não é construído e fica inacessível em sua versão mais recente.

Se finalizar em azul, o sistema foi corretamente construído de acordo com os parâmetros de configuração anteriormente especificados e deve estar acessível por seu link ao ambiente específico.

Se a build finalizar em amarelo, a construção terminou de modo instável. Isso indica que algo na construção não saiu como esperado e pode acarretar em problemas no sistema. Também cabe investigar os logs para determinar se a situação necessita de reparo.

Independente do resultado das builds, quando esta é finalizada, as equipes de configuração e gestão são informadas por e-mail e por chat, de acordo com a configuração da própria job. O e-mail inclui o resultado da build e a saída de log da build em questão.

Para solucionar o problema apontado na build, o executor da mesma inicialmente examina o log. Se o erro apontado for algo relativo a seu próprio trabalho, ele mesmo faz as devidas alterações, seja em código ou ambiente, e realiza uma nova build. Caso o erro não faça parte da sua própria jurisdição, ele deve abrir uma ocorrência no SGO para direcionar o erro à equipe responsável por tal departamento.

Testes

Os testes são classificados em dois tipos distintos: testes de caixa branca, para os quais se exige conhecimento interno do sistema, e testes de caixa preta, para os quais não é necessário tal conhecimento, sendo esses realizados em visão de teste.

Todos os testes de caixa branca do ambiente Basis são realizados no Jenkins e evidenciados no Sonar (resultados e scripts), porém tais testes não são obrigatórios. Caso não estejam presentes, o desenvolvedor deverá registrar no SGO, via Tarefa que lhe for atribuída, a execução dos testes funcionais (de caixa preta) realizados. Um arquivo comprovando a execução deve ser anexado à Tarefa para que seja possível sua conclusão.

Quando se adota o teste manual o testador deve a cada correção de defeito executar um teste de regressão na funcionalidade inteira na qual a correção foi aplicada. No caso de testes automatizados os mesmos são realizados após cada correção de bug identificado nos testes realizando uma cobertura de testes de regressão.

  • Testes unitários (caixa branca): realizados pelo desenvolvedor e executados no Jenkins, durante a implementação dos requisitos. A Basis define duas formas de realizar testes unitários: Via código, com classes de testes e métodos de testes automatizados, ou manualmente. Nesse último caso, o registro de testes é feito dentro de ocorrências de Tarefa no SGO, concluídas com a inserção de um anexo comprobatório.

  • Testes de integração (caixa branca): elaborados e realizados pelo desenvolvedor e executados no Jenkins, à medida que realizam commits no repositório. Avaliam interfaces de código entre componentes, módulos, camadas, entre outros. Tais testes são criados dentro do desenvolvimento utilizando bibliotecas de teste[1] e versionados juntamente ao código-fonte, mas não são integrados no produto final (executável). Neste caso, segue-se o fluxo de integração de código-fonte definido nas seções acima.

  • Testes funcionais (caixa preta): realizados pela equipe de testes e desenvolvedores, em ambiente de teste similar ao ambiente do cliente em termos de configurações, interfaces sistêmicas e outros, levando em consideração os requisitos levantados junto ao cliente. Esses testes são realizados manualmente, especificados em ocorrências no SGO do tipo Tarefa, com departamento Proteste, relacionadas às OSs originais e separadas por funcionalidade e cenário. Os testes funcionais abordam todas as regras de negócio descritas nos cenários dos casos de uso ou EPEs. As evidências de execução dos testes são elaboradas com apoio de ferramentas de captura de tela, em que se pode visualizar as telas de execução dos testes. Os erros são registrados no SGO como defeitos, nos quais além do relacionamento com módulo e funcionalidade, deve ser citado o cenário (EPE) ou fluxo (UC) onde ocorreu o erro, e as evidências geradas são ali anexadas. Importante observar que o projeto só transita de fase no momento em que todos os erros identificados foram resolvidos. O prazo para que isso ocorra é o prazo planejado para a fase.

  • Homologação (caixa preta): A equipe disponibiliza o produto no ambiente do cliente e este realiza os testes sem a presença da equipe de testes, levando em consideração a documentação funcional produzida. O aceite da OS no SGO determina que os critérios contidos na documentação funcional foram homologados no sistema disponibilizado, e este pode então ser implantado em produção. Esta implantação é feita pelo cliente, com base no plano de implantação elaborado no projeto.

Especificações de Hardware

O Jenkins tem sua instância Master rodando como um Docker container dentro do Rancher de produção, atualmente utilizando a imagem cloudbees/jenkins-enterprise, com acesso a 32 vCPU, 10GB de memória RAM limitados via parâmetros JVM e 1,78TB de armazenamento acessíveis via NFS. Associado ao mesmo, há um outro container para um Jenkins Operation Center, atualmente utilizando a imagem cloudbees/jenkins-operations-center, com acessos de hardware semelhantes ao Master. O conjunto Jenkins trabalha com 5 agents Linux para fazer os deploys das builds, sendo cada um instalado em uma máquina virtual do VMware, com sistema operacional Linux Ubuntu, com 4 vCPU, 4096MB de memória e 160GB de armazenamento. Além destes, há um agent em Windows Server utilizado para sistemas que utilizem Microsoft .NET, configurado numa máquina com 4 vCPU, 8GB de memória e 100GB de armazenamento.

Histórico de Revisões

Tabela 2. Histórico de Revisões
Data Versão Autor Revisor Observação

10/03/2015

1.0

Dyogo Cruz

Guilherme Peres

Versão Inicial

22/05/2015

1.1

Dyogo Cruz

Guilherme Peres

Reforço e revisão de atividades e práticas envolvidas no processo

10/07/2015

2.0

Guilherme Peres

Dyogo Cruz

Inclusão dos procedimentos e detalhamento do Sonar

23/07/2015

2.1

Guilherme Peres

Dyogo Cruz

Marcelle Mirsky

Cédric Lamalle

Inclusão dos procedimentos de verificação e validação

09/05/2018

3.0

Guilherme Peres

Cédric Lamalle

Atualização e revisão de ferramentas e processos

26/06/2018

3.1

Guilherme Peres

Cédric Lamalle

Substituição de menções ao EA por Tarefas SGO

09/10/2018

3.2

Cédric Lamalle

Guilherme Peres

Adicionar itens na revisão por pares

26/02/2020

3.3

Guilherme Peres

Cédric Lamalle

Adição de especificações sobre o defeito aberto para teste, remoção do qTest, atualização da revisão por pares

06/07/2021

3.4

Cédric Lamalle

Wilson Carlos

Atualizar o planejamento da Integração do Produto



Guia de Gerência de Configuração

Versão do documento: 3.3, 06/09/2018

Critérios

A BASIS define 2 modos de controle de itens de configuração:

  • FORMAL: todo item de configuração de controle formal, que não seja elaborado internamente ao SGO, deverá ser inserido em baseline e sua alteração deverá ser analisada e aprovada antes da execução. Todo o ciclo de vida é gerenciado em ferramenta. Para alterações nestes itens é necessário criar uma tarefa de descrição da mudança a ser realizadas.

    • Obs.: As baselines devem ser geradas de acordo com a periodicidade definida no cronograma do projeto em questão. Para ICs organizacionais, a periodicidade está definida no cronograma do projeto de melhoria de processos. Nelas estarão presentes todos os Ics de nível de controle formal.

  • CONTROLE DE VERSÃO: itens de configuração de controle de versão não necessitam ser inseridos em baseline, mas podem constar como forma de rastreamento de registro. Sua alteração é gerenciada em ferramenta (SGO), sendo que o registro da causa de alteração é realizado no momento do versionamento.

    • Obs: Versões de código podem ser armazenadas em tags no repositório do projeto, em paralelo com as Baselines, e não necessitam de um padrão de nomenclatura.

A BASIS define que todo produto de trabalho é um item de configuração, e o nível de seu controle é caracterizado conforme abaixo:

  • Os produtos de trabalho decorrentes de atividades técnicas serão considerados itens de configuração de controle formal. Exemplo: descrição de requisitos, modelagem, código, casos de testes.

  • Os produtos de trabalho decorrentes de atividades gerenciais e de suporte serão considerados itens de configuração com controle de versão. Exemplo: plano de projeto, checklist de qualidade, resultados de medição, atas de reunião.

  • Os produtos de trabalho decorrentes de atividades da biblioteca de ativos serão considerados itens de configuração com controle Formal através de solicitações de melhoria no SGO. Exemplo: Templates, definição de processos, fluxos…​

  • Os produtos de trabalho decorrentes de atividades de RH serão considerados itens de configuração com controle de versão. Exemplo: Mapeamento de Competências, Plano Estratégico Tático de Treinamento…​

A regra para preencher o histórico de revisões dos documentos é a seguinte:

  • Para mudanças estruturais do documento (seções novas, seções removidas, criação de subseções), a numeração avança para o próximo número inteiro (por exemplo, de 1.0 para 2.0).

  • Para mudanças que não afetem a estrutura do documento, a numeração avança um decimal (por exemplo, 1.0 para 1.1).

  • Alguns documentos (conforme definido no Guia de Gerência de Configuração), como por exemplo a Política da Basis, devem passar por aprovação formal da direção, caso sofram uma mudança estrutural.


Permissões de Acessos

Gerente de RH

Tabela 3. Permissões Gerente RH
Repositório Permissão

Documentação

Sem acesso

Código-Fonte

Sem acesso

Gravações

Sem acesso

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Administrativo / Assistente de RH

Tabela 4. Permissões Administrativo RH
Repositório Permissão

Documentação

Sem acesso

Código-Fonte

Sem acesso

Gravações

Sem acesso

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Sem acesso

Gerente de Projetos

Tabela 5. Permissões Gerente Projetos
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Edição

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

EPG

Tabela 6. Permissões EPG
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Edição

Biblioteca de Ativos

Edição

Projeto de Melhoria

Edição

Analista de Configuração

Tabela 7. Permissões Configuração
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Edição

Biblioteca de Ativos

Edição

Projeto de Melhoria

Edição

Analista de Requisitos

Tabela 8. Permissões Requisitos
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Edição

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Analista de Métricas

Tabela 9. Permissões Métricas
Repositório Permissão

Documentação

Visualização

Código-Fonte

Visualização

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Analista de Teste / Testador / Prototipador

Tabela 10. Permissões Testador
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Analista de Qualidade / Auditor de Configuração

Tabela 11. Permissões Qualidade
Repositório Permissão

Documentação

Visualização

Código-Fonte

Visualização

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Analista / Projetista

Tabela 12. Permissões Analista
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Programador

Tabela 13. Permissões Programador
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Arquiteto

Tabela 14. Permissões Arquiteto
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

DBA

Tabela 15. Permissões DBA
Repositório Permissão

Documentação

Edição

Código-Fonte

Edição

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização

Medição e Análise

Tabela 16. Permissões Medição
Repositório Permissão

Documentação

Visualização

Código-Fonte

Visualização

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Edição

Suporte SGO

Tabela 17. Permissões Suporte SGO
Repositório Permissão

Documentação

Visualização

Código-Fonte

Visualização

Gravações

Visualização

Biblioteca de Ativos

Visualização

Projeto de Melhoria

Visualização


Regras de Nomenclatura

Baseline

  • Requisitos: siglacliente_siglaprojeto_BL_DOC_numerosequencial

    • ex: CLIENTEX_SISTEMAY_BL_DOC_04

    • obs: caso haja uma revisão da baseline, pode ser colocado um número decimal

      • ex: CLIENTEX_SISTEMAY_BL_DOC_04.1

  • Código-Fonte: X.Y.Z

  • Projeto de Melhoria: BASIS_BL_MELHORIA_numerosequencial

    • ex: BASIS_BL_MELHORIA_04

    • obs: caso haja uma revisão da baseline, pode ser colocado um número decimal

      • ex: BASIS_BL_MELHORIA_04.1

  • Organizacional: BASIS_BL_ORG_numerosequencial

    • ex: BASIS_BL_ORG_04

Commit

Os commits deverão obdecer a seguinte regra:

  • Assunto - XXX (Obrigatório)

  • (Linha em branco)

  • Corpo (Opcional)

Onde:

  • XXX - é o número da ocorrência no SGO;

  • Assunto - Um resumo do commit. Limitar esse campo a 72 caracteres. Para uma melhor clareza no preenchimento desse item, preencher complementando a frase "Quando aplicar esse commit vai…​" e informar o assunto do commit. Por exemplo, "Quando aplicar esse commit vai corrigir a cor do botão cancelar."

  • Corpo - Uma descrição detalhada do commit;

Somente os membros da equipe de gestão de configuração podem alterar meta-dados (propriedades no sistema de controle de versão) dos artefatos. No GIT deve-se informar a OS que esta trabalhando para a alteração do documento ao fazer o commit/push.


Fluxo Git

image

  • Desenvolvimento (TAREFA-XXXX)

    • O nome da branch deve conter o número da tarefa, por exemplo BASIS-1234

    • Essa branch será utilizada para o desenvolvimento de features específicas;

    • A cada nova feature, uma nova branch será criada a partir da branch master;

    • Ao finalizar o desenvolvimento, o merge deve ser feito para a master;

  • Teste (master)

    • Nessa branch, deverá ser mesclado o código das branches de desenvolvimento;

    • Ao finalizar o desenvolvimento, o merge para a branch de homologação deverá ser realizado e uma tag deverá ser criada;

  • Homologação (homologacao)

    • A correção dos bugs encontrados na fase de homologação deverá ser realizada na própria branch;

    • Ao finalizar a homologação, o merge para a branch de desenvolvimento deverá ser realizado;

  • Produção (producao)

    • Quando uma nova versão for para produção, o merge deverá ser realizado da tag homologada para a branch de produção;

    • Os artefatos que irão para produção deverão ser gerados a partir dessa branch;

  • Hotfix (hotfix)

    • Serve para corrigir algum erro em produção, uma branch hotfix deverá ser criada (se não existir) a partir da branch de produção;

    • Ao finalizar a correção, o merge deve ser feito para as branch de producao e master;


Rastreabilidade

Conforme definido no item Regras de Nomenclatura e no item Fluxo Git os commits podem ser relacionados à tarefa aberta para implementação da funcionalidade pelo número da ocorrência contido na mensagem de commit ou no nome da branch. Com isso é possível rastrear o requisito associado, no SGO, a partir da OS que originou a tarefa.

Ambientes

  • Integrantes Basis dos Projetos

    • Perfis: Analista de Requisitos, Analista de Qualidade, Analista de Negócio, Gerente de Projetos, Prototipador, Gerente de RH, Assistente de RH, Programador, Arquiteto de Software, DBA, Analista de Métricas, Analista de Testes, Auditor de Configuração, Analista de Configuração, EPG, Responsável por Medição e Análise

    • Acesso ao Repositório: TortoiseGIT (última versão disponível)

    • Elaboração e Consulta de Documentos: Suite Office 2010 ou superior

    • Acesso às Ferramentas On-Line: Navegador Web (Internet Explorer 8 ou superior ou Firefox 4 ou superior ou Chrome 11 ou superior)

    • Gestão de Tarefas: SGO (Jira)

    • Comunicação online Rocket.Chat, versão 2.8.0 ou superior, ou via web

  • Projetos de Desenvolvimento

    • Perfis: Arquiteto de Software, Programador, DBA

    • Projetos Java

      • IDE: IntelliJ IDEA Community Edition 14.1 ou superior, Eclipse for Java EE Developers v3.7.2 ou superior, com plugins subclipse e mylyn com conector JIRA

      • Ferramenta de build: Maven v3.0 ou superior

      • JDK: Java Devolpment Kit 1.6 ou superior

      • Hardware Configuração Mínima: RAM:8GB HD:128GB CPU: 2Ghz

    • Projetos .Net

      • IDE: Visual Studio 2010 com plugin AnkhSvn e Atlassian Connector for Visual Studio

      • SDK .Net: Versão definida no documento de arquitetura

      • Hardware Configuração Mínima: RAM:8GB HD:128GB CPU: 2Ghz

    • Projetos PHP

      • IDE: Eclipse for PHP v3.0.2 ou superior com plugins subclipse e mylyn com conector JIRA

      • Servidor web com PHP: WAMP v2.2 ou superior, XAMPP v1.8.2 ou superior

      • Hardware: Configuração Mínima: RAM:8GB HD:128GB CPU: 2Ghz

  • Suporte SGO

    • IDE: Eclipse for PHP v3.0.2 ou superior com plugins subclipse e mylyn com conector JIRA

    • Servidor web com PHP: WAMP v2.2 ou superior, XAMPP v1.8.2 ou superior

    • Hardware: Configuração Mínima: RAM:8GB HD:128GB CPU: 2Ghz

  • Grupo de Processos

    • Perfis: EPG, Analista de Qualidade, Responsável por Medição e Análise

    • Edição de Processos BizAgi 2.7 ou superior, AsciiDoc

    • Controle de Cronograma Project 2010 ou superior ou Open Project

    • Alta Maturidade MiniTab Versão 17.0 ou superior

    • Hadware: Configuração Mínima: RAM:8GB HD:450GB CPU: 2,5Ghz

  • Gerência de Configuração

    • Perfis: Desenvolvedor, Arquiteto de Software, Analista de Configuração, Auditor de Configuração.

    • Repositório de Gerência de Configuração Git versão 1.9.0 ou superior

    • Ferramentas: AsciiDoc, Vmware vSphere versão 5.1.0 ou superior, Filezilla (ultima versão disponível), Notepad++ (ultima versão disponível), CheckPoint Endpoint Security 5.4.1, Putty (ultima versão disponível), FortiClient SSLVPN versão 4.0. OCS Inventory V2.0.2

    • Hardware: Configuração Mínima: RAM:8GB HD:450GB CPU: 2,5Ghz

  • Revisão por Pares e Testes

    • Perfis: Desenvolvedor, Analista de Requisitos, Arquiteto de Software, Analista de Configuração, Auditor de Configuração.

    • Repositório de Gerência de Configuração Git versão 1.9.0 ou superior

    • Ferramentas: qTestes 3.0.10.7

    • Hardware: Configuração Mínima: RAM:8GB HD:450GB CPU: 2,5Ghz

  • Requisitos

    • Perfis: Analista de Requisitos, Analista de Negócios, Prototipador

    • Repositório de Gerência de Configuração Git versão 1.9.0 ou superior

    • Ferramentas: Enterprise Architect 10 ou superior, Pickles-0.13.1, IntelliJ IDEA Community Edition 14.1 ou superior, Balsamic Mockups 2.2 ou superior

    • Hardware: Configuração Mínima: RAM:8GB HD:450GB CPU: 2,5Ghz

  • Gerente de Projetos

    • Perfis: Gerente de Projetos

    • Alta Maturidade MiniTab Versão 17.0 ou superior e Crystal Ball 11 ou superior


Itens de Configuração

Projetos Basis

Tabela 18. ICs Projetos Basis
Obrigatoriedade Artefatos Controle de Versão Controle Formal Produto Entregável ao Cliente Baseline documentação Baseline fontes Quem elabora Publico-Alvo Forma de Envio Padrão de Nomes dos Artefatos Localização

Análise e Decisão

Arquiteto

Equipe do Projeto

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO

Ata de Reunião Kick-off

Equipe do Projeto

Cliente, Gerente de Projeto e Diretor

SGO (E-mail)

siglacliente_siglaprojeto_ATA_Kick-Off

SGO ou Documentação\2 - Comunicação\Atas, E-mails, etc.

Ata de Reunião de Repasse

Equipe do Projeto

Cliente, Gerente de Projeto e Diretor

SGO (E-mail)

siglacliente_siglaprojeto_ATA_repasse (ver obs. 6)

SGO ou Documentação\2 - Comunicação\Atas, E-mails, etc.

Atas de Reuniões - Gerais

Equipe do Projeto

Cliente e Gerente de Projeto

SGO (E-mail)

siglacliente_siglaprojeto_ATA_assunto_data (ver obs. 2 e 6)

SGO ou Documentação\2 - Comunicação\Atas, E-mails, etc.

Base de Riscos

Gerente de Projeto

Gerente de Projeto, Equipe de Projeto e Diretor

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO

Baselines

Analista de Configuração

Gerente de Projeto e Equipe do Projeto

Disponibilização em Repositório

siglacliente_siglaprojeto_BL_XXX (ver aba Nomenclatura e obs. 5)

Documentação → Tags ou Código Fonte → Tags

Caso de teste

Analista de Testes

Gerente de Projeto e Testador

Disponibilização em Repositório

siglacliente_siglaprojeto_CT_titulo (ver obs.1 e 6)

Documentação\5 - Testes\Caso de Teste

Caso de Uso

Analista de Requisitos

Cliente, Gerente de Projeto e Analista de Requisitos

Disponibilização em Repositório

siglacliente_siglaprojeto_UC[Num UC]_Funcionalidade

Documentação\3 - Requisitos\Especificações

Checklist de Auditoria de Configuração - Documentação

Auditor de Configuração

Auditor de Configuração e Gerente de Projeto

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO

Checklist de Garantia da Qualidade

Analista de Qualidade

Gerente de Projeto

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO

Checklist de Revisão Técnica

Revisor Técnico

Gerente de Projeto, Analista de Requisitos/ Arquiteto

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO

Diagramas

Analista de Requisitos e Arquiteto

Arquitetos, Analista de Requisitos e Programador

Disponibilização em Repositório

Nome livre dentro de uma subpasta em Análise e Design (ver obs. 4)

Documentação\4 - Análise e Design

Dicionário de Dados

DBA

Arquiteto e Programador

Disponibilização em Repositório

siglacliente_siglaprojeto_Documento_Dados

Documentação\4 - Análise e Design

Documento de Arquitetura e software

Arquiteto

Analista de Requisitos e Programador

Disponibilização em Repositório

siglacliente_siglaprojeto_DAS (ver obs. 4)

Documentação\4 - Análise Design

Documento de Visao

Analista de Requisitos

Gerente de Projeto, Cliente, Arquiteto e Programador

Disponibilização em Repositório

siglacliente_siglaprojeto_DV (ver obs. 6)

Documentação\3 - Requisitos

Especificação Suplementar (RNF)

Arquiteto

Gerente de Projeto, Cliente e Analista de Requisitos

Disponibilização em Repositório

siglacliente_siglaprojeto_ES_titulo (ver obs. 6)

Documentação\3 - Requisitos\Especificação Suplementar

Especificações Por Exemplo

Analista de Requisitos

Cliente, Gerente de Projeto, Analista de Requisitos

Disponibilização em Repositório

siglacliente_siglaprojeto_EPE[Num EPE]_Funcionalidade

Documentação\3 - Requisitos\Especificações

Evidência de Teste

Testador

Cliente, Gerente de Projetos e Testador

Disponibilização em Repositório

siglacliente_siglaprojeto_Evidência de Teste

Documentação\5 - Testes

Fontes

Programador

Analista de Configuração

Disponibilização em Repositório

Nome livre (ver obs. 5)

Código Fonte

Gravações

Equipe do Projeto

Gerente de Projetos e Analista de Requisitos

Disponibilização em Repositório

DDMMAA_Assunto

Gravações

Manual do Sistema

Arquiteto

Cliente

SGO, E-mail, Disponibilização em Repositório

siglacliente_siglaprojeto_Manual do Sistema

Documentação\6-Entrega

Mensagem de Interface

Analista de Requisitos

Gerente de Projetos, Analista de Requisitos

Disponibilização em Repositório

siglacliente_siglaprojeto_Mensagens de Interface

Documentação\3 - Requisitos\Mensagens de Interface

MER

DBA

Arquiteto, Programadores

Disponibilização em Repositório

siglacliente_siglaprojeto_MER

Documentação\4 - Análise e Design

Não Conformidades

Analista de Qualidade e Auditor de Configuração

Gerentes de Projeto, Analista de Qualidade, EPG

SGO (E-mail)

NA

SGO

Planilha de Contagem

Analista de Métricas

Gerente de Projetos

SGO (E-mail)

siglacliente_OSXXX_Contagem

SGO

Plano de Implantação

Arquiteto

Analista de Configuração

Disponibilização em Repositório

siglacliente_siglaprojeto_Plano de Implantação (ver obs. 6)

Documentação\6-Entrega

Plano de Medição

Gerente de Projeto

Equipe do Projeto

SGO (E-mail)

siglacliente_siglaprojeto_Plano de Medição

SGO - Ocorrência de Plano de Projeto

Plano de Projeto

Gerente de Projeto

Equipe do Projeto

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO - Ocorrência de Plano de Projeto

Plano de Teste

Analista de Testes

Gerente de Projeto e Testador

Disponibilização em Repositório

siglacliente_siglaprojeto_PLTST (ver obs. 3)

Documentação\5 - Testes

Proposta Técnica

Gerente de Projeto

Cliente

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

SGO - Aba "PT - Detalhamento da Solução" nas OSs

Protótipos

Analista de Requisitos

Cliente e Equipe do Projeto

Disponibilização em Repositório

siglacliente_siglaprojeto_[Número EPE]_título (ver obs. 4)

Documentação\3 - Requisitos\Protótipos

Regra de Negócio Geral

Analista de Requisitos

Cliente, Arquiteto, Programador

Disponibilização em Repositório

siglacliente_siglaprojeto_Regras_Negócio_Gerais (ver obs. 4)

Documentação\3 - Requisitos\Regra de Negócio Geral

Relatório de Monitoração

Gerente de Projeto

Diretor

SGO (E-mail)

Não se aplica (documento elaborado no SGO)

Comentários no Plano de Projeto no SGO

Relatório de Status

Gerente de Projeto

Diretor

Google Drive (E-mail)

<siglacliente>_<ano>_<mes>_Status_Report

Na subpasta do Contrato no Google Drive Status Report

Scripts

DBA

Arquiteto, Programador

Disponibilização em Repositório

Nome livre

Documentação\4 - Análise e Design

Qualquer outro documento relevante do projeto (Faturamento, Relatório de Despesas, Infraestrutura e etc) que não esteja definido acima e que o Gerente de Projeto queira armazenar no repositório

Equipe do Projeto

Equipe do Projeto

Disponibilização em Repositório

Nome livre

Documentação\8 - Outros

  • Obs 1: O titulo é obrigatório porém o seu uso é livre. Por exemplo: pode ser usado para lembrar o que é o REQ_1.

  • Obs 2: O assunto é livre e deve indicar o objetivo da reunião. Por exemplo: reunião com cliente, alta direção, equipe, lições aprendidas, encerramento.

  • Obs 3: A nomenclatura informada é apenas para arquivos .pdf.

  • Obs 4: Artefatos realizados no arquivo do Enterprise Architect ou Asciidoc/PlantUML.

  • Obs 5: Para baselines, a branch utilizada no repositório deve ser a Master.

  • Obs 6: Necessário apenas quando o cliente exigir a elaboração do artefato.

Projeto de Melhoria

Os itens de Melhoria são armazenados em um repositório próprio: Projeto de Melhoria

A pasta de Estatísticas é dividida por Baselines, sendo que cada nova Baseline terá uma pasta específica associada.

Tabela 19. ICs Melhoria
Artefatos Controle Formal Controle de Versão Publico-Alvo Forma de Envio Padrão de Nomes dos Artefatos Localização

Ata de Reunião

EPG

Repositório

[BASIS] Ata_Reuniao_aaaa-mm-dd

01.Comunicação

Relatório de Auditoria Informal

EPG

Repositório

[BASIS] Relatorio_Auditoria_Informal_Detalhes_Mes_Ano

01.Comunicação

Relatório de Análise de Gap

EPG

Repositório

[BASIS] Relatorio_Gap_Analysis_CMMI_ML3_Consolidado_Mes_Ano

01.Comunicação

Ata de Reunião de Kick-off

EPG

Repositório

BASIS_MELHORIA_Kick-Off

01.Comunicação

Publicação da Biblioteca de Ativos

Todos da Organização

E-mail, Repositório, SGO

Publicação Biblioteca de Ativos_ddmmaaaa

01.Comunicação ou SGO

Plano de Avaliação SCAMPI

EPG, Avaliador CMMI

E-mail e Repositório

Appraisal_Plan_Basis v.x.x

02.Planejamento

Ata de Reunião de Análise de Gap

EPG

Repositório

BASIS_MELHORIA_ATA_GAP ANALISE_aammdd

02.Planejamento

Cronograma de Melhoria

Todos da Organização

E-mail, Repositório, SGO

BASIS_MELHORIA_Cronograma

02.Planejamento ou SGO

Plano de Projeto de Melhoria

Todos da Organização

E-mail e Repositório

BASIS_MELHORIA_PP

02.Planejamento

Comprometimento com Projeto de Melhoria

EPG

Repositório

Comprometimento com Projeto de Melhoria

04.Implementação

MPSBr - F Declaração Avaliação

EPG

Repositório

MPSBr - F Declaração Avaliação BASIS ddmmaa

04.Implementação

MPSBr - Press Release Avaliação

EPG

Repositório

MPSBr - Press Release Avaliação ddmmaa

04.Implementação

MPSBr - Resultado da Avaliacao

EPG

Repositório

MPSBr - Resultado da Avaliacao

04.Implementação

Planejamento Auditoria da Qualidade

EPG

Repositório

Planejamento Auditoria da Qualidade - Mês

04.Implementação

Basis Tecnologia da Informação - SCAMPI B

EPG, Avaliadores CMMI

Repositório e Dropbox

Basis Tecnologia da InformaçãoSCAMPI_B

04.Implementação

Relacao entre as SPs das PAs e as praticas do processo

Analista de Métrica e Diretor

Repositório

(BASIS) Relacao entre as SPs das PAs e as praticas do processo_CMMInivel

04.Implementação

Relatório Estatístico

EPG

Repositório

Relatorio_Estatistico_SXXXXXX_[Qualidade/Produtividade]

06. Estatisticas/Baseline XX

Análise de Causas Organizacional

EPG

SGO

Relatório de Análise das Causas

Tarefa de Análise de Causas

Resultado Análise Organizacional

EPG

Repositório

BaselineDesempenho_BASIS

06. Estatisticas/Baseline XX

Relatório Monte Carlo Organizacional

EPG

Repositório

Relatorio_Monte_Carlo

06. Estatisticas/Baseline XX

Resumo Baseline Organizacional

EPG

Repositório

Resumo_Baseline_XX

06. Estatisticas/Baseline XX

Laudo de Qualidade de Alta Maturidade

EPG

Repositório

Laudo_QA_Alta_Maturidade

06. Estatisticas/Baseline XX

Análise de Causas do Projeto

EPG

SGO

Relatório de Análise das Causas

Tarefa de Análise de Causas

Relatório Monte Carlo do Projeto

EPG

Repositório

PROJETO_Relatorio_Monte_Carlo

06. Estatisticas/Baseline XX/Projetos/PROJETO

Relatório Estatístico do Projeto

EPG

Repositório

PROJETO_Relatorio_Estatistico_SXXXXXX_[Qualidade/Produtividade]

06. Estatisticas/Baseline XX/Projetos/PROJETO

Projetos de Análise de Produtividade e Qualidade do Projeto

EPG

Repositório

PROJETO_SX_[DISCIPLINA]_[QUALIDADE/PRODUTIVIDADE]

06. Estatisticas/Baseline XX/Projetos/PROJETO/Dados da Analise

Análise Simulação Monte Carlo

EPG

Repositório

Analise_Simulacao_Monte_Carlo

06. Estatisticas/Baseline XX

Lista de Profissionais

EPG

Repositório

CMMI - Profissional - Função - Meta (Sistema de Gestão de Ocorrências)

06. Estatisticas/Baseline XX/Relatorios SGO

Dados de desempenho das Tarefas, separadas por subgrupo

EPG

Repositório

CMMI - SX_XXX - Desempenho Tarefas Alta Maturidade (Sistema de Gestão de Ocorrências)

06. Estatisticas/Baseline XX/Relatorios SGO

Lista de Sistemas

EPG

Repositório

CMMI - Sistemas (Sistema de Gestão de Ocorrências)

06. Estatisticas/Baseline XX/Relatorios SGO

Projetos de Análise de Produtividade e Qualidade

EPG

Repositório

SX_[DISCIPLINA]_[QUALIDADE/PRODUTIVIDADE]

06. Estatisticas/Baseline XX/Dados da Analise

Biblioteca de Ativos

A partir da Baseline BASIS_BL_ORG_06, a Biblioteca é inteiramente elaborada em AsciiDoc e publicada no site http://foundation.basis.com.br.

Todos os itens da Biblioteca de Ativos têm controle formal e são obrigatórios.

Tabela 20. ICs Biblioteca de Ativos
Nome Gerência Endereço

Política da Basis

Diretoria

Definição de Processos

Descrição dos Ciclos de Vida da Organização

Gerencia de Qualidade

Definição de Processos

Estratégia de Gerência de Portfólio de Projetos

Diretoria

Definição de Processos

Planilha de Portfólio

Diretoria

(armazenada em Google Drive)

Objetivos e Ações Estratégicas

Diretoria

Melhoria de Processo

Template Caso de Uso

EPG

Requisitos e Análise

Template Documento de Visão

EPG

Requisitos e Análise

Template Especificação Suplementar

EPG

Requisitos e Análise

Geração de Documentos de Arquitetura de Software

Gerência de Arquitetura

Arquitetura

Plano Estratégico de Treinamento

Gerência de RH

Gerência de RH

Estratégia de Gerenciamento de RH

Gerência de RH

Gerência de RH

Quadro de Competências

Gerência de RH

Gerência de RH

Modelo de Avaliação de Eficácia de Treinamento

Gerência de RH

Gerência de RH

Modelo de Avaliação de Desempenho

Gerência de RH

Gerência de RH

Modelo de Lista de Presença

Gerência de RH

Gerência de RH

Modelo de planilha de contagem SISP 1

Gerência de Qualidade

Medição

Modelo de planilha de contagem SISP 2

Gerência de Qualidade

Medição

Base de Medição e Análise Organizacional

Gerência de Qualidade

Medição

Modelo de Relatório Estatístico

Gerência de Qualidade

Medição

Guia de Gerenciamento de Riscos

EPG

Gerência de Projetos

Orientação das Equipes de Trabalho

EPG

Gerência de Projetos

Base de Riscos

EPG

Gerência de Projetos

Template Relatório Monitoramento

EPG

Gerência de Projetos

Template Ata Kick-off / Planning

EPG

Gerência de Projetos

Template de Controle Financeiro

EPG

Gerência de Projetos

Template de Relatório de Status

EPG

Gerência de Projetos

Checagem Automática de Seguimento dos Processos

Gerência de Qualidade

Qualidade

Checklist de Auditoria de Biblioteca de Ativos

Gerência de Qualidade

Qualidade

Checklist de Auditoria de Ativos Organizacionais

Gerência de Qualidade

Qualidade

Template Checklist de Alta Maturidade

Gerência de Qualidade

Qualidade

Estratégia de backup

Gerência de Configuração

Gerência de Configuração

Estratégia de Verificação, Validação e Integração

Gerência de Configuração

Gerência de Configuração

Guia de Gerência de Configuração

Gerência de Configuração

Gerência de Configuração

Manual Clone e Commit no Git

Gerência de Configuração

Gerência de Configuração

Manual Criação de Repositório

Gerência de Configuração

Gerência de Configuração

Manual Instalação Inventário

Gerência de Configuração

Gerência de Configuração

Checklist de Auditoria de Ativos Organizacionais

Gerência de Configuração

Gerência de Configuração

Estratégia de Reutilização

Gerência de Arquitetura

Base de Reutilização

Template de Avaliação de Ativos Reutilizáveis

Gerência de Arquitetura

Base de Reutilização

Template de Registro de Ativos Reutilizáveis

Gerência de Arquitetura

Base de Reutilização

Portal de Processos FOUNDATION

EPG

Portal de Processos

Ativos de Treinamento

Tabela 21. ICs Ativos Treinamento
Obrigatoriedade Nome Local de Armazenamento Visibilidade

Lista de presença

SGO - Tarefa RH Treinamento

RH, Gerentes

Avaliação de Efetividade

SGO - Tarefa RH Treinamento

RH, Gerentes

Certificado de Participação

SGO - Tarefa RH Treinamento e do funcionário

RH, Gerentes e Funcionário

Quadro de Competências

Foundation

Todos


Histórico de Revisões

Tabela 22. Histórico de Revisões
Data Versão Autor Revisor Observação

7/10/2014

1.0

Marcelle Mirsky

Miguel Negrelli

Versão inicial

30/12/2014

1.1

Dyogo Ellyson

Guilherme Peres

-

04/02/2015

1.2

Leandro Rodrigues

Guilherme Peres

-

14/04/2015

1.3

Marcelle Mirsky

Miguel Negrelli

Inserção das diretrizes definidas na política rganizacional

22/05/2015

2.0

Marcelle Mirsky

Guilherme Peres

Alteração para refletir todas as melhorias provenientes do SCAMPI B

08/05/2015

2.1

Marcelle Mirsky

Guilherme Peres

Alteração para refletir os ajustes apontados na auditoria de Baseline BASIS_BL_ORG_04 (Ajustes nos Ics da Biblioteca de Ativos)

23/06/2015

2.2

Marcelle Mirsky

Guilherme Peres

Preenchimento das colunas "Publico-Alvo" e "Forma de Envio"

25/06/2015

2.3

Guilherme Peres

Marcelle Mirsky

Pequenas alterações para organização das Baselines em acordo com as auditorias

07/07/2015

2.4

Marcelle Mirsky

Guilherme Peres

Alterações para deixar mais claro quais artefatos tem controle formal. Retirada de artefatos que não deveriam estar no documento.Alinhamento dos ambiente com os papeis organizacionais

29/07/2015

2.5

Guilherme Peres

Marcelle Mirsky

Alterações nas Permissões de Acessos, incluindo repositórios diferentes e retirando permissões por pasta (não existem no Git), mais pequenas alterações

11/08/2017

2.6

Guilherme Peres

Cédric Lamalle

Inclusão de ferramentas de Alta Maturidade

22/09/2017

2.7

Gabriel Feitosa

Guilherme Peres

Alteração na nomenclatura do commit nos repositórios git, da baseline de código-fonte, retirada da baseline organizacional, aumento de memória de máquina da equipe, adição do Fluxo Git.

09/03/2018

2.8

Guilherme Peres

Cédric Lamalle

Revisão e exemplificação das tags de Baseline.

21/05/2018

2.9

Guilherme Peres

Cédric Lamalle

Revisão dos ICs de projetos e adição de decimais às tags de Baseline.

07/06/2018

3.0

Guilherme Peres

Cédric Lamalle

Conversão para o formato asciidoc, ajustes nos itens de configuração e permissões relevantes.

20/06/2018

3.1

Guilherme Peres

Cédric Lamalle

Adição de tabela de Ativos de Treinamento, e pequenas formatações nas demais tabelas.

22/08/2018

3.2

Guilherme Peres

Cédric Lamalle

Adição de estatísticas de Melhoria, mais ativos organizacionais, regras de nomenclatura e atualização do Fluxo Git.

06/09/2018

3.3

Guilherme Peres

Cédric Lamalle

Novos ativos organizacionais.



Manual Clone e Commit no Git

Versão do documento: 3.0, 04/11/2020

Introdução

Este documento tem como objetivo orientar todos os colaboradores sobre o uso correto dos repositórios Git, bem como das ferramentas associadas.

Como efetuar o Clone

Um clone, no Git, é a replicação inicial de um repositório remoto para uma pasta no computador pessoal, semelhante a um SVN Checkout. Inicialmente, acessar o Gitlab, repositório interno da Basis: https://gitlab.basis.com.br/. O login será realizado através do SSO Basis, usando as mesmas credenciais do SGO.

sso login
Figura 1. Tela de login do SSO

Conforme a figura acima, o usuário e a senha da rede devem ser digitados.

Ao entrar, a tela inicial é apresentada. Nela, é possível verificar projetos aos quais se tem acesso, bem como os grupos que abrangem tais projetos.

gitlab
Figura 2. Tela inicial do Gitlab

É possível pesquisar o repositório do qual se deseja fazer um clone na caixa de pesquisa no canto superior direito da tela. Ou, se preferir, usar os menus de Projetos ou Grupos, no canto superior esquerdo.

gitlab busca
Figura 3. Busca no Gitlab

Se o repositório não aparecer logo na busca inicial, ao pressionar Enter ou selecionar a caixa "em todo o Gitlab", o sistema apresentará uma tela mais completa com todos os resultados encontrados, bem como a possibilidade de pesquisar em grupos e projetos específicos.

gitlab busca avancada
Figura 4. Busca avançada no Gitlab

Ao selecionar um repositório, serão apresentados os arquivos e pastas de sua raiz, de forma que se pode explorar e visualizar detalhes dos mesmos:

gitlab repositorio
Figura 5. Listagem do Repositório

Para obter o endereço de clone, basta clicar no botão destacado Clonar, no canto direito, atentando para a seleção do tipo de clone, que pode ser HTTPS ou SSH. Para esta seção, será usado o clone via HTTPS. Clicando no ícone de prancheta ao lado do link, a URL será copiada.

gitlab clone
Figura 6. Endereço para clonar

Instalação e configuração do TortoiseGit

Baixando e instalando o TortoiseGit

O software TortoiseGit é uma de várias possíveis interfaces gráficas para Git no Windows. Ele pode ser baixado em sua versão mais recente no site: https://tortoisegit.org/download/. Para que o TortoiseGit funcione corretamente, faz-se necessária a instalação do Git for Windows, no site: http://git-scm.com/download/win. Apenas após a instalação do mesmo, o TortoiseGit deve ser instalado. Atenção à versão baixada (32-bit ou 64-bit), que deve obedecer às especificações da sua máquina para as duas instalações.

Usando TortoiseGit para o clone

Usando o Windows Explorer, na pasta onde se deseja manter o repositório local, clica-se com o botão direito. No menu de contexto, a opção "Git Clone" deve ser selecionada.

tortoisegit explorer menu
Figura 7. Menu contextual do Tortoise Git

Na janela que segue, no campo URL, deve ser colado o link de clone copiado da página de repositório do Gitlab. Se o link já estiver previamente copiado, deve aparecer automaticamente no campo.

tortoisegit clone
Figura 8. Clonando no Tortoise Git

Da primeira vez que se faz qualquer operação num repositório, o TortoiseGit exige informações de usuário. Basta colocar o nome de usuário e e-mail Basis, e clicar em OK.

tortoisegit config
Figura 9. Configurando o Git no Tortoise

O nome de usuário e a senha da rede devem ser digitados para validar o clone.

tortoisegit password
Figura 10. Inserindo senha no Tortoise Git

Os mesmos ficarão salvos no Gerenciador de Credenciais do Windows, caso precisem ser alterados.

windows gerenciador credenciais
Figura 11. Gerenciador de Credenciais Windows

Após a confirmação da senha, uma tela será exibida informando o progresso do clone.

tortoisegit cloning
Figura 12. Progesso do clone no Tortoise Git

Ao concluir, o repositório já estará localmente replicado na máquina do usuário.

Usando SSH

O Git oferece a opção de clone dos repositórios via HTTPS, como já foi apresentado, ou via SSH. O SSH costuma ser mais prático e menos limitado que o HTTPS, mas necessita de várias configurações locais e remotas para funcionar devidamente.

Inicialmente, deve ser gerada uma chave SSH localmente na sua máquina. Para tanto, vamos usar a interface padrão de console do Git for Windows, que também serve como alternativa ao próprio TortoiseGit, se for mais interessante usar comandos de linha diretamente em vez de uma interface gráfica.

Na máquina local, buscar, no menu Iniciar ou na barra de buscas do Windows, o programa Git Bash. A janela inicial será um console em preto:

gitbash
Figura 13. Git Bash

Digitar o seguinte, e pressionar Enter:

ssh-keygen -t rsa

O console vai pedir, na ordem:

  • Um caminho para os arquivos de chave. Apenas pressione Enter, e mantenha o padrão.

  • Uma senha para a chave. É opcional, mas dará mais segurança à mesma (obs.: com o preenchimento desse campo, será necessário inserir a mesma senha toda vez que for fazer alguma operação no repositório).

  • Escrever a senha outra vez. Deixar vazio se ficou vazio anteriormente. Ao final, a chave será gerada dentro do diretório selecionado na primeira entrada. Por padrão: C:\Users\[SeuUsuario]\.ssh

gitbash keygen
Figura 14. Gerando Chave SSH no Git Bash

Acessando o caminho da chave no Windows, devem haver dois arquivos: id_rsa e id_rsa.pub. O segundo deve ser aberto em qualquer editor de texto, para que se possa copiar a chave.

notepad id rsa.pub
Figura 15. Chave Pública RSA

Com a chave em mãos, entrar no Gitlab, e adentrar a seção "Configurações", no menu do canto superior direito.

gitlab config
Figura 16. Entrando nas configurações no Gitlab

Ali dentro, selecionar no menu esquerdo "Chaves SSH". Na seção que se abrir, colar a chave do id_rsa.pub, dar um título para identificar a chave, então clicar no botão "Adicionar Chave" abaixo.

gitlab add key
Figura 17. Adicionando Chave no Gitlab

Feita a adição com sucesso, a última coisa que precisa ser feita é uma alteração local do programa utilizado para SSH no TortoiseGit. No menu iniciar ou de busca, procurar por Settings, um programa que tenha o ícone do TortoiseGit. Entrando no mesmo, selecionar o item Network no menu esquerdo. Ali dentro em SSH, basta colocar o caminho do executável SSH do Git for Windows (por padrão, C:\Program Files\Git\usr\bin\ssh.exe, variando o início do caminho de acordo com a sua pasta de instalação) e clicar em OK.

tortoisegit ssh config
Figura 18. Configurando ssh no Tortoise Git

Feito isso, operações de repositório já podem ser realizadas usando SSH. Basta fazer o clone do repositório utilizando o link SSH que o mesmo fornece na página do repositório.

gitlab clone ssh
Figura 19. Endereço para clonar com SSH

Commit e Push

Sempre, antes que seja feita qualquer alteração de arquivos num repositório via Commit/Push, deve ser executado um Pull, que atualiza o repositório local com as últimas mudanças do repositório online.

tortoise git pull 1
Figura 20. Fazendo pull no Tortoise Git
tortoise git pull 2
Figura 21. Confirmando o pull no Tortoise Git

Vale lembrar o Git solicitará o nome e a senha de rede do usuário que sempre que houver uma requisição HTTPS ao repositório da Basis, seja clone, Pull ou Push. Se o clone for feito usando SSH, não será necessário.

Podemos dizer que um Pull é semelhante a um Update no SVN. É importante reparar, porém, que ao contrário do SVN Update, um Git Pull mescla a versão mais recente do repositório remoto (online) com a versão local do mesmo. Ou seja, mudanças feitas no repositório local não serão automaticamente sobrescritas pelo Pull, nem mesmo arquivos excluídos. Para recuperar originais, faz-se necessário realizar um Revert antes do commit.

Após a conclusão das alterações desejadas aos arquivos do repositório, incialmente deve ser feito o commit, que vai validar as mudanças, ainda apenas no repositório local. Deve-se clicar com o botão direito na pasta do repositório em que foram realizadas as modificações (não necessariamente a pasta raiz, porém preferencialmente, para evitar erros em potencial relativos a mudanças em outras pastas) e selecionar a opção Git Commit.

tortoisegit commit menu
Figura 22. Menu de commit do Tortoise Git

Para que o commit seja feito, é necessário relatar, na caixa de mensagem, quais alterações foram feitas e informar com qual ocorrência do SGO elas se relacionam. Ex:

Atualizar x, y e z - BASIS-1234
OBSERVAÇÕES IMPORTANTES SOBRE O COMMIT
  • Não usar ocorrências não relacionadas ao repositório em si, ou específicas de usuário, pois podem comprometer o commit e a leitura de dados por outros.

  • Atenção às regras de commit acima estabelecidas! Se o commit tiver uma mensagem sem referência a ocorrências do SGO ou o e-mail de usuário estiver incorreto, haverá erro no envio ao repositório remoto. Favor atentar aos detalhes do próprio commit.

  • Atenção aos arquivos listados! O que será enviado ao repositório pode não ser simplesmente o arquivo selecionado por clique, pois o commit do Git é feito sempre em cima do repositório inteiro. Se houver movido arquivos, ou separado pastas, por exemplo, é possível que o Git interprete que foram todos excluídos, e se estiverem marcados como tal na janela do commit, serão realmente apagados do repositório! Certifique-se sempre, na janela, de marcar apenas os arquivos que deseja alterar.

tortoisegit commit message
Figura 23. Inserindo mensagem de commit no Tortoise Git

Após a conclusão do commit, as mudanças estarão efetivadas, mas apenas no repositório local. Para enviá-las ao repositório remoto online, a opção Push deve ser selecionada logo em seguida.

tortoisegit push
Figura 24. Fazendo o push no Tortoise Git
tortoisegit push confirm
Figura 25. Confirmando o push no Tortoise Git

Após o usuário digitar seu nome e senha, se necessário, o Push será executado. Uma vez finalizado sem erro, as mudanças podem ser conferidas no site do Repositório Gitlab Basis.

Gerando Tags

Ao finalizar uma versão de código-fonte, ou finalizar um requisito específico, faz-se necessária a criação de tags nos repositórios para representar a baseline relativa àquela versão. É bastante simples fazer isso utilizando TortoiseGit.

Levando em conta que o commit que será marcado como tag já foi realizado, clicar com o botão direito na pasta do repositório em questão e selecionar TortoiseGit > Show log.

tortoisegit tag menu
Figura 26. Abrindo o log de commits no Tortoise Git

A janela que segue lista todos os commits realizados naquele repositório. A tag deve ser criada no commit específico que finalizou o requisito ou versão em questão. Clicar nele com o botão direito e selecionar "Create Tag at this version".

tortoisegit select commit
Figura 27. Selecionando o commit para geração de Tags

Na janela que se abre, entrar com o nome da versão/baseline em questão, seguindo os padrões estabelecidos no Guia de Gerência de Configuração, que estabelecem nomes diferentes para código-fonte e documentação, e atentando às versões já existentes no repositório, que podem ser verificadas na combo Tag do item Base On, ou no próprio repositório online no Gitlab. Atentar à marcação original, que deve ser o commit em questão.

tortoisegit create tag
Figura 28. Criando tag no Tortoise Git

Uma vez que a tag esteja criada, aparecendo em amarelo na janela do Git Log, deve ser feito um novo push, dessa vez especificando que as tags devem ser incluídas.

tortoisegit push tags
Figura 29. Fazendo o push das tags no Tortoise Git

Trabalhando com Forks

Certos usuários do Gitlab têm o acesso direto aos repositórios dos sistemas limitado a apenas leitura. Para que possam fazer suas próprias alterações no código, é necessário que façam um fork, que vai gerar uma cópia do repositório em questão, para que eventualmente seja mesclado por um representante da equipe (revisor técnico), seguindo o ciclo da imagem:

image
Figura 30. Ciclo Fork

Criando Fork

Dentro da página no Gitlab do repositório que se deseja copiar, clicar em Fork, no canto superior direito.

gitlab fork criar
Figura 31. Fork Gitlab

Selecionar como namespace o próprio nome de usuário, apresentado por padrão na página.

gitlab fork criacao
Figura 32. Criação do Fork

O repositório será criado e toda a estrutura de commits passará por uma importação. Uma vez finalizada, o repositório apresentará a mesma exata estrutura que o original. Desse ponto em diante, as ações de clone e push seguirão os mesmos princípios já apresentados.

Merge do Fork

Para que o código atualizado no fork seja replicado no repositório original, é necessário que seja aberto um merge request a partir do fork, apontando para a branch do repositório original. Esse merge request precisa ser aberto por um usuário que tenha acesso de escrita no repositório original, e é necessário que haja mais de um commit para o merge, pois será realizado um git squash. Caso seja aberto pelo próprio dono do Fork, que possui acesso somente leitura ao original, ou caso possua apenas um único commit, será fechado imediatamente pelo próprio sistema.

Na tela do repositório fork, no menu esquerdo, clicar em "Merge Requests".

gitlab merge request
Figura 33. Merge Requests

Dentro da tela, haverá um botão "Novo Merge Request". Selecionando o mesmo, será aberta uma nova tela para seleção de quais branches e repositórios servirão como origem e destino. Para origem ("Source Branch"), selecionar o seu fork e a branch onde se trabalhou. Para destino, selecionar o repositório original, e a branch do mesmo onde o merge deverá ser feito. Clicar em "Compare branches and continue".

gitlab merge novo
Figura 34. Novo Merge Request

Na tela que se segue, escrever um título para o seu merge request, preferencialmente incluindo a ocorrência relativa aos commits em questão para que esteja na mensagem de squash. Adicionar também uma descrição, que será unida ao template de MR da Basis, quando aplicável. No campo Assignee, apontar um usuário responsável pela aprovação do MR, caso necessário. A opção "Delete source branch when merge request is accepted" apagará a branch original do fork assim que houver o merge de fato. E a opção "Squash commits when merge request is accepted" será marcada automaticamente, mesmo que seja desmarcada nesta tela.

gitlab merge criando
Figura 35. Tela de criação do Merge Request

Uma vez criado, o merge request será listado no menu de Merge Requests do repositório original.

gitlab merge criado
Figura 36. Merge Request criado

Também será criado um link para acessar o merge request na ocorrência do SGO mencionada pelo mesmo.

gitlab merge sgo
Figura 37. Merge Request no SGO

Quando aprovado e selecionada a opção Merge, será realizado um commit de squash combinando os commits do repositório de fork, mais um commit de merge mesclando os dois repositórios. O código então será disponibilizado na branch do repositório original. Se houver algum problema no merge ou na criação do próprio merge request, o próprio sistema informará em mensagem.

Atualizando o Fork

Quando o fork se encontra atrasado em relação ao repositório original, é possível atualizá-lo em seu repositório fork clonado localmente. Para isso, é necessário inicialmente adicionar o repositório original como um novo remote caso não exista, executando no seu repositório local o seguinte comando:

git remote add upstream endereco_repositorio_original.git

Atualiza-se então esse remote "upstream" usando um fetch:

git fetch upstream

Para sincronizar de fato seus arquivos locais com os do repositório original, realiza-se um merge do seu repositório local, usando como base a branch requisitada do original (por padrão, "master"; alterar de acordo):

git merge upstream/master

Por fim, para atualizar o repositório no Gitlab, realiza-se o push padrão:

git push origin sua_branch

Lidando com Problemas

Push retorna erro

Verifique, antes de tudo, se seu repositório local está atualizado. Diferente do SVN, não basta que apenas a pasta específica em que se está editando esteja devidamente atualizada; o repositório inteiro deve estar em dia. Realize sempre um Pull antes de fazer quaisquer modificações.

Se o repositório não estava atualizado, mas o commit foi feito ainda assim, realize um Pull de todo modo. Pode ser que não haja conflitos de arquivos modificados. Se for o caso, o Pull não retornará erros, não haverá ícones de conflito nas pastas, e o seu Push pode ser realizado diretamente em seguida (sem o commit, nesse caso, pois este já havia sido feito).

Entretanto, se houver conflitos, cabe verificar com a sua equipe se os arquivos em questão foram modificados. O próprio Log do Git deve retornar informações sobre quais foram as últimas modificações sobre o determinado arquivo, o que pode ser verificado clicando sobre o mesmo com o botão direito e selecionando, sob o menu do TortoiseGit, Show Log.

tortoisegit showlog menu
Figura 38. Menu Show Log do Tortoise Git

A janela seguinte terá informações de quais foram os últimos commits, e quem os realizou, para devida informação e discussão.

tortoisegit log messages
Figura 39. Log Messages no Tortoise Git

Uma vez que se tenha certeza que o arquivo existente no seu repositório local é o mais atualizado, deve-se selecionar, no menu do TortoiseGit na pasta, a opção "Resolve".

tortoisegit resolve menu
Figura 40. Resolvendo conflitos no Tortoise Git

Marca-se então os arquivos atualizados, confirma, e então o Commit/Push pode ser realizado novamente com maior segurança.

Se ainda houver erro, experimente executar um Clean up, opção logo acima também representada. Execute também um novo Pull em seguida, para poder realizar o commit depois com segurança, e certifique-se de que todos os arquivos estão presentes no repositório local.

É importante também lembrar que é obrigatório incluir um número de ocorrência em todo e qualquer commit. Se este estiver faltando, o servidor retornará erro no Push
tortoisegit push error
Figura 41. Erro no push

Para corrigir essa situação, é necessário emendar à mensagem do commit uma ocorrência válida do SGO. Se apenas um commit errôneo foi realizado, basta selecionar Git Commit novamente no repositório em questão e selecionar a opção Ammend Last Commit na caixa logo abaixo da entrada de mensagem:

tortoisegit ammend commit
Figura 42. Ammend Commit no Tortoise Git

Em seguida, clicar em Ok e seguir com o mesmo modelo de Commit/Push apresentado mais acima.

Se houver mais de um commit na fila, no entanto, e até mesmo em outros casos de erro recorrente, será necessário fazer um Rebase, ou refazer os commits do zero antes de realizar o Push.

Quando um commit é feito no Git, ele se mantém na fila para subir ao repositório remoto num Push. Outros commits em cima do mesmo apenas se acumulam na fila. Ou seja, se o primeiro commit está errado, ele permanecerá sem enviar para o sistema até que seja removido ou editado na fila. Nesse caso, como existem vários commits errados na fila, a procedência possível seria editar ou eliminar a mesma.

Para o primeiro caso, o chamado Rebase, clicar com o botão direito na pasta do repositório com os commits problemáticos, e dentro do menu do TortoiseGit, selecionar a opção Rebase.

tortoisegit rebase menu
Figura 43. Menu Rebase no TortoiseGit

Na janela que segue, marcar inicialmente a opção Force Rebase, para que o sistema leve em conta todos os commits diferentes entre o repositório local e o remoto. Em seguida, clicar com o botão direito no commit que está com problemas (pode ser mais de um), e selecionar a opção Edit. Feito isso, iniciar o Rebase através do botão Start Rebase no rodapé da janela.

tortoisegit rebase window
Figura 44. Janela de rebase do TortoiseGit

Uma vez iniciado, se configurado corretamente, ele vai parar para edição da mensagem do(s) commit(s) em questão. Adicionar a ocorrência faltante, e clicar em Ammend, e em seguida em Done.

tortoisegit confirm rebase
Figura 45. Confirmando o rebase no TortoiseGit

Terminado o processo de Rebase, o Push já pode ser feito sem a necessidade de fazer um novo commit.

Para o caso de refazer a fila de commits do zero, primeiramente, é interessante fazer um backup dos arquivos alterados em tais commits, pois serão apagados ou substituídos pelas versões atualmente presentes no repositório remoto. Com o backup feito, selecionar na pasta raiz do repositório: TortoiseGit > Switch/Checkout. Na janela aberta, deixar exatamente como está na imagem abaixo, com todas as marcações (ênfase na branch remote/origin/master do primeiro menu, não é a master originalmente selecionada).

tortoisegit switch checkout
Figura 46. Switch/Checkout no TortoiseGit

Após clicar em OK, o repositório retornará ao seu estado anterior aos commits errôneos, exatamente igual ao repositório online. Com isso, os arquivos no backup podem ser copiados de volta para a pasta do repositório, e o commit pode ser refeito.

Se houver mais erros, entre em contato com a gerência de configuração.

Pull ou Clone retorna erro

É possível que o repositório em questão tenha nomes de arquivos ou caminhos muito grandes e, quando se realiza um Clone do mesmo num sistema Windows, ele não consiga abranger todo o caminho, retornando erros de Filename too long. Se for esse o caso, experimente realizar o Clone em outra pasta do seu sistema, preferencialmente alguma num caminho bem curto, como C:\git.

Outro erro possível teria a seguinte mensagem: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure. Nesse caso, é necessário atualizar os protocolos de conexão SSL na configuração do Git para uma versão mais segura. Execute o seguinte comando no Git Bash (para seu uso, consultar a seção de SSH):

git config --global http.sslVersion tlsv1.2

Após essa alteração, o Clone/Pull deve funcionar corretamente. Caso contrário, ou se o comando retornar algum erro, é recomendável reinstalar o Git numa versão mais recente.

Se tais soluções não funcionarem, ou se o erro for diferente, entre em contato com a gerência de configuração.

Histórico de Revisão

Tabela 23. Histórico de Revisões
Data Versão Autor Revisor Observação

06/01/2015

1.0

Dyogo Ellyson

Guilherme Peres

Versão inicial.

30/03/2015

1.1

Guilherme Peres

Dyogo Ellyson

Correções e adição de "solução de problemas".

15/05/2015

1.2

Guilherme Peres

Dyogo Ellyson

Atualizações de screenshots do Stash + correções e mais solução de problemas.

09/06/2015

1.3

Guilherme Peres

Dyogo Ellyson

Maior detalhamento de problemas e soluções + alteração do título

25/01/2018

2.0

Guilherme Peres

Cédric Lamalle

Alteração de texto para direcionamento ao Gogs no lugar do Stash, e adição de instruções para Rebase e SSH.

01/02/2018

2.1

Guilherme Peres

Cédric Lamalle

Adição de criação de tags.

06/09/2018

2.2

Guilherme Peres

Cédric Lamalle

Alteração da configuração SSL.

04/11/2020

3.0

Guilherme Peres

Cédric Lamalle

Substituição do Gogs por Gitlab e adição do guia de Fork.



Manual Criação de Novo Repositório

Versão do documento: 3.0, 04/11/2020

Introdução

Objetivo

Este documento objetiva apresentar todos os passos necessários para que os interessados em realizar a criação de um novo repositório sejam capazes de, seguindo as instruções, chegarem ao resultado esperado, de uma forma correta e padronizada.

Escopo

Considera-se no escopo deste documento abordar todas as etapas e procedimentos, que são necessários para a criação efetiva de um repositório remoto, englobando desde a conexão com a máquina até o commit inicial com a estrutura de pastas padrão de novos projetos da empresa.

Não Escopo

Está fora do limite definido como escopo deste tutorial as informações inerentes à configuração e conexão da VPN da Basis, bem como de acesso remoto aos servidores internos.

Definições, Acrônimos e Abreviações

  • Repositório Git: espaço, local ou remoto, para armazenamento de arquivos e controle dos mesmos, quanto à versão;

  • Commit: submeter o repositório às novas ações realizadas em suas pastas;

  • VPN: rede privada de comunicação, que busca assegurar a confidencialidade e integridade na troca de informações pela rede.

Criação do Repositório Git via SGO

Por padrão, a criação de repositórios deve ser feita de maneira automatizada a partir das ocorrências dos respectivos sistemas no SGO.

Acessar Ocorrência do Sistema

A princípio, nenhum repositório de sistema deve ser criado sem uma ocorrência do tipo Tarefa com essa requisição, encaminhada para o departamento de Configuração. Para iniciar a criação, basta entrar nessa ocorrência, e na aba Dados do Sistema, clicar na ocorrência repassada em "Ocorrências do Sistema".

image

Aplicar transição "Criar Repositórios"

Dentro da ocorrência do sistema, nas transições de fluxo de trabalho, selecionar a transição "Criar Repositórios".

image

Uma janela pop-up deve aparecer na ocorrência, com os dados do sistema e campos para especificar quais repositórios serão criados. Caso nada seja escrito, por padrão, e seguindo o Guia de Gerência de Configuração, são criados os repositórios "codigo_fonte", "documentacao" e "gravacoes". O nome do sistema é preposto ao nome de cada repositório, ou seja, caso se escreva "backend", o nome do repositório será "sistema_backend".

Os repositórios por padrão são criados usando a estrutura padrão estabelecida para cada tipo de repositório, tendo um commit inicial apropriado. Entretanto, caso o repositório precise ser migrado de algum cliente e o projeto precise ser criado vazio, basta marcar o campo "Repositórios Migrados do Cliente". Todos serão criados sem qualquer commit, ficando a responsabilidade de popular o repositório para quem for importar o projeto do cliente.

image

A transição desencadeará as seguintes ações via webhook:

  • Criação do grupo no Gitlab relativo ao próprio contrato, caso não exista;

  • Criação do grupo relativo ao sistema no AD Basis, caso não exista;

  • Criação dos repositórios dentro do grupo;

  • Associação dos repositórios à ocorrência do SGO e ao grupo do AD, via aplicação de custom attributes no repositório;

  • Commits iniciais para cada tipo de repositório (caso o campo "Repositórios Migrados do Cliente" não esteja marcado);

  • Criação de hooks nas pastas dos repositórios para filtrar os commits realizados no mesmo.

Finalizada a transição, os repositórios serão listados ao fundo aba Cadastro do Sistema, juntamente ao grupo relacionado no AD.

image

Aplicar transição "Associar Usuários a Repos"

Caso também exista, requisitado via tarefa no SGO, um pedido para associar usuários específicos aos repositórios, é necessário realizar outra transição. Dentro da ocorrência do sistema, nas transições de fluxo de trabalho, selecionar a transição "Associar Usuários a Repos".

image

A janela da transição apresentará dois campos para preenchimento, sendo um para usuários que terão acesso de escrita e outro que terá usuários cujo acesso será de somente leitura. Preencher com o nome de usuário de cada um, separado com vírgulas (o próprio sistema auxilia auto-completando nomes), e realizar a transição.

image

Realizado este passo, os usuários serão associados ao grupo relativo ao sistema no AD Basis. Um serviço periódico de sincronização de usuários, executando em paralelo ao Gitlab, será responsável por associar esses usuários também aos repositórios do próprio Gitlab. O acesso, portanto, não é imediato, mas deve ser atualizado em menos de uma hora. A lista de usuários com acesso pode ser visualizada na seção Pessoas, à direita da ocorrência do sistema, no campo "Equipe Git".

image

Adicionalmente, existem grupos no AD cujos membros possuem acesso a todos os repositórios do cliente (“nomecliente_all” para escrita e “nomecliente_all_ro” para leitura). Caso haja requisição no SGO para acesso a todos os repositórios de determinado cliente, o acesso precisa ser dado diretamente nesses grupos, a partir do gerenciamento de usuários do próprio SGO ou do AD.

Criação do Repositório Git via Gitlab

Se, por alguma razão, não houver a possibilidade de criar o repositório diretamente pelo SGO, é possível também criar o mesmo pelo próprio Gitlab.

Conectar ao Repositório Gitlab

Na tela do Sistema de Gestão de Ocorrências (SGO) da Basis, acessar o menu no topo esquerdo da tela, e selecionar "Repositório Git", ou acessar diretamente o link https://gitlab.basis.com.br/. Se o login já estiver realizado via SSO no próprio SGO, o acesso será automático. Do contrário, a tela de login será apresentada. As credenciais de acesso são as mesmas do SGO.

sso login

Criar novo grupo

Na página inicial após o login, clicar em "Grupos" para visualizar os clientes disponíveis e selecionar o desejado que receberá o novo repositório. Caso seja um novo cliente, clicar no botão "Novo Grupo" acima dos existentes.

image

Entrar com a chave do cliente, atribuir um avatar e editar a URL se necessário. Vale constar que a chave por padrão é a mesma usada na alocação do contrato no SGO, e não pode conter espaços ou caracteres especiais. Além disso, o nível de visibilidade deve ser marcado como Privado.

image

Criar novo repositório

Na tela do grupo, no canto direito da tela, clicar em "Novo projeto".

image

Entre com o nome que o repositório receberá, seguindo o padrão:

  • Código: nomedosistema_codigo_fonte

  • Documentação: nomedosistema_documentacao

  • Gravações: nomedosistema_gravacoes

Vale constar que o nome não pode conter espaços ou caracteres especiais.

image

Uma vez criado, o projeto terá as configurações padrão do sistema aplicados a si. Salvo exceções especificadas pelos próprios gestores e clientes, não é necessário alterá-las. Contudo, essas mesmas configurações impedem que equipes possam fazer alterações nos repositórios se não houver uma branch inicial, portanto faz-se necessário criar um primeiro commit.

Commit inicial do repositório de código

Dentro do próprio Gitlab, é possível já criar um único arquivo de commit para base do repositório. No projeto vazio, clicar em Novo Arquivo.

image

Preencher o caminho do arquivo com o seguinte nome:

.gitlab/merge_request_templates/basis_template.md

Preencher o conteúdo do arquivo com o seguinte texto:

De acordo com a [Estratégia de Verificação, Validação e Integração](https://foundation.basis.com.br/gerencia_configuracao.html#estrat%C3%A9gia-de-verifica%C3%A7%C3%A3o-valida%C3%A7%C3%A3o-e-integra%C3%A7%C3%A3o) definida no Foundation, os seguintes itens de check-list devem ser validados para aceitação do Merge Request:

- [ ] `liquibase` Não usar SQL nas migrações
- [ ] `liquibase` Edição de changeset já aplicado
- [ ] `config` Níveis de logs nos arquivos de configuração globais
- [ ] `config` Configuração externalizada (vs fixa no código)
- [ ] `config` Dependências desnecessárias
- [ ] `qualidade` Nomenclatura REST - Uri Design
- [ ] `qualidade` Complexidade dos algoritmos
- [ ] `qualidade` Nomes das variáveis/métodos/classes
- [ ] `qualidade` Reinvenção de roda - classes Utils (usar commons, guava, lodash, ...)
- [ ] `qualidade` Código testável
- [ ] `qualidade` Pesquisa dentro de estrutura de repetição (Banco, WS, etc.)

Por fim, preencher o campo de mensagem de commit, substituindo a chave de ocorrência pela chave relativa à Tarefa de criação do repositório, ou sistema associado:

Criação do repositório com template de Merge Request. BASIS-XXXXX

image

Estando tudo de acordo, como na imagem, clicar em Commit abaixo. O arquivo estará então aplicado ao código, permitindo commits da equipe e merge requests seguindo o padrão Basis.

Criação da estrutura de pastas do repositório de documentação

A partir do Gitlab, clonar o novo repositório de documentação seguindo as instruções de como efetuar o Clone do Manual de Git.

Dentro da pasta local clonada do repositório vazio, colar e executar o arquivo: mkdirsgit.bat (ou mkdirsgit.sh caso o sistema seja Linux).

image

Se o script rodou corretamente, a pasta agora possui oito novas pastas na sua raiz. Apagar ou mover para fora o arquivo mkdirsgit.bat ou mkdirsgit.sh.

image

Clicar com o botão direito na pasta raiz do repositório e selecionar "Git commit → master…​".

image

Se surgir uma mensagem informando que o nome de usuário e E-mail precisam ser setados, clicar em Yes, preencher o formulário seguinte com seu nome de usuário e E-mail Basis, selecionar "Save as Global" e clicar em Ok.

image

Marcar todos os arquivos da lista (vários .gitignore para manutenção das pastas), comentar e executar o commit.

Mensagem de commit sugerida:

Criação da estrutura de pastas de acordo com o Guia de Gerência de Configuração. [CHAVE-OCORRÊNCIA]

image

Quando finalizar o commit, clicar em Push logo abaixo.

image

Clicar em OK, digitar sua senha e aguardar a finalização.

image

Ao terminar de enviar o push, o repositório estará configurado e já poderá receber os documentos do sistema.

Caso um commit ou push dê errado, faz-se necessário realizar um Pull para manter o repositório local atualizado e estável. Clicar com o botão direito na pasta raiz do repositório e selecionar "Git Sync…​".

image

Na janela resultante, selecionar Pull. Entrar com sua senha e aguardar a finalização.

image

Nessa janela, também é possível realizar commits e pushes, se for conveniente. Lembrando que, após o pull, o push deve ser executado novamente. Um novo commit não é necessário, a não ser que haja conflitos em arquivos do repositório que precisem ser resolvidos.

Concessão de acesso aos repositórios

Nos casos em que o repositório seja criado via SGO, os acessos serão concedidos pelo mesmo, como já orientado acima. Estando associado ao grupo no AD, o mesmo será concedido no Gitlab via serviço de sincronização periódico.

Alternativamente, caso não haja associação com o SGO ou com grupos no AD, os acessos devem ser concedidos manualmente dentro do próprio Gitlab. No projeto ou no grupo, selecionar a seção Membros no menu esquerdo.

image

Na tela que segue, listar os nomes usuários que deverão ter acesso ao repositório, bem como qual tipo de acesso deverão ter, e clicar em Convidar. Para referência:

  • Maintainer: acesso de gerenciamento;

  • Developer: acesso de escrita;

  • Reporter: acesso de leitura;

image

Em todos os repositórios criados, deve ser realizada por padrão a liberação de acesso para os seguintes usuários:

  • Cédric Lamalle;

  • Miguel Negrelli;

  • Leonardo Lopes;

  • Arquitetos;

  • Gerente do Projeto;

  • Gerentes GCO.

Histórico de Revisões

Tabela 24. Histórico de Revisões
Data Versão Autor Revisor Observação

23/03/2014

1.0

Leandro Rodrigues

Mateus Augusto

Versão Inicial

30/07/2014

1.2

Leandro Rodrigues

Marcelle Mirsky

Adicionando informações sobre usuários básicos para os repositórios

19/01/2015

1.3

Guilherme Peres

Dyogo Ellyson

Adicionando informações sobre repositórios Git

14/04/2015

1.4

Guilherme Peres

Dyogo Ellyson

Alterando informações de plug-ins do Stash

25/05/2018

2.0

Guilherme Peres

Cédric Lamalle

Removendo seções relativas a SVN e Stash, adicionando Gogs e remanejando seções do documento

24/08/2018

2.1

Cédric Lamalle

Pedro Frazão

Ajustes no Histórico de Revisão

04/11/2020

3.0

Guilherme Peres

Cédric Lamalle

Adaptação para Gitlab e automação de criação via SGO



Manual de Instalação Inventário Basis

Versão do documento: 1.2, 28/05/2019

Introdução

Este documento tem como objetivo orientar todos os colaboradores na instalação do OCS Inventory, cliente do inventário Basis.

Configuração do nome da Máquina

Antes de fazer a instalação do cliente, para fins de padronização e organização, faz-se necessário trocar o nome do computador individual para o seu nome de usuário BASIS, nome.sobrenome trocando o . por -, por exemplo: nome-sobrenome. Isto vale para todos os sistemas operacionais.

Instalação no Windows

Troca do nome da máquina

image image

Conforme a figura acima, no Windows, clique com o botão direito em Computador, e selecione Propriedades.

Ao entrar, clique em “Alterar Configurações”.

image

Na tela de Propriedades do Sistema que surgir, selecione “Alterar”. Na janela seguinte, em que se lê “Nome do Computador”, coloque seu usuário BASIS como indicado acima. Clique em OK e reinicie o computador para que as configurações tenham efeito.

image image

Instalação e configuração do OCS Inventory

O software OCSinventory deve ser baixado em sua versão específica 2.0.5, seguindo o link: https://launchpad.net/ocsinventory-windows-agent/2.x/2.0.5/+download/OCSNG-Windows-Agent-2.0.5.zip.

image

Ao fim do download, extraia o arquivo OCSNG-Windows-Agent-2.0.5.zip, e clique duas vezes no arquivo OCS-NG-Windows-Agent-Setup.exe para abrir o instalador.

image

Prossiga com a instalação, avançando para as próximas páginas:

image

image

Na tela de configuração com o servidor, em Server URL, coloque o endereço https://inventario.basis.com.br/ocsinventory. Mantenha em branco todos os outros campos, desmarcando inclusive a checkbox “Validate certificates”.

image

Não há a necessidade de adicionar nada nas configurações de proxy. Na tela seguinte, em “Setup options…​”, marque a última checkbox “Immediately launch inventory (=/NOW)”.

image image

Ao concluir, os dados de sua máquina já estarão disponíveis para consulta no inventário.

Instalação no Linux

Atenção: todos os passos seguintes são executados no Terminal, usando comandos shell/bash.

  • Entrar em modo root:

sudo su
  • Renomear a máquina, editando os arquivos /etc/hostname e /etc/hosts e substituindo o nome atual do computador pelo nome de usuário BASIS, como indicado acima. Reiniciar a máquina em seguida.

  • Execute atualização e instalação dos componentes:

apt-get update
apt-get install debhelper libnet-ip-perl libnet-ssleay-perl libwww-perl libxml-simple-perl perl po-debconf quilt openssl
  • Habilitar o cpan digitando o comando:

cpan -i CPAN
(responder à pergunta digitando yes)
  • Habilitar módulos Perl necessários para a aplicação. Inserir o comando:

cpan -i Module::Install Digest::MD5 XML::Simple Net::IP Proc::Daemon Proc::PID::File Nvidia::ml Compress::Zlib LWP::Protocol::https Crypt::SSLeay Net::CUPS Net::SNMP Net::Netmask Net::Ping Nmap::Parser Data::UUID Parse::EDID
  • Fazer o download do inventário com:

wget https://github.com/OCSInventory-NG/UnixAgent/archive/master.zip
  • Será salvo um arquivo chamado master.zip. Para extraí-lo, insira:

unzip master.zip

O resultado será o diretório UnixAgent-master.

  • Acesse o diretório recém extraído:

cd UnixAgent-master
  • Dentro do diretório, rodar os seguintes comandos:

perl Makefile.PL
make
make install

Caso haja problemas com o make install, favor executar antes do mesmo:

 make install_site
 make install_vendor
  • Nas perguntas que o instalador apresenta, responder:

-> Do you want to configure the agent? >
 responder y
-> Where do you want to write the configuration file? >
 escolher a opção - 2 (/etc/ocsinventory-agent)
-> Do you want to create the directory /etc/ocsinventory-agent? >
 responder y
-> Should the old unix_agent settings be imported? >
 responder n
-> What is the address of your ocs server? >
 inserir a URL https://inventario.basis.com.br/ocsinventory
-> Do you need credential for the server? >
 responder n
-> Do you want to apply an administrative tag on this machine? >
 responder n
-> Do you want to install the cron task in /etc/cron.d >
 responder y
-> Where do you want the agent to store its files? >
 digitar /var/ocs-files
-> Do you want to create the /var/ocs-files directory? >
 responder y
-> Should I remove the old unix_agent? >
 responder y
-> Do you want to activate debug configuration option? >
 responder y
-> Do you want to use OCS inventory NG UNix Unified agent log file? >
 responder y
-> Specity log file path you wanto to use? >
 digitar /var/ocslogs
-> do you want disable SSL CA verification configuration option (not recommended)? >
 responder y
-> Do you want to set CA certificates file path? >
 responder n
-> Do you want to use OCS-Inventory software deployment feature? >
 responder n
-> Do you want to use OCS-Inventory SNMP xcans feature? >
 responder n
-> Do you want to send an inventory of this machine? >
 responder y

Caso apareça:

Lauching OCS Inventory NG Unix Unified agent...
-> Success !

A Instalação foi concluída e o primeiro relatório foi enviado. Para enviar relatórios manualmente, abra um terminal como root e insira o comando ocsinventory-agent.

Histórico de Revisões

Tabela 25. Histórico de Revisões

Data

Versão

Autor

Revisor

Observação

13/07/2015

1.0

Dyogo Ellyson

Guilherme Peres

Versão inicial

01/05/2018

1.1

Cédric Lamalle

Guilherme Peres

Adicionar instruções para instalação no Linux

28/05/2019

1.2

Jonathan Nascimento

Guilherme Peres

Atualização de instruções para instalação no Linux



Checklist de Auditoria de Ativos Organizacionais

Versão do documento: 1.0, 21/05/2018

Instruções (retirar essa seção no preenchimento real)

  • Para cada tarefa o revisor deverá copiar o conteúdo abaixo e colar no comentário da tarefa a ele atribuída.

  • Para cada critério avaliado preencher a coluna "Resultado" com: "Sim", "Não" ou "N/A".

  • Para cada resultado "Não se Aplica" justificar na coluna "Ações/Justificativa".

  • As tarefas não devem seguir no fluxo de desenvolvimento até que todos os itens sejam respondidos com "Sim".

Auditoria de Configuração Organizacional

Critério

Resultado

Ações/Justificativa

Todas as baselines geradas até o momento passaram pela auditoria de gerência de configuração?

A estrutura de diretórios do repositório está em conformidade com a estrutura de diretórios estabelecida no Guia de GC?

Os artefatos estão seguindo os padrões de nomenclatura estabelecidos no Guia de Gerência de Configuração?

Os artefatos estão armazenados nas pastas corretas do repositório de acordo com o estabelecido no Guia de Gerência de Configuração?

As permissões de acesso aos itens de configuração foram implementadas conforme estabelecido no Guia de Gerência de Configuração?

As baselines foram criadas seguindo a nomenclatura e local pré-estabelecidos?

A baseline foi gerada a partir da branch master?

O conteúdo da baseline está completo, de acordo com o estabelecido no Guia de Gerência de Configuração para a fase auditada?

O backup dos dados está sendo realizado conforme PolÍtica de Backup?

Alterações nos artefatos de controle formal estão sendo realizadas conforme o processo de mudança?

O histório de revisão dos documentos está sendo preenchido corretamente?

Histórico de Revisões

Tabela 26. Histórico de Revisões
Data Versão Autor Revisor Observação

21/05/2018

1.0

Cédric Lamalle

Guilherme Peres

Versão inicial




1. Exemplos: Arquillian, JUnit, Mockito.
Assistente virtual
Olá! Como posso te ajudar?