自動テストがやりにくかったSQLServerに対して、CircleCIで自動テストをする道のり


はじめに

弊社システムはAWSで動いているものやAzureで動いているものなど色々な物があります
今回は、Azureで動いているSQLServerについてとりあげてみたいと思います

やりたいこと

単体テストをいっぱい書いたけど、SQLServerが個人の環境にしかないので、CI上でテストが通ることを確認したい

SQLServerについて

注意点

実際の利用方法

circleci/config.yml
ersion: 2

jobs:
  build:
    docker:
      - image: microsoft/mssql-server-linux:2017-CU8
        environment:
          - ACCEPT_EULA: Y            # 認証をパスさせる
          - SA_PASSWORD: 1234abcD     # rootのパス

使ってみようとして気づいた事

あれ。。これ、立ち上げただけでDBないじゃん。。。。
プログラムから利用しようとしても出来ないじゃん。。。

そんなわけでDB作成スクリプト

<?php
$sql = <<<SQL
IF DB_ID(N'testing') IS NULL
  CREATE DATABASE testing;
SQL;

$username = getenv('DB_USERNAME');
$password = getenv('DB_PASSWORD');

$pdo = new PDO('dblib:host=localhost', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pdo->query($sql);

PDOで入れたので、SQLにつなぐライブラリもインストール

- run: sudo ln -s /usr/lib/x86_64-linux-gnu/libsybdb.a /usr/lib/
- run: sudo pecl install sqlsrv-5.3.0 pdo_sqlsrv-5.3.0
- run: echo -e "extension=pdo_sqlsrv.so" | sudo tee /usr/local/etc/php/php.ini > /dev/null
- run: echo -e "extension=sqlsrv.so" | sudo tee /usr/local/etc/php/php.ini > /dev/null

うーん。結構面倒だった。。。