circleci 컨테이너 시작 실패 & 빌드가 취소됩니까?

15255 단어 CircleCI도커Rails

빌드하는 것에 너무 고전하기 때문에 비망록 메모. 아직 완벽하게 해결할 수는 없지만 한 걸음 진행되었으므로 게시



주제 앞에 한마디



circleci의 오류 문장은 불친절하고 엄청 어렵습니다. docker를 제대로 공부하라고 하는 것일까.
다시 현역 엔지니어를 존경한다.

참고 URL



등장 파일


  • .circleci/cofing.yml
  • database.yml
  • docker-comopose.yml

  • 이번 안고 있는 문제



    · MySQL, 컨테이너의 시작 실패 ← 이번에 해결할 수 없었지만, 전진했다.
    · 컨테이너 시작에 실패했기 때문에 db : create도 실패
    ・rubocop를 실행할 수 없다(db:create를 할 수 없기 때문에?)
    ・/tmp/test-results가 있는데, Not Found가 되어 버린다 ← 이번에 해결되지 않았다.

    파일 내용(오류 발생 시)



    circleci/cofing.yml
    version: 2.1
    orbs:
      ruby: circleci/[email protected]
    
    jobs:
      build:
        docker:
          # specify the version you desire here
          - image: circleci/ruby:2.6.6-stretch-node
            environment:
              - RAILS_ENV: 'test'
          - image: circleci/mysql:8.0
            name: "db"
            command: mysqld --default-authentication-plugin=mysql_native_password
            environment:
              - MYSQL_PASSWORD: "password"
              - MYSQL_ROOT_HOST: '%'
    
          # Specify service dependencies here if necessary
          # CircleCI maintains a library of pre-built images
          # documented at https://circleci.com/docs/2.0/circleci-images/
          # - image: circleci/postgres:9.4
    
        working_directory: ~/アプリ名
    
        steps:
          - checkout
    
          # Download and cache dependencies
          - restore_cache:
              keys:
                - v1-dependencies-{{ checksum "Gemfile.lock" }}
                # fallback to using the latest cache if no exact match is found
                - v1-dependencies-
    
          - run: bundle install --jobs=4 --retry=3 --path vendor/bundle
          - save_cache:
              paths:
                - ./vendor/bundle
              key: v1-dependencies-{{ checksum "Gemfile.lock" }}
    
          # Database setup
          - run: bundle exec rake db:create
          - run: bundle exec rake db:schema:load
    
    # rubocop。
          - run:
              name: Rubocop
              command: bundle exec rubocop -a
    
    # rspec
          # run tests!
          - run:
              name: run tests
              command: |
                mkdir /tmp/test-results
                TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
                  circleci tests split --split-by=timings)"
    
    
                bundle exec rspec \
                  --format progress \
                  --format RspecJunitFormatter \
                  --out /tmp/test-results/rspec.xml \
                  --format progress \
                  $TEST_FILES
    
          # collect reports
          - store_test_results:
              path: /tmp/test-results
          - store_artifacts:
              path: /tmp/test-results
              destination: test-results
    

    database.yml
    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
      password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
      host: <%= ENV.fetch("MYSQL_HOST", "db") %>
    
    development:
      <<: *default
      database: アプリ名_development
    
    test:
      <<: *default
      database: アプリ名_test
    
    production:
      <<: *default
      database: <%= ENV['DB_DATABASE'] %>
      adapter: mysql2
      encoding: utf8mb4
      charset: utf8mb4
      collation: utf8mb4_general_ci
      host: <%= ENV['DB_HOST'] %>
      username: <%= ENV['DB_USERNAME'] %>
      password: <%= ENV['DB_PASSWORD'] %>
    
    
    

    docker-comopose.yml
    version: '3'
    services:
      db:
        image: mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: password
        ports:
          - '3306:3306'
        command: --default-authentication-plugin=mysql_native_password
        volumes:
          - mysql-data:/var/lib/mysql
      web:
        build: .
        command: bundle exec puma -C config/puma.rb
        environment:
          RAILS_ENV: development
        volumes:
          - .:/アプリ名
          - bundle:/usr/local/bundle
          - /app/vendor
          - /app/log
          - /app/.git
        ports:
          - "3000:3000"
        depends_on:
          - db
        tty: true
        stdin_open: true
      nginx:
        build:
          context: .
          dockerfile: ./nginx/Dockerfile
        ports:
          - '80:80'
        depends_on:
          - web
      chrome:
        image: selenium/standalone-chrome
        ports:
          - "4444:4444"
        shm_size: "2g"
    
    
    volumes:
      mysql-data:
        driver: local
      bundle:
        driver: local
    
    

    했던 일



    개발에서 MySQL 컨테이너를 시작하는 데 성공했기 때문에 docker-comose.yml에 쓰여진 것을 .circleci/cofing.yml에서도 흉내내면 좋지 않을까 생각하고 .circleci/cofing.yml 다음과 같이 수정

    circleci/cofing.yml
    version: 2.1
    orbs:
      ruby: circleci/[email protected]
    
    jobs:
      build:
        docker:
          # specify the version you desire here
          - image: circleci/ruby:2.6.6-stretch-node
            environment:
              - RAILS_ENV: 'test'
          - image: circleci/mysql:8.0
            name: "db"
            command: mysqld --default-authentication-plugin=mysql_native_password
            environment:
    +         - MYSQL_ROOT_PASSWORD: password    追記
    -         - MYSQL_PASSWORD: "password"    削除
    -         - MYSQL_ROOT_HOST: '%'        削除
    
    
    

    결과



    컨테이너를 만드는 곳에서 "!"마크였던 것이 "-"마크로 바뀌었다! ! (그러나 에러는 해결할 수 없는 것 같다...) 「!」와 「ー」의 차이는 무엇인가?
    그래도 rubocop는 실행할 수 있게 되었기 때문에, 전진은 할 수 있었다.


    추가 (2020/07/12)



    build가 취소되는 이유를 circleci에 직접 질문해 보았습니다.
    다음이 답변.

    qiita.rb
    
    "Build was canceled"と出ているのは、テストが終了し、
    それに伴いMySQLのコンテナを止めるときに出力されるステータスです。
    
    そして、"mbind: Operation not permitted"と出ていますが、
    このオペレーションをDockerがセキュリティのためブロックしています。
    普段の使い方だと特に支障はないと思います。
    
    -」記号はキャンセルされた状態を示します。
    

    아무래도 문제없는 것 같다.

    좋은 웹페이지 즐겨찾기