window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() CircleCI - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2019-07-23
Desarrollo de software

CircleCI

The Codest

Damian Watroba

Software Engineer

CircleCI es una herramienta muy sencilla que está bien configurada como supervisora de nuestros proyectos. Pero, ¿es sencilla la configuración en sí? Esto, por supuesto, depende de la complejidad del proyecto. En nuestro caso (mono repo) resultó ser más difícil de lo esperado.

La configuración para los proyectos Ruby on Rails no es complicada, y el documentación describe con precisión cada elemento del config.yml. Sin embargo, me gustaría centrarme en las herramientas circleci que se utilizan para ayudarnos a mantener el código limpiar y garantizar las buenas prácticas.

RUBOCOP

Es probable que RuboCope no necesite presentación, sin embargo, para aquellos que no estén familiarizados con él, se trata de un analizador y formateador estático de código Ruby. Si ya utilizas rubocop en tu proyectoBasta con añadir CircleCI al archivo de configuración:

 correr:
    nombre: Rubocop
    comando: bundle exec rubocop

ESLINT

ESLint es una herramienta para identificar y notificar patrones encontrados en los archivos ECMAScript o JavaScript para que el código sea más coherente y evitar errores.

correr:
    nombre: Eslint
    comando: npm run eslint

RSPEC

En RSpec, las pruebas no son sólo scripts que verifican el código de la aplicación, también son explicaciones detalladas de cómo debe comportarse la aplicación, expresadas en un inglés sencillo:

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

- store_test_results:
    path: /tmp/test-results

En el caso de RSpec, guardamos el resultado de la prueba en un catálogo creado previamente /tmp/test-results en el archivo rspec.xml, y luego usando el comando tiendapruebaresultados almacenamos un catálogo determinado. Ahora la pestaña Insights nos dará acceso a información como el tiempo medio de compilación, el tiempo de la última compilación o la tasa de éxito. Puedes leer más sobre la pestaña Insights aquí. Si queremos almacenar el archivo rspec.xml como un "artefacto" tenemos que añadir la propiedad almacenar_artifactos en nuestro archivo de configuración.

 almacenar_artifactos:
    path: /tmp/test-results

FRENADOR

Brakeman es una herramienta de análisis estático que comprueba las aplicaciones Ruby on Rails en busca de vulnerabilidades de seguridad. Por defecto, Brakeman devuelve un código de salida distinto de cero si se detectan advertencias de seguridad o errores de análisis. Por lo tanto, nos hemos centrado únicamente en los errores críticos y hemos desactivado las advertencias.

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

Si además queremos almacenar el resultado del escaneo de la misma forma que RSpec, nuestra configuración tendrá este aspecto, y tendremos acceso a nuestro fichero en la pestaña Artifacts.

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

- store_artifacts:
    path: /tmp/brakeman

RUBYCRITIC

RubyCritic es una gema que utiliza gemas de análisis estático, como Reek, Flay y Flog, para proporcionar un informe sobre la calidad de tu código. El informe contiene una calificación A / B / C / D / F, cada archivo en nuestro proyecto que queremos tener escaneado y lugares precisos que necesitan mejoras, y la documentación con cada alerta (por ejemplo: TooManyMethods). Esta herramienta actúa como consultor en el proyecto. En base al informe recibido, la decisión final sobre si realmente es necesario corregir nuestro código depende del desarrollador. En nuestra configuración de circleci, se asigna un trabajo independiente que se encarga de preparar el informe y enviar un comentario especial con el resultado en github.

La configuración básica de rubycritic no difiere de las anteriores.

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

- store_artifacts:
    path: /tmp/rubycritic

De forma estándar, ejecutamos el bundle con información sobre qué directorio queremos escanear ./app, en qué lugar queremos guardar el resultado -p /tmp/rubycritic (rubycritic crea automáticamente un directorio en el que almacenaremos nuestro informe), en qué formato -f json y la opción -no- browser. También utilizamos la gema círculoci-cobertura_reportero, que tras el escaneo, pone un comentario en github en nuestro pull request con un enlace al informe y una valoración porcentual de los archivos escaneados.

Ruby

Para que la gema anterior funcione correctamente junto con circleci, debemos añadirla a nuestro proyecto y generar dos claves (una de ellas es circleci, la segunda es github).

Instalación estándar:

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

 store_artifacts:
    path: /tmp/rubycritic

 run:
    name: Rubycritic notificación
    comando: bundle exec rake circleci:report_coverage

Ahora tenemos que generar dos claves:

COVERAGE_REPORTER_CIRCLECI_TOKEN

Token API

Sección 'settings' de nuestro proyecto. Después de elegir "Crear Token" cambiar el ámbito de "todos" y rellenar Token etiqueta. Token para API se generará después de hacer clic en

