概要
- 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