InfoGrab Docs

PostgreSQL 사용하기

요약

많은 애플리케이션이 데이터베이스로 PostgreSQL에 의존하기 때문에 테스트를 실행하려면 PostgreSQL을 사용해야 합니다. GitLab UI에서 설정된 변수를 서비스 컨테이너에 전달하려면 변수를 정의해야 합니다.

많은 애플리케이션이 데이터베이스로 PostgreSQL에 의존하기 때문에 테스트를 실행하려면 PostgreSQL을 사용해야 합니다.

Docker executor로 PostgreSQL 사용#

GitLab UI에서 설정된 변수를 서비스 컨테이너에 전달하려면 변수를 정의해야 합니다. 변수를 Group 또는 Project로 정의한 다음 다음 해결 방법에 표시된 대로 잡에서 변수를 호출해야 합니다.

Postgres 15.4 이상 버전은 큰따옴표("), 백슬래시(), 또는 달러 기호($) 기호가 포함된 경우 스키마 또는 소유자 이름을 확장 스크립트에 대입하지 않습니다. CI 변수가 구성되지 않은 경우 값은 환경 변수 이름을 문자열로 사용합니다. 예를 들어 POSTGRES_USER: $USERPOSTGRES_USER 변수를 '$USER'로 설정하게 되어 Postgres에서 다음 오류가 표시됩니다:

Fatal: invalid character in extension

해결 방법은 GitLab CI/CD 변수에 변수를 설정하거나 문자열 형태로 변수를 설정하는 것입니다:

  1. GitLab에서 Postgres 변수를 설정합니다. GitLab 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
    

    Hostpostgres를 사용하는 방법에 대한 자세한 내용은 서비스가 잡에 연결되는 방법을 참조하세요.

  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 Runner를 사용하는 수동으로 구성된 서버에서도 PostgreSQL을 사용할 수 있습니다.

먼저 PostgreSQL 서버를 설치합니다:

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

다음 단계는 사용자를 만드는 것이므로 PostgreSQL에 로그인합니다:

sudo -u postgres psql -d template1

그런 다음 애플리케이션에서 사용할 사용자(여기서는 runner)를 만듭니다. 다음 명령의 $password를 강력한 비밀번호로 변경합니다.

Note

다음 명령에서 template1=#를 입력하지 마세요. 이것은 PostgreSQL 프롬프트의 일부입니다.

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에서 실행되는 PostgreSQL 예시 프로젝트를 편의를 위해 설정했습니다.

해킹해 보고 싶으신가요? 포크한 다음 변경 사항을 커밋하고 푸시하세요. 잠시 후 변경 사항이 공용 러너에 의해 선택되고 잡이 시작됩니다.

PostgreSQL 사용하기

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

많은 애플리케이션이 데이터베이스로 PostgreSQL에 의존하기 때문에 테스트를 실행하려면 PostgreSQL을 사용해야 합니다. GitLab UI에서 설정된 변수를 서비스 컨테이너에 전달하려면 변수를 정의해야 합니다.

많은 애플리케이션이 데이터베이스로 PostgreSQL에 의존하기 때문에 테스트를 실행하려면 PostgreSQL을 사용해야 합니다.

Docker executor로 PostgreSQL 사용#

GitLab UI에서 설정된 변수를 서비스 컨테이너에 전달하려면 변수를 정의해야 합니다. 변수를 Group 또는 Project로 정의한 다음 다음 해결 방법에 표시된 대로 잡에서 변수를 호출해야 합니다.

Postgres 15.4 이상 버전은 큰따옴표("), 백슬래시(), 또는 달러 기호($) 기호가 포함된 경우 스키마 또는 소유자 이름을 확장 스크립트에 대입하지 않습니다. CI 변수가 구성되지 않은 경우 값은 환경 변수 이름을 문자열로 사용합니다. 예를 들어 POSTGRES_USER: $USERPOSTGRES_USER 변수를 '$USER'로 설정하게 되어 Postgres에서 다음 오류가 표시됩니다:

Fatal: invalid character in extension

해결 방법은 GitLab CI/CD 변수에 변수를 설정하거나 문자열 형태로 변수를 설정하는 것입니다:

  1. GitLab에서 Postgres 변수를 설정합니다. GitLab 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
    

    Hostpostgres를 사용하는 방법에 대한 자세한 내용은 서비스가 잡에 연결되는 방법을 참조하세요.

  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 Runner를 사용하는 수동으로 구성된 서버에서도 PostgreSQL을 사용할 수 있습니다.

먼저 PostgreSQL 서버를 설치합니다:

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

다음 단계는 사용자를 만드는 것이므로 PostgreSQL에 로그인합니다:

sudo -u postgres psql -d template1

그런 다음 애플리케이션에서 사용할 사용자(여기서는 runner)를 만듭니다. 다음 명령의 $password를 강력한 비밀번호로 변경합니다.

Note

다음 명령에서 template1=#를 입력하지 마세요. 이것은 PostgreSQL 프롬프트의 일부입니다.

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에서 실행되는 PostgreSQL 예시 프로젝트를 편의를 위해 설정했습니다.

해킹해 보고 싶으신가요? 포크한 다음 변경 사항을 커밋하고 푸시하세요. 잠시 후 변경 사항이 공용 러너에 의해 선택되고 잡이 시작됩니다.