MySQL 사용하기
MySQL 사용하기
많은 애플리케이션이 데이터베이스로 MySQL에 의존하는데, 테스트를 실행하려면 MySQL이 필요할 때가 많아요. 이 페이지에서는 Docker executor와 Shell executor 두 환경에서 MySQL을 서비스로 붙여 쓰는 방법을 안내해요.
출처: 문서
본문
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
Docker executor로 MySQL 사용하기
MySQL 컨테이너를 사용하고 싶다면 GitLab Runner를 Docker executor와 함께 쓰면 돼요.
이 예시는 GitLab이 MySQL 컨테이너에 접근할 때 사용하는 사용자 이름과 비밀번호를 설정하는 방법을 보여줘요. 사용자 이름과 비밀번호를 설정하지 않으면 root를 써야 해요.
GitLab UI에서 설정한 변수는 서비스 컨테이너로 전달되지 않아요. 자세한 내용은 GitLab CI/CD variables 문서를 참고해요.
- MySQL 이미지를 지정하려면
.gitlab-ci.yml파일에 다음을 추가해요. Docker Hub에서 사용할 수 있는 어떤 Docker 이미지든 쓸 수 있어요. 예를 들어 MySQL 5.5를 쓰려면mysql:5.5를 사용해요.mysql이미지는 환경 변수를 받을 수 있어요. 자세한 내용은 Docker Hub 문서를 참고해요.
services:
- mysql:latest
- 데이터베이스 이름과 비밀번호를 포함하려면
.gitlab-ci.yml파일에 다음을 추가해요. MySQL 컨테이너는MYSQL_DATABASE와MYSQL_ROOT_PASSWORD를 사용해 데이터베이스에 연결해요. 이 값들은 직접 입력하기보다 GitLab CI/CD 변수(위 예시의$MYSQL_DB와$MYSQL_PASS)로 전달해요.
variables:
# Configure mysql environment variables (https://hub.docker.com/_/mysql/)
MYSQL_DATABASE: $MYSQL_DB
MYSQL_ROOT_PASSWORD: $MYSQL_PASS
- 애플리케이션이 데이터베이스를 사용하도록 설정해요. 예를 들어 이렇게요. 이 예시에서 사용자는
runner예요. 데이터베이스에 접근 권한이 있는 사용자를 쓰면 돼요.
Host: mysql
User: runner
Password: <your_mysql_password>
Database: <your_mysql_database>
Shell executor로 MySQL 사용하기
Shell executor를 쓰는 GitLab Runner가 있는 수동 설정 서버에서도 MySQL을 사용할 수 있어요.
- MySQL 서버를 설치해요.
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
- MySQL root 비밀번호를 정하고 요청이 나올 때 두 번 입력해요. 보안 조치로
mysql_secure_installation을 실행해서 익명 사용자를 제거하고 테스트 데이터베이스를 삭제하며 root 사용자의 원격 로그인을 비활성화할 수 있어요. - root로 MySQL에 로그인해서 사용자를 만들어요.
mysql -u root -p
- 애플리케이션이 사용할 사용자(여기서는
runner)를 만들어요. 명령의$password를 강력한 비밀번호로 바꿔요.mysql>프롬프트에서 다음과 같이 입력해요.
CREATE USER 'runner'@'localhost' IDENTIFIED BY '$password';
- 데이터베이스를 만들어요.
CREATE DATABASE IF NOT EXISTS `<your_mysql_database>` DEFAULT CHARACTER SET `utf8` \
COLLATE `utf8_unicode_ci`;
- 데이터베이스에 필요한 권한을 부여해요.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES ON `<your_mysql_database>`.* TO 'runner'@'localhost';
- 모든 게 잘 됐다면 데이터베이스 세션을 종료해요.
\q
- 새로 만든 데이터베이스에 연결해서 모든 게 제자리에 있는지 확인해요.
mysql -u runner -p -D <your_mysql_database>
- 애플리케이션이 데이터베이스를 사용하도록 설정해요. 예를 들어 이렇게요.
Host: localhost
User: runner
Password: $password
Database: <your_mysql_database>
예시 프로젝트
MySQL 예시를 보려면 이 샘플 프로젝트를 포크해요. 이 프로젝트는 GitLab.com에서 공개적으로 사용 가능한 인스턴스 러너를 사용해요. README.md 파일을 갱신하고, 변경을 커밋하고, CI/CD 파이프라인을 확인해서 실제 동작을 볼 수 있어요.
더 알아보기
데이터베이스 서비스를 붙이는 방식은 서비스 문서에서 전체 흐름을 다시 확인할 수 있어요. PostgreSQL이나 Redis 서비스 설정도 함께 살펴보면 테스트 환경에서 데이터 계층을 다양하게 구성할 수 있어요.