COVERAGE_REPORTER_VCS_TOKEN

ficha

Alcance de la clave de repo

Después de generar las claves, debemos añadirlas a nuestras variables de entorno en Ajustes:

variable de entorno
añadir variable

Ejemplo de configuración:

trabajos:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
      entorno:
        BUNDLER_VERSION: 2.0.1
        BUNDLE_PATH: /bundle
        BUNDLE_JOBS: 4
        RAILS_ENV: test
    - imagen: circleci/postgres:10.1-alpine
      entorno:
        POSTGRES_USUARIO: postgres
        POSTGRES_DB: ejemplo_prueba
        POSTGRES_PASSWORD: ejemplo
    - imagen: circleci/redis:4.0.8-alpine
    directorio_de_trabajo: ~/insights
    entorno:
        TZ: Europe/Warsaw
    pasos:
      - checkout
      - ejecutar:
          nombre: Install bundler version 2.0.1
          comando: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-ruby-dependencies-(( suma de comprobación "Gemfile.lock" ))
            - v1-ruby-dependencies-
      - run:
          nombre: Bundle Install
          comando: bundle check || bundle install
      - save_cache:
          key: v1-ruby-dependencies-(( suma de comprobación "Gemfile.lock" ))
          rutas:
            - vendor/bundle
      - restore_cache:
          claves:
            - v1-npm-dependencies-(( suma de comprobación "package.json" ))
            - v1-npm-dependencies-
      - ejecutar:
          nombre: Npm Install
          comando: npm install
      - save_cache:
          key: v1-npm-dependencies-(( checksum "package.json" ))
          rutas:
            - ~/insights/node_modules
      - run:
        nombre: Database setup
        comando: |
          bundle exec rake db:create
          bundle exec rake db:schema:load
      - ejecutar:
          name: Rubocop
          comando: bundle exec rubocop
      - run
          nombre: Eslint
          comando: npm run eslint
      - ejecutar
          name: RSpec
          comando: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
              circleci tests split --split-by=tiempos)"
            bundle exec rspec
              --format progress
              --format RspecJunitFormatter
              --out /tmp/test-results/rspec.xml
              --format progress
              $TEST_FILES
      - run:
          nombre: Brakeman
          comando: bundle exec brakeman --no-exit-on-warn
      - store_test_results:
          path: /tmp/test-results
  rubycritic:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        entorno:
          BUNDLER_VERSION: 2.0.1
          BUNDLE_PATH: /bundle
          BUNDLE_JOBS: 4
          RAILS_ENV: test
          CIRCLE_ARTIFACTS: /tmp
    directorio_de_trabajo: ~/insights
    pasos:
      - checkout
      - ejecutar:
          name: Instalar bundler versión 2.0.1
          comando: gem install bundler -v 2.0.1
      - restore_cache:
          keys:
            - v1-rubycritic-dependencies-(( suma de comprobación "Gemfile.lock" ))
            - v1-rubycritic-dependencies-
      - run:
          nombre: Bundle Install
          comando: bundle check || bundle install
      - save_cache:
          key: v1-rubycritic-dependencies-(( checksum "Gemfile.lock" )))
          rutas:
            - vendor/bundle
      - run:
          name: Ejecutar Rubycritic
          comando: bundle exec rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
      - store_artifacts:
          path: /tmp/rubycritic
      - run:
          name: Rubycritic notificación
          comando: bundle exec rake circleci:report_coverage

flujos de trabajo:
  version: 2
  build_and_rubycritic:
    trabajos:
      - build
      - rubycritic:
          requiere:
            - build

Fuentes:

  • Lista de imágenes Docker disponibles para CircleCi

    • Imágenes Docker
  • CircleCi

    • Configuración CircleCi

      • Ejemplo de configuración
      • Recopilar datos de las pruebas
      • Utilizar Insights
      • Almacenamiento de artefactos de compilación
  • Gemas o herramientas usadas

    • RuboCop

      • ESlint
      • RSpec
      • Frenador
      • RubyCtritic
      • Informe de cobertura circular

Más información:

  • Buenas prácticas de Codest para la creación de software: documentación del proyecto
  • ¿Cómo escribir un código bueno y de calidad?
  • Principio abierto-cerrado. ¿Tengo que usarlo alguna vez?

Artículos relacionados

Desarrollo de software

Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

EL MEJOR
Desarrollo de software

Las 10 mejores empresas de desarrollo de software de Letonia

Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

thecodest
Soluciones para empresas y escalas

Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

thecodest
Desarrollo de software

La guía definitiva para subcontratar en Polonia

El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

TheCodest
Soluciones para empresas y escalas

Guía completa de herramientas y técnicas de auditoría informática

Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

The Codest
Jakub Jakubowicz CTO y Cofundador

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

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

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

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