中年エンジニアの開発と生活の日々

中年エンジニアがソフトウェア開発や日々の生活で得た知見の備忘録

Circle CI でバックグラウンド処理を行う

CI におけるバックグラウンドプロセスの実行について

Circle CI でバックグラウンドプロセスを起動したいことがままあります。たとえば、自動検証を行う際に appium のサーバープロセスを起動するなどです。

普通、Unix系のコマンドではコマンドの後ろに ‘&’ をつけて、実行するとバックグラウンド実行になります。

> appium &

しかしながら、circle.yml にコマンドとして以下のように書くと…

test:
  pre:
    - appium&

実行時に次のような警告が出てきます。

Probable error. It looks like you’re trying to run a command in the background by using ‘&’ and not the ‘background: true’ option. If so, the process will die quickly from the hangup (HUP) signal. See the the documentation on backgrounding.

と、言うわけで、Circle CI 本家のドキュメントを見てみます。

circleci.com

このドキュメントによると、バックグラウンド処理は & を使うのではなく、yml の記法で background オプションを true にせよとのことです。また、必要に応じてバックグラウンドプロセスが安定するまでスリープを入れてもよいとのことです。

そんなわけで、以下のように circle.yml に記載することによって、appium のサーバーがバックグラウンドプロセスとして起動することができます。

test:
  pre:
    - appium:
        background: true
    - sleep 10

バックグラウンドプロセスの標準出力をみるには

Circle CI ではバックグラウンドプロセスの標準出力とエラー出力をビルド後に確認することができます。通常では Circle CI の仮想マシンのログなどを引き上げるときは artifacts としてファイルパスを circle.yml に記載する必要がありますが、バックグラウンドプロセスの標準出力とエラー出力については自動的に artifacts として待避されます。ビルド、自動テスト中にエラーが出た場合にも後からログとして確認することができます。

Circle CI の結果画面で artifacts タブを選択すると以下のような表示になります。 f:id:munacky:20170524183848p:plain

このファイル群の stdout から始まるのが、標準出力、stderr から始まるのがエラー出力になります。

自分はこの機能を知らず、わざわざ、出力先を自前でリダイレクトして、リダイレクトしたファイルを artifacts に登録して出力結果を引き上げていました。とほほ。