PostgreSQL 사용

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

많은 응용 프로그램이 데이터베이스로 PostgreSQL을 사용하므로 결국 테스트를 실행하려면 PostgreSQL이 필요합니다. GitLab Runner의 Docker 및 Shell 실행기로 이를 수행하는 방법은 다음과 같습니다.

Docker 실행기에서 PostgreSQL 사용

GitLab UI에서 설정된 변수를 서비스 컨테이너에 전달하려면 변수를 정의해야 합니다. 변수를 그룹 또는 프로젝트로 정의한 다음, 다음 해결책에 표시된 대로 작업에서 변수를 호출해야 합니다.

후술된 Postgres 15.4 버전부터, 이름에 따옴표, 백슬래시 또는 달러 기호가 포함된 스키마나 소유자 이름을 확장 스크립트로 대체하지 않습니다. CI 변수가 구성되지 않은 경우 값은 환경 변수 이름을 문자열로 사용합니다. 예를 들어 POSTGRES_USER: $USER와 같이 설정하면 POSTGRES_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
    

    Host에 대한 postgres 사용에 대한 자세한 정보는 작업과 어떻게 연결되는지를 참조하세요.

  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 14.3을 사용하려면 서비스는 postgres:14.3이 됩니다.

postgres 이미지는 일부 환경 변수를 사용할 수 있습니다. 자세한 내용은 Docker Hub의 문서를 참조하세요.

Shell 실행기에서 PostgreSQL 사용

Shell 실행기를 사용하는 GitLab Runner의 수동으로 구성된 서버에서도 PostgreSQL을 사용할 수 있습니다.

먼저 PostgreSQL 서버를 설치하세요:

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

다음 단계는 사용자를 만드는 것입니다. PostgreSQL에 로그인하세요:

sudo -u postgres psql -d template1

다음으로, 애플리케이션에서 사용되는 ‘runner’와 같은 사용자를 만드세요. 아래 명령어에서 $password를 실제 강력한 암호로 변경하세요.

참고: 다음 명령어에 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을 로컬호스트에 연결하여 md5 인증을 사용합니다. 이 단계를 누락하면 액세스가 거부됩니다.

마지막으로, 데이터베이스 사용을 위해 애플리케이션을 구성하세요. 예:

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

예제 프로젝트

GitLab.com에서 운영 중인 공개 사용 가능한 인스턴스 러너를 사용하여 실행되는 예제 PostgreSQL 프로젝트를 편리하게 설정해 두었습니다.

해킹해 보고 싶으신가요? Fork 하고, 커밋하고, 변경 사항을 푸시하세요. 잠시 후 변경 사항이 공개 러너에서 선택되고 작업이 시작됩니다.