もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

現場で CircleCIが使えるようになった

何番煎じだという話ですが、ちょっと前に念願かなってCircleCI導入出来たので、ビルド時のキャッシュと自動テストを導入してみました。

今回はメモ程度の投稿ですが残しておきます。

  # キャッシュ作成
  generate_cache:
    machine: true
    steps:
      - checkout
      - restore_cache:
          key: docker--{{ checksum ".circleci/config.yml" }}-{{ checksum "docker-compose.ci.yml" }}-{{ checksum "docker_files/web/Dockerfile" }}
          paths: ~/caches/images.tar
      - run:
          name: Setup Docker
          command: |
            if [ ! -f ~/caches/images.tar ]; then
              docker-compose -f docker-compose.ci.yml build
              mkdir -p ~/caches
              docker save $(docker images | awk 'NR>=2 && ! /^<none>/{print $1}') -o ~/caches/images.tar
            fi
      - save_cache:
          key: docker--{{ checksum ".circleci/config.yml" }}-{{ checksum "docker-compose.ci.yml" }}-{{ checksum "docker_files/web/Dockerfile" }}
          paths: ~/caches/images.tar

  # テスト実行
  test:
    machine: true
    steps:
      - checkout
      - restore_cache:
          key: docker--{{ checksum ".circleci/config.yml" }}-{{ checksum "docker-compose.ci.yml" }}-{{ checksum "docker_files/web/Dockerfile" }}
          paths: ~/caches/images.tar
      - run:
          name: Docker Cache Load
          command: |
            docker load -i ~/caches/images.tar
      - run:
          name: Run Test
          command: |
            docker-compose -f docker-compose.ci.yml run www_web /bin/bash -c '\
              cd /var/www/project && composer update && \
              ENVIRONMENT=ci composer unittest'

workflows:
  version: 2
  build:
    jobs:
      - generate_cache
      - test:
          requires:
            - generate_cache

generate_cacheに関しては、1回目の実行時は4分ほどかかるのですが、それいこうは1分未満で終わるようになりました。

ただ現状、デプロイはJenkinsで自動テストはCircleCIというよくわからない構成になっちゃってるので、CircleCIに合わせていきたいと思います。

この辺も、レガシー感謝の日で色んな人のお話をききたいなー。

メモメモ。