正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

PostgreSQLを使用する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

多くのアプリケーションがデータベースとしてPostgreSQLに依存しているため、それを使用してテストを実行する必要があります。

Docker executorでPostgreSQLを使用する

GitLab.com UIで設定された変数をサービスコンテナに渡すには、変数を定義する必要があります。変数はグループまたはプロジェクトとして定義し、次の回避策に示すようにジョブで変数を呼び出す必要があります。

Postgres 15.4以降のバージョンでは、引用符(")、バックスラッシュ()、またはドル記号($)が含まれている場合、拡張スクリプトにスキーマまたはオーナー名は代入されません。CI/CD変数が設定されていない場合、値は環境変数名を文字列として代わりに使用します。たとえば、POSTGRES_USER: $USERとすると、POSTGRES_USER変数が「$USER」に設定され、Postgresに次のエラーが表示されます。

Fatal: invalid character in extension

回避策は、GitLab CI/CD変数で変数を設定するか、文字列形式で変数を設定することです。

  1. GitLabでPostgres変数を設定します。GitLab.com UIで設定された変数は、サービスコンテナに渡されません。

  2. .gitlab-ci.ymlファイルで、Postgresイメージを指定します。

    default:
       services:
         - postgres
  3. .gitlab-ci.ymlファイルで、定義した変数を追加します。

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

    postgresHostに使用する方法の詳細については、サービスがジョブにどのようにリンクされているかを参照してください。

  4. データベースを使用するようにアプリケーションを設定します(例)。

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

または、.gitlab-ci.ymlファイルに文字列として変数を設定することもできます。

variables:
  POSTGRES_DB: DB_name
  POSTGRES_USER: username
  POSTGRES_PASSWORD: password
  POSTGRES_HOST_AUTH_METHOD: trust

Docker Hubで利用可能な他のDockerイメージを使用できます。たとえば、PostgreSQL 16.10を使用するには、サービスをpostgres:16.10にします。

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

Shell executorでPostgreSQLを使用する

Shell executorでGitLab CI/CD Runnerを使用している手動で設定されたサーバーでPostgreSQLを使用することもできます。

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

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

次のステップはユーザーを作成することなので、PostgreSQLにサインインします。

sudo -u postgres psql -d template1

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

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

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

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

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

プロジェクトの例

パブリックに利用可能なインスタンスRunnersを使用して、GitLab.comで実行される便利なPostgreSQLプロジェクトの例を設定しました。

ハックしませんか?フォークし、コミットし、変更をプッシュします。しばらくすると、パブリックRunnerによって変更が選択され、ジョブが開始されます。