4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CircleCIでWordpressとかのモニタリングしようぜ?

Last updated at Posted at 2019-01-12

Wordpressでリンクが壊れていて機会損失した経験はありますか?
海外からアクセスしたWordpressのパフォーマンスが悪すぎて機会損失した経験はありますか?
この記事では、Wordpressや任意のサイトを自動でテストして、それらの機会損失を予防する方法をご紹介します。

自動テストの発想

Jekyll、Hugoなどの静的ファイルジェネレータやNuxt.jsはサイトas codeになっているので、CircleCIで自動テストしやすいですよね。
WordpressはDBで管理されているので、同じようにはいきませんが、本番環境のWordpressをCircleCIでチェックすれば良いです。
Wordpressのなんらかの更新からCircleCIをトリガーできれば、デプロイ前のチェックができないこと以外は、実質同じような状態にできます。

リンクチェックプラグインは漏れる

内部でリンクチェックしてくれるツールはありますが、
プラグインをいろいろ使っていると、
チェックはパスしても、外部から見て破綻していることがあります。

テスト実行用のDocker image

イメージ名: contribu/webtester
dockerhub: https://hub.docker.com/r/contribu/webtester
リポジトリ: https://github.com/contribu/webtester

CircleCIから使う方法

CircleCI用のリポジトリを作り、
以下のようなconfig.ymlを配置。

version: 2
jobs:
  build:
    docker:
      - image: contribu/webtester
        environment:
          - LANG: ja_JP.UTF-8
          - LANGUAGE: ja_JP.UTF-8
          - LC_ALL: C.UTF-8
    working_directory: ~/repo
    steps:
      - checkout
      - run:
          name: run tests
          command: |
            cd /app
            mkdir -p /tmp/test_results
            bundle exec ruby main.rb test \
              --seed_urls=https://example.com/ \
              --allowed_url_patterns="https://example\.com" \
              --interval=1 \
              --timeout=60 \
              > /tmp/test_results/result.html
      - store_test_results:
          path: /tmp/test_results
      - store_artifacts:
          path: /tmp/test_results
          destination: test_results

結果の見方

/tmp/test_results/result.html に出力しています。
CircleCIならアーティファクトから見れます。

  • Size: バイト数
  • Total Time: リクエストを開始してからダウンロードが完了するまでの時間
  • From Link Count: 被リンクページ数 (allowed_url_patternsに含まれるもののみカウント)

動作

seed_urlsで与えられたURLを起点に、allowed_url_patternsで与えた正規表現パターンに一致するURLをクロールし、最後にレポートを出力します。

intervalについて

allowed_url_patternsで与えた正規表現パターンに一致しないURLはリクエストを飛ばしません。

allowed_url_patternsが自分で管理するサーバーのみの場合は、intervalは小さめで大丈夫だと思います。

allowed_url_patternsに自分で管理するサーバー以外のサーバーが含まれる場合は、intervalが違法にならないように注意してください。

CircleCIのサーバーの場所

少なくとも日本以外っぽいです
https://discuss.circleci.com/t/where-are-the-build-servers-located-geographically/20571

テスト

--tests=/path/to/test1.rb /path/to/test2.rb

このようにしてテストを追加できます。デフォルトで、not foundとinterval server errorをチェックするテストがついています。

テストは以下のように書きます。インターフェースはtestのみです。
以下の変数を組み合わせてテストし、エラーにする場合は{ error: "error message" }を返します。

result[:url]
result[:status]
result[:total_time]
result[:size]
result[:from_urls]
result[:to_urls]

register_test(
  test: lambda do |result|
    if result[:status] >= 400 && result[:status] < 500
      {
        error: 'Not Found'
      }
    end
  end
)

ライセンス

この記事に掲載されたコードのライセンスはCC0

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?