The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2019-07-23
Desenvolvimento de software

CírculoCI

The Codest

Damian Watroba

Software Engineer

O CircleCI é uma ferramenta muito simples que está bem configurada como supervisor dos nossos projectos. Mas será que a configuração em si é simples? Isto, claro, depende da complexidade do projeto. No nosso caso (mono repo) acabou por ser mais difícil do que o esperado.

A configuração para Rubi sobre Carris projectos não é complicado, e o documentação descreve com exatidão cada elemento do config.yml. No entanto, eu gostaria de focar nas ferramentas circleci que são usadas para ajudar nós manter o código limpar e garantir boas práticas.

RUBOCOP

É provável que o RuboCope não precise de introdução, no entanto, para aqueles que não estão familiarizados com ele, é um analisador e formatador de código Ruby estático. Se você já usa rubocop no seu projetobasta adicionar CircleCI ao ficheiro de configuração:

 correr:
    nome: Rubocop
    comando: bundle exec rubocop

ESLINT

O ESLint é uma ferramenta para identificar e comunicar padrões encontrados no ECMAScript ou no JavaScript para tornar o código mais coerente e evitar erros.

correr:
    nome: Eslint
    comando: npm run eslint

RSPEC

No RSpec, os testes não são apenas scripts que verificam o código da aplicação, são também explicações detalhadas de como a aplicação se deve comportar, expressas em inglês simples:

correr:
    nome: RSpec
    comando: |
      mkdir /tmp/test-results
      TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
        circleci tests split --split-by=timings)"
      bundle exec rspec
        --formato progresso
        --formato RspecJunitFormatter
        --out /tmp/test-results/rspec.xml
        --formato progresso
        $TEST_FILES

- armazenar_resultados_do_teste:
    path: /tmp/test-results

No caso do RSpec, salvamos o resultado do teste em um catálogo criado anteriormente /tmp/test-results no arquivo rspec.xml e, em seguida, usando o lojatesteresultados armazenamos um determinado catálogo. Agora, o separador Informações dá-nos acesso a informações como o tempo médio de compilação, a hora da última compilação ou a taxa de sucesso. Pode ler mais sobre o separador Informações aqui. Se quisermos armazenar o ficheiro rspec.xml como um "artefacto", temos de adicionar a opção armazenar_artifactos no nosso ficheiro de configuração.

 armazenar_artifactos:
    path: /tmp/test-results

BRAKEMAN

O Brakeman é uma ferramenta de análise estática que verifica Ruby on Rails aplicações para vulnerabilidades de segurança. Por padrão, o Brakeman retornará um código de saída diferente de zero se forem detectados avisos de segurança ou se forem encontrados erros de verificação. Por isso, concentramo-nos apenas nos erros críticos e os avisos foram desactivados.

correr:
    nome: Brakeman
    comando: bundle exec brakeman --no-exit-on-warn

Se também quisermos armazenar o resultado da verificação da mesma forma que o RSpec, a nossa configuração será semelhante a esta e teremos acesso ao nosso ficheiro no separador Artefactos.

 correr:
    nome: Brakeman
    comando: |
      mkdir /tmp/brakeman
      bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json

- store_artifacts:
    path: /tmp/brakeman

RUBYCRITIC

RubyCritic é uma gem que usa gems para análise estática, como Reek, Flay e Flog, para fornecer um relatório sobre a qualidade do seu código. O relatório contém uma classificação A / B / C / D / F, todos os ficheiros do nosso projeto que queremos que sejam analisados e os locais exactos que precisam de ser melhorados, e documentação com cada alerta (ex: DemasiadosMétodos). Esta ferramenta funciona como um consultor no projeto. Com base no relatório recebido, a decisão final sobre se o nosso código precisa efetivamente de ser corrigido depende do programador. Na nossa configuração do circleci, é atribuído um trabalho separado que é responsável pela preparação do relatório e pelo envio de um comentário especial com o resultado no github.

A configuração básica do rubycritic não é diferente das anteriores.

 correr:
    nome: Rubycritic
    comando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

- store_artifacts:
    path: /tmp/rubycritic

Como padrão, percorremos o pacote com informações sobre qual diretório queremos escanear ./app, em que lugar queremos salvar o resultado -p /tmp/rubycritic (o rubycritic cria automaticamente um diretório no qual armazenaremos nosso relatório), em que formato -f json e a opção -no- browser. Também usamos a gem circleci-coverage_reporterque, após a verificação, coloca um comentário no github no nosso pull request com um link para o relatório e uma classificação percentual dos ficheiros verificados.

