CircleCI
serverspec
awspec

CircleCIでServerspecやawspecを定期実行する

CircleCIではv2からWorkflowsの機能を使って、定期実行を実現することができます。

https://circleci.com/docs/2.0/workflows/#scheduling-a-workflow

具体的なコードは以下のような .circleci/config.yml になります。

AWS環境やサーバ構成のテストとPHPアプリケーションのコードが同じリポジトリあるイメージです。

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY やサーバへの接続のためのSSH秘密鍵はCircleCI側に設定します。

version: 2
jobs:
  phptest:
    docker:
      - image: someone/php:7
      - image: mysql:5.6
        environment:
            MYSQL_ROOT_PASSWORD: ******
            MYSQL_USER: testuser
            MYSQL_PASSWORD: ******
            MYSQL_DATABASE: database_test
    steps:
      - checkout
      - run:
          name: composer install
          command: composer install
      - run:
          name: Test
          command: ./vendor/bin/phpunit
  infratest:
      docker:
      - image: circleci/ruby:2.4
    environment:
      - AWS_REGION: ap-northeast-1
    steps:
      - checkout
      - run:
          name: Pre
          command: sudo apt-get install libpcap-dev
      - run:
          name: bundle install
          command: |
              cd server/spec/
              bundle install
      - run:
          name: Test
          command: |
            cd server/spec/
            bundle exec rake spec
workflows:
  version: 2
  normal_workflow:
    jobs:
      - phptest
  scheduled_workflow:
    triggers:
      - schedule:
          cron: "0 1 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
      - infratest

jobs:phptestinfratest をそれぞれ定義しています
workflows: で通常時( normal_workflow )と定期実行( scheduled_workflow )の定義をしています。

上記の設定では

  • normal_workflow では phptest が実行
  • scheduled_workflow では infratest が定期実行 ( 毎日1:00 UTC に masterブランチのコードで実行 )

されることになります。

これで一度書いたServerspecやawspecのコードで外形監視どころか症状監視までできるようになります。

最高ですね!