概要
- Docker Buildを行う
- Serverspecでテストを行う
- Docker HubへPushを行う
環境
↓環境毎のディレクトリにDockerfileとspec用のディレクトリがある
.
├── android
│   └── spec
├── gcc_cmake
│   └── spec
├── rails
│   └── spec
...
├── specfiles #spec用の共通して使用するファイル
│   └── spec
テストを行う場合、各環境のDocker Imageをビルドし、それぞれのテストをServerspecで行う。
Dockerfile
version: 2
jobs:
  build:
    working_directory: ~/workspace
    branches:
      only:
        - develop
    docker:
      - image: circleci/ruby:2.4
    steps:
      - checkout
      - setup_remote_docker
      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "Gemfile.lock" }}
          - v1-dependencies-
      # Install dependencies
      - run:
          name: bundle install
          command: bundle install --path vendor/bundle
      - save_cache:
          paths:
            - vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      # Test
      - run:
          name: run test
          command: ./run-tests.sh
      # Deploy
      - run:
          name: deploy docker images
          command: ./deploy.sh
- ポイント- setup_remote_dockerを設定- dockerやdocker-composeコマンドが使えるようになる
- 詳しくはこちら
 
- gemに関してはキャッシュしてます
 
テスト
run-tests.sh
#!/usr/bin/env bash
WORKDIR=$PWD
# Find target directory.
for entity in `find . -type d -mindepth 1 -maxdepth 1 -not -name ".git"`; do
  if [ $entity = "./specfiles" ]; then
    # Ignore directory
    continue
  fi
  # Only exist spec directory.
  if [ -e $entity/spec ]; then
    # Copy specfiles.
    cp $WORKDIR/specfiles/.rspec $entity/.
    cp -r $WORKDIR/specfiles/spec $entity/.
    # Build docker image.
    cd $entity
    ./docker-build.sh
    cd $WORKDIR
    # Exec rspec
    bundle exec rspec --default-path $entity/spec
  fi
done
対象となるディレクトリ配下に 
Docker Imageをビルドし、テストを行なっています。
spec ディレクトリがある環境だけDocker Imageをビルドし、テストを行なっています。
sh
   cp $WORKDIR/specfiles/.rspec $entity/.
   cp -r $WORKDIR/specfiles/spec $entity/.
↑は共通して使用するテスト用のファイルを各環境へコピーしてます。
Docker Hub へ Push
deploy.sh
#!/usr/bin/env bash
docker login -u $DOCKER_USER -p $DOCKER_PASS
# Android
docker push slowhand/android:1.0
# Rails
docker push slowhand/rails:1.0
# gcc + cmake
docker push slowhand/gcc_cmake:1.0
こちらは単純にloginしてpushしているだけです。
$DOCKER_USER などの環境変数はCircleCI上で定義してます。 
Thanks for sharing valuable information. this is really helpful for me.
返信削除visit : Digital Marketing Training in Chennai
Digital Marketing Course in Chennai