PostgreSQL 사용하기
Offering: GitLab.com, Self-managed, GitLab Dedicated
다수의 애플리케이션이 PostgreSQL을 데이터베이스로 사용하므로,
테스트를 실행하기 위해 결국 필요하게 됩니다. 아래는 GitLab Runner의 Docker 및 Shell 실행기를 통해 이를 수행하는 방법을 안내합니다.
Docker 실행기로 PostgreSQL 사용하기
GitLab UI에 설정된 변수를 서비스 컨테이너로 전달하려면, 변수를 정의해야 합니다.
변수를 Group 또는 Project로 정의한 후, 아래의 우회 방법처럼 작업에서 변수를 호출해야 합니다.
Postgres 15.4 및 이후 버전에서는, 이름에 따옴표, 역슬래시 또는 달러 기호가 포함된 경우, Postgres는 확장 스크립트에 스키마 또는 소유자 이름을 대체하지 않습니다.
CI 변수가 구성되지 않으면, 값은 문자열로 환경 변수 이름을 사용합니다. 예를 들어, POSTGRES_USER: $USER
는
POSTGRES_USER
변수가 ‘$USER’로 설정되어 Postgres가 다음과 같은 오류를 표시하게 됩니다:
Fatal: invalid character in extension
우회 방법은 GitLab CI/CD 변수에서 변수를 설정하거나 문자열 형식으로 변수를 설정하는 것입니다:
-
GitLab에서 Postgres 변수를 설정합니다. GitLab UI에서 설정된 변수는 서비스 컨테이너에 전달되지 않습니다.
-
.gitlab-ci.yml
파일에서 Postgres 이미지를 지정합니다:default: services: - postgres
-
.gitlab-ci.yml
파일에 정의한 변수를 추가합니다:variables: POSTGRES_DB: $POSTGRES_DB POSTGRES_USER: $POSTGRES_USER POSTGRES_PASSWORD: $POSTGRES_PASSWORD POSTGRES_HOST_AUTH_METHOD: trust
Host
로postgres
를 사용할 때에 대한 자세한 내용은 서비스가 작업에 연결되는 방법을 참조하세요. -
데이터베이스를 사용하도록 애플리케이션을 구성합니다. 예를 들어:
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 인증을 사용하기 위해 localhost에 연결하도록 지시합니다. 이 단계 생략 시 접근이 거부됩니다.
마지막으로 애플리케이션을 데이터베이스를 사용하도록 구성합니다. 예를 들어:
Host: localhost
User: runner
Password: $password
Database: nice_marmot
예제 프로젝트
편의를 위해 예제 PostgreSQL 프로젝트를 설정했습니다.
이 프로젝트는 우리의 공개 인스턴스 러너를 사용하여 GitLab.com에서 실행됩니다.
해킹하고 싶으신가요? 포크하고, 커밋하고, 변경 사항을 푸시하세요.
잠시 후, 변경 사항이 공개 러너에 의해 감지되고 작업이 시작됩니다.