PostgreSQLの使用
多くのアプリケーションがデータベースとして PostgreSQL に依存しているため、テストを実行するためには最終的に PostgreSQL が必要になります。以下では、GitLab RunnerのDockerとShell Executorを使ってこれを実行する方法を説明します。
DockerエクゼキュータでPostgreSQLを使う
GitLab RunnerとDocker Executorを使っているのであれば、基本的にすべての設定は済んでいるはずです。
まず、.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
なぜHost
にpostgres
を使ったのか不思議に思うのであれば、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
を本当に強力なパスワードに変更してください。
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 によって変更が選択され、ジョブが開始されます。