Rubi

Para que a gem acima funcione corretamente em conjunto com circleci, temos de a adicionar ao nosso projeto e gerar duas chaves (uma delas é circleci, a segunda é github).

Instalação standard:

  • Ficheiro Gemfile
    gem 'circleci-coverage_reporter'
  • Rakefile
    require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
  • .config.yml
 correr:
    nome: Executar o Rubycritic
    comando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser

 store_artifacts:
    path: /tmp/rubycritic

 executar:
    name: Rubycritic notification
    comando: bundle exec rake circleci:report_coverage

Agora temos de gerar duas chaves:

COVERAGE_REPORTER_CIRCLECI_TOKEN

Token da API

Secção "definições" do nosso projeto. Depois de selecionar "Create Token", altere o âmbito para "all" e preencha a etiqueta do Token. O token para a API será gerado depois de clicar em

COVERAGE_REPORTER_VCS_TOKEN

ficha

Âmbito da chave para o repositório

Depois de gerar as chaves, temos de as adicionar às nossas variáveis de ambiente em Definições:

variável de ambiente
adicionar variável

Exemplo de configuração:

trabalhos:
  construir:
    doca:
      - imagem: circleci/ruby:2.5.1-node-browsers
      ambiente:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: teste
    - imagem: circleci/postgres:10.1-alpine
      ambiente:
        POSTGRES_USER: postgres
        POSTGRES_DB: exemplo_teste
        POSTGRES_PASSWORD: exemplo
    - imagem: circleci/redis:4.0.8-alpine
    working_directory: ~/insights
    ambiente:
        TZ: Europa/Warsóvia
    passos:
      - checkout
      - executar:
          nome: Instalar o bundler versão 2.0.1
          comando: gem install bundler -v 2.0.1
      - restore_cache:
          chaves:
            - v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
            - v1-ruby-dependencies-
      - executar:
          nome: Bundle Install
          comando: bundle check || bundle install
      - save_cache:
          key: v1-ruby-dependencies-(( checksum "Gemfile.lock" ))
          caminhos:
            - vendor/bundle
      - restaurar_cache:
          chaves:
            - v1-npm-dependencies-(( checksum "package.json" ))
            - v1-npm-dependencies-
      - executar:
          nome: Npm Install
          comando: npm install
      - save_cache:
          key: v1-npm-dependencies-(( checksum "package.json" ))
          paths:
            - ~/insights/node_modules
      - executar:
        nome: Database setup
        comando: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - executar:
          nome: Rubocop
          comando: bundle exec rubocop
      - executar:
          nome: Eslint
          comando: npm run eslint
      - executar:
          nome: RSpec
          comando: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
              circleci tests split --split-by=timings)"
            bundle exec rspec
              --formato progresso
              --formato RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --formato progresso
              $TEST_FILES
      - executar:
          nome: Brakeman
          comando: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          path: /tmp/test-results
  rubycritic:
    docker:
      - imagem: circleci/ruby:2.5.1-node-browsers
        ambiente:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    working_directory: ~/insights
    passos:
      - checkout
      - executar:
          nome: Instalar bundler versão 2.0.1
          comando: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
            - v1-rubycritic-dependencies-
      - executar:
          nome: Bundle Install
          comando: bundle check || bundle install
      - save_cache:
          key: v1-rubycritic-dependencies-(( checksum "Gemfile.lock" ))
          caminhos:
            - vendor/bundle
      - run:
          name: Executar Rubycritic
          comando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - executar:
          name: Rubycritic notification
          comando: bundle exec rake circleci:report_coverage

fluxos de trabalho:
  versão: 2
  build_and_rubycritic:
    trabalhos:
      - construir
      - rubycritic:
          requer:
            - construir

Fontes:

  • Lista de imagens docker disponíveis para o CircleCi

    • Imagens Docker
  • CírculoCi

    • Configuração CircleCi

      • Exemplo de configuração
      • Recolher dados de teste
      • Utilizar o Insights
      • Armazenamento de artefactos de construção
  • Gemas ou ferramentas usadas

    • RuboCop

      • ESlint
      • RSpec
      • Guarda-freio
      • RubyCtritic
      • Relatório de cobertura do círculo

Ler mais:

  • Boas práticas da Codest para a construção de software: documentação do projeto
  • Como escrever um código bom e de qualidade?
  • Princípio aberto-fechado. Alguma vez terei de o usar?

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese