circleci 컨테이너 시작 실패 & 빌드가 취소됩니까?
빌드하는 것에 너무 고전하기 때문에 비망록 메모. 아직 완벽하게 해결할 수는 없지만 한 걸음 진행되었으므로 게시
주제 앞에 한마디
circleci의 오류 문장은 불친절하고 엄청 어렵습니다. docker를 제대로 공부하라고 하는 것일까.
다시 현역 엔지니어를 존경한다.
참고 URL
등장 파일
이번 안고 있는 문제
· 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がセキュリティのためブロックしています。
普段の使い方だと特に支障はないと思います。
「-」記号はキャンセルされた状態を示します。
아무래도 문제없는 것 같다.
Reference
이 문제에 관하여(circleci 컨테이너 시작 실패 & 빌드가 취소됩니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ashketcham/items/d870c035feaaac590270텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)