미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트
The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...
CircleCI는 프로젝트 관리자로서 매우 간단하게 구성할 수 있는 도구입니다. 하지만 구성 자체도 간단할까요? 물론 이것은 프로젝트의 복잡성에 따라 다릅니다. 저희의 경우(모노 리포지토리)는 예상보다 더 어려웠습니다.
Ruby on Rails 프로젝트의 구성은 복잡하지 않습니다. 문서 는 config.yml의 각 요소를 정확하게 설명합니다. 하지만 여기서는 circleci 도구에 초점을 맞추고자 합니다. 코드 깨끗하고 좋은 연습을 보장합니다.
루보캅에 대해 소개할 필요가 없을 것 같지만, 익숙하지 않은 분들을 위해 설명하자면 정적 루비 코드 분석기이자 포매터입니다. 이미 루보캅을 사용하고 계신다면 프로젝트설정 파일에 CircleCI를 추가하기만 하면 됩니다:
실행합니다:
이름: Rubocop
명령: 번들 실행 루보캅
ESLint는 ECMAScript에서 발견되는 패턴을 식별하고 보고하는 도구 또는 JavaScript 코드를 사용하여 코드의 일관성을 높이고 오류를 방지할 수 있습니다.
실행합니다:
이름: Eslint
명령: npm 실행 eslint
RSpec에서 테스트는 애플리케이션 코드를 검증하는 스크립트일 뿐만 아니라 애플리케이션이 어떻게 동작해야 하는지에 대한 자세한 설명을 간단한 영어로 표현한 것이기도 합니다:
실행합니다:
이름: RSpec
명령을 실행합니다: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
circleci tests split --split-by=타이밍)"
번들 실행 rspec
--형식 진행
--format RspecJunitFormatter
--out /tmp/test-results/rspec.xml
--format 진행
$TEST_FILES
- store_test_results:
경로 /tmp/test-results
RSpec의 경우, 테스트 결과를 이전에 생성한 카탈로그 /tmp/test-results의 rspec.xml 파일에 저장한 다음 다음을 사용하여 store테스트결과 키를 사용하여 주어진 카탈로그를 저장합니다. 이제 인사이트 탭에서 평균 컴파일 시간, 마지막 컴파일 시간 또는 성공률과 같은 정보에 액세스할 수 있습니다. 인사이트 탭에 대해 자세히 알아보세요. 여기. rspec.xml 파일을 "아티팩트"로 저장하려면 다음과 같이 store_artifacts 키를 설정 파일에 추가합니다.
store_artifacts:
경로 /tmp/test-results
Brakeman은 Ruby on Rails 애플리케이션의 보안 취약점을 검사하는 정적 분석 도구입니다. 기본적으로 Brakeman은 보안 경고가 감지되거나 스캔 오류가 발생하면 0이 아닌 종료 코드를 반환합니다. 따라서 저희는 심각한 오류에만 집중하고 경고는 해제했습니다.
run:
이름: 브레이크맨
명령: 번들 실행 brakeman --no-exit-on-warn
스캔 결과도 RSpec과 같은 방식으로 저장하려는 경우, 구성은 다음과 같으며 아티팩트 탭에서 파일에 액세스할 수 있습니다.
run:
이름: Brakeman
명령을 실행합니다: |
mkdir /tmp/brakeman
bundle exec brakeman --no-exit-on-warn -o /tmp/brakeman/output.json
- store_artifacts:
경로 /tmp/brakeman
RubyCritic은 Reek, Flay, Flog와 같은 정적 분석을 위한 보석을 사용하여 코드의 품질에 대한 보고서를 제공하는 도구입니다. 보고서에는 A/B/C/D/F 등급, 프로젝트의 모든 파일, 스캔하고 개선이 필요한 정확한 위치, 각 경고가 포함된 문서(예: 너무 많은 방법). 이 도구는 프로젝트에서 컨설턴트 역할을 합니다. 받은 보고서를 바탕으로 코드를 실제로 수정해야 하는지 여부에 대한 최종 결정은 개발자에게 달려 있습니다. circleci 구성에서는 보고서를 작성하고 github에 결과를 담은 특별 코멘트를 보내는 별도의 작업이 할당되어 있습니다.
루비크리틱의 기본 구성은 이전 버전과 다르지 않습니다.
실행합니다:
이름: Rubycritic
명령: 번들 실행 rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
- store_artifacts:
경로 /tmp/rubycritic
기본적으로 ./app를 스캔할 디렉토리, 결과를 저장할 위치 -p /tmp/rubycritic(rubycritic이 자동으로 보고서를 저장할 디렉토리를 생성함), 형식 -f json 및 옵션 -no- 브라우저에 대한 정보가 포함된 번들을 실행합니다. 우리는 또한 보석 서클CI_커버리지_리포터스캔 후 풀 리퀘스트에 보고서 링크와 스캔한 파일의 백분율 등급이 포함된 댓글을 github에 남깁니다.
위의 젬이 circleci와 함께 제대로 작동하려면 프로젝트에 추가하고 두 개의 키를 생성해야 합니다(그 중 하나는 circleci, 다른 하나는 github).
표준 설치:
gem 'circleci-coverage_reporter'
require 'circleci/coverage_reporter/rake_task' if ENV['CIRCLECI']
실행합니다:
이름: 루비크리틱 실행
명령: 번들 실행 루비크리틱 ./app -p /tmp/rubycritic -f json -f html --no-browser
store_artifacts:
경로 /tmp/rubycritic
run:
이름: 루비크리틱 알림
명령: 번들 실행 레이크 서클CI:리포트_범위
이제 두 개의 키를 생성해야 합니다:
커버리지_리포터_서클CI_토큰
프로젝트의 '설정' 섹션으로 이동합니다. '토큰 생성'을 선택한 후 '전체'로 범위를 변경하고 토큰 레이블을 입력합니다. API에 대한 토큰이 생성되면
커버리지_리포터_VCS_토큰
리포지토리에 대한 키 범위
키를 생성한 후에는 환경 변수에 키를 추가해야 합니다. 설정:
작업:
build:
도커:
- 이미지: circleci/ruby:2.5.1-node-browsers
환경:
번들 버전: 2.0.1
BUNDLE_PATH: /bundle
BUNDLE_JOBS: 4
RAILS_ENV: test
- image: circleci/postgres:10.1-alpine
환경
POSTGRES_USER: postgres
POSTGRES_DB: example_test
POSTGRES_PASSWORD: example
- 이미지: circleci/redis:4.0.8-alpine
working_directory: ~/insights
환경
TZ: 유럽/바르샤바
steps:
- checkout
- run:
이름: 번들러 버전 2.0.1 설치
명령: gem 설치 번들러 -v 2.0.1
- restore_cache:
키
- v1-ruby-dependencies-(( 체크섬 "Gemfile.lock" ))
- v1-ruby-dependencies-
- 실행합니다:
이름: 번들 설치
명령: 번들 검사 || 번들 설치
- save_cache:
키: v1-ruby-dependencies-(( 체크섬 "Gemfile.lock" ))
경로
- 벤더/번들
- restore_cache:
키
- v1-npm-dependencies-(( 체크섬 "package.json" ))
- v1-npm-dependencies-
- 실행합니다:
이름: Npm 설치
명령: npm 설치
- save_cache:
키: v1-npm-dependencies-(( 체크섬 "package.json" ))
경로
- ~/insights/node_modules
- 실행
이름: 데이터베이스 설정
명령 |
번들 실행 레이크 db:create
번들 실행 레이크 db:스키마:로드
- 실행
name: Rubocop
명령: 번들 실행 rubocop
- 실행
이름: Eslint
명령: npm 실행 eslint
- run:
name: RSpec
명령을 실행합니다: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/_spec.rb" |
circleci tests split --split-by=타이밍)"
번들 실행 rspec
--형식 진행
--format RspecJunitFormatter
--out /tmp/test-results/rspec.xml
--format 진행
$test_files
- 실행합니다:
이름: Brakeman
명령: 번들 실행 brakeman --no-exit-on-warn
- store_test_results:
경로 /tmp/test-results
루비크리틱:
도커:
- 이미지: circleci/ruby:2.5.1-node-browsers
환경:
번들 버전: 2.0.1
BUNDLE_PATH: /bundle
BUNDLE_JOBS: 4
RAILS_ENV: test
circle_artifacts: /tmp
working_directory: ~/insights
steps:
- checkout
- run:
name: 번들러 버전 2.0.1 설치
명령: gem 설치 번들러 -v 2.0.1
- restore_cache:
키
- v1-rubycritic-dependencies-(( 체크섬 "Gemfile.lock" ))
- v1-rubycritic-dependencies-
- 실행합니다:
이름: 번들 설치
명령: 번들 검사 || 번들 설치
- save_cache:
키: v1-rubycritic-dependencies-(( 체크섬 "Gemfile.lock" ))
경로
- 벤더/번들
- run:
이름: 루비크리틱 실행
명령: 번들 실행 rubycritic ./app -p /tmp/rubycritic -f json -f html --no-browser
- store_artifacts:
경로 /tmp/rubycritic
- run:
name: 루비크리틱 알림
명령: 번들 실행 레이크 서클CI:리포트_범위
워크플로우:
버전: 2
build_and_rubycritic:
jobs:
- build
- 루비크리틱:
requires:
- build
CircleCi에 사용 가능한 도커 이미지 목록
CircleCi
사용한 보석 또는 도구
자세히 읽어보세요: