PostgreSQLの使用

多くのアプリケーションがデータベースとして PostgreSQL に依存しているため、テストを実行するためには最終的に PostgreSQL が必要になります。以下では、GitLab RunnerのDockerとShell Executorを使ってこれを実行する方法を説明します。

DockerエクゼキュータでPostgreSQLを使う

GitLab RunnerとDocker Executorを使っているのであれば、基本的にすべての設定は済んでいるはずです。

note
GitLab UI で設定した変数は、サービスコンテナには渡されません。詳細については、GitLab CI/CD変数を参照してください。

まず、.gitlab-ci.yml に追加します:

default:
  services:
    - postgres:12.2-alpine

variables:
  POSTGRES_DB: $POSTGRES_DB
  POSTGRES_USER: $POSTGRES_USER
  POSTGRES_PASSWORD: $POSTGRES_PASSWORD
  POSTGRES_HOST_AUTH_METHOD: trust

そして、データベースを使用するようにアプリケーションを設定します:

Host: postgres
User: $POSTGRES_USER
Password: $POSTGRES_PASSWORD
Database: $POSTGRES_DB

なぜHostpostgres を使ったのか不思議に思うのであれば、How services are linked to the jobを読んでください。

Docker Hubで利用可能な他のDockerイメージを使うこともできます。例えば、PostgreSQL 14.3を使う場合、サービスはpostgres:14.3 になります。

postgres イメージはいくつかの環境変数を受け入れることができます。詳細はDocker Hubのドキュメントを参照してください。

ShellエクゼキュータでPostgreSQLを使う

GitLab Runner を使っている手動設定のサーバーで、Shell Executor を使って PostgreSQL を使うこともできます。

まず PostgreSQL サーバーをインストールします:

sudo apt-get install -y postgresql postgresql-client libpq-dev

次にユーザーを作成し、PostgreSQLにサインインします:

sudo -u postgres psql -d template1

次に、アプリケーションで使用するユーザー(ここではrunner )を作成します。以下のコマンドの$password を本当に強力なパスワードに変更してください。

note
これはPostgreSQLのプロンプトの一部ですので、以下のコマンドではtemplate1=#
template1=# CREATE USER runner WITH PASSWORD '$password' CREATEDB;

作成されたユーザはデータベースを作成する権限を持ちます (CREATEDB)。以下の手順では、そのユーザ用に明示的にデータベースを作成する方法を説明しますが、テストフレームワークでデータベースをドロップしたり作成したりするツールがある場合、この権限を持っていると便利です。

データベースを作成し、ユーザーrunner にすべての権限を与えます:

template1=# CREATE DATABASE nice_marmot OWNER runner;

すべてがうまくいったら、データベース・セッションを終了してください:

template1=# \q

ここで、新しく作成したデータベースにユーザーrunner で接続してみて、すべてがうまくいっていることを確認してください。

psql -U runner -h localhost -d nice_marmot -W

このコマンドは、psql に localhost に接続して md5 認証を使用するよう明示的に指示しています。このステップを省略すると、アクセスが拒否されます。

最後に、データベースを使用するようにアプリケーションを設定します:

Host: localhost
User: runner
Password: $password
Database: nice_marmot

プロジェクトの例

GitLab.comで公開されている共有Runnerを使ったPostgreSQLプロジェクトの例を用意しました。

ハックしたいですか?フォークしてコミットし、変更をプッシュします。わずかな時間で公開 Runner によって変更が選択され、ジョブが開始されます。