PostgreSQL 사용하기
많은 애플리케이션이 데이터베이스로 PostgreSQL을 사용하기 때문에 테스트를 실행하기 위해서는 결국 이를 필요로 합니다. 아래에서는 GitLab Runner의 Docker 및 Shell 실행기를 사용하여 이를 어떻게 하는지 안내합니다.
Docker 실행기로 PostgreSQL 사용하기
Postgres 15.4 이상에서는 확장 스크립트에 작은따옴표, 역슬래시 또는 달러 기호를 포함하고 있는 이름으로 스키마나 소유자 이름을 대체하지 않습니다.
CI 변수가 구성되지 않은 경우 값은 환경 변수 이름을 문자열로 사용합니다. 예를 들어 POSTGRES_USER: $USER
와 같이 설정하면 POSTGRES_USER
변수가 ‘$USER’로 설정되어 PostgreSQL이 다음과 같은 오류를 표시합니다.
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=#
을 입력하지 않도록 주의하세요.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
예제 프로젝트
공개 가능한 runner를 사용하여 GitLab.com에서 실행되는 예제 PostgreSQL 프로젝트를 설정해 두었습니다.
함께 작업해 보시겠습니까? Fork를 만들고 변경 사항을 커밋하고 푸시하세요. 잠시 후에 변경 사항이 공개 runner에서 선택되어 작업이 시작됩니다.