CircleCI config.yml 편지지 Rails 6/PostgreSQL/Rspec

11716 단어 CircleCIRails
orb와 최신 이미지를 사용한 버전 도 참조해 주십시오.

다음 페이지에 이전에 있던 샘플을 복사하여 개조한 것입니다(현재는 내용이 상당히 바뀌고 있습니다).
h tps : // / rc ぇ시. 이 m / cs / 2.0 /

config.yml
version: 2.1
orbs:
  ruby: circleci/[email protected] 

jobs:
  build:
    docker:
      - image: circleci/ruby:2.6.6-buster-node-browsers
        environment:
          RAILS_ENV: test
          PGHOST: 127.0.0.1
          PGUSER: circleci
          TZ: "/usr/share/zoneinfo/Asia/Tokyo"
      - image: circleci/postgres:11.7
        environment:
          POSTGRES_USER: circleci
          POSTGRES_DB: blog_rails6_test
          POSTGRES_HOST_AUTH_METHOD: trust # パスワードなし
          TZ: "/usr/share/zoneinfo/Asia/Tokyo"
    steps:
      - checkout
      - restore_cache:
          keys:
            - blog-bundle-v1-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
            - blog-bundle-v1-
      - run:
          name: Bundler and Yarn
          command: |
            gem install bundler -v '2.1.4' -N
            bundle -v
            bundle install --jobs=3 --retry=3 --path vendor/bundle
            yarn install
      - save_cache:
          paths:
            - ./vendor/bundle
            - ./node_modules
          key: blog-bundle-v1-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
      - run:
          name: DB Initializing
          command: |
            dockerize -wait tcp://localhost:5432 -timeout 1m
            bundle exec rake db:schema:load
      - run:
          name: rspec
          command: |
            bundle exec rspec --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format documentation
      - store_test_results:
          path: test_results

이하, 자신을 위한 해설.

orbs 무엇을 모른다. 나중에 조사한다. → 새로운 기사 orb와 최신 이미지를 사용한 버전 에.
orbs:
  ruby: circleci/[email protected] 

E2E 테스트(headless Chrome)를 사용하는 경우는, 「-node-browsers」를 선택하는 것.
      - image: circleci/ruby:2.6.6-buster-node-browsers

PostgreSQL을 패스워드 없이 사용하는 경우는 이 환경 변수가 필요.
          POSTGRES_HOST_AUTH_METHOD: trust # パスワードなし

Webpacker를 사용하는 경우 node_modules 캐시를 만듭니다. Gemfile.lock 이외에 yarn.lock 변경으로 업데이트됩니다.
      - restore_cache:
          keys:
            - blog-bundle-v1-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
            - blog-bundle-v1-
# 中略
      - save_cache:
          paths:
            - ./vendor/bundle
            - ./node_modules
          key: blog-bundle-v1-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}

Bundler 버전을 올릴 때 설치가 필요합니다.
            gem install bundler -v '2.1.4' -N

PostgreSQL이 일어날 때까지 기다린다. 정말 필요한지 확실하지 않습니다.
            dockerize -wait tcp://localhost:5432 -timeout 1m

RSpec JUnit Formatter 형식으로 로그를 출력하고 store_test_results로 저장합니다. 그러면 CircleCI 사이트에서 다음 링크에서 결과를 볼 수 있습니다.


      - run:
          name: rspec
          command: |
            bundle exec rspec --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format documentation
      - store_test_results:
          path: test_results

Gemfile에 RSpec JUnit Formatter를 넣어 둔다.
group :test do
# 略
  gem 'rspec_junit_formatter'
end

병렬 실행



parallelism에 숫자를 지정한 후,
jobs:
  build:
    parallelism: 2
circleci tests 명령을 포함하여 spec 파일을 분리합니다. circleci tests glob 에 건네주는 인수의 서식은, Ruby 의 Dir.glob 와 같다.
      - run:
          name: rspec
          command: |
            bundle exec rspec --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format documentation \
                              $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split)

특정 디렉토리를 제외하고 싶을 때는 다음과 같은 느낌으로.
      - run:
          name: rspec
          command: |
            bundle exec rspec --format RspecJunitFormatter \
                              --out test_results/rspec.xml \
                              --format documentation \
                              $(circleci tests glob "spec/{controllers,forms,models,services}/**/*_spec.rb" | circleci tests split)

structure.sql을 사용하는 경우



structure.sql을 사용하는 경우 postgresql-client 설치가 필요합니다.
      - run:
          # db:structure:loadに必要
          name: Install postgresql-client 
          command: |
            sudo apt-get update || true
            sudo apt install -y postgresql-client

db:schema:load 대신 db:structure:load라고 가정합니다.
      - run:
          name: DB Initializing
          command: |
            dockerize -wait tcp://localhost:5432 -timeout 1m
            bundle exec rake db:structure:load

README에 배지를 표시



README.md
[![blog-rails6-vuejs](https://circleci.com/gh/kazubon/blog-rails6-vuejs.svg?style=shield)](https://app.circleci.com/pipelines/github/kazubon/blog-rails6-vuejs)

좋은 웹페이지 즐겨찾기