Gitlab에도 CI툴이 있습니다. 다만 gitlab runner 라는 것이 반드시 있어야 합니다. 내장되어 있는 runner가 하나도 없기 때문에 프로젝트를 설정 한다고 해도 빌드가 되지를 않습니다. Gitlab runner를 설치하고, 연동한후 프로젝트를 설정해야 합니다. Gitlab runner 역시 Docker Image로 설치 합니다.
- 공식 문서 : https://docs.gitlab.com/runner/install/docker.html
Gitlab에서
어드민으로 로그인하고 Admin Area를 클릭하고 좌측 메뉴에서 Overview-Runners 항목을 선택 합니다. 여기에 보이는 URL 과 token을 기록 합니다.

리눅스 서버에서
리눅스 서버에 ~/docker/gitlab-ruuner1 이라는 디렉토리를 만듭니다(Runner는 리눅스 전용 runner, 윈도우즈 전용 runner와 같이 얼마든지 계속 추가 할 수 있고, 빌드 작업이 너무나 많다면 필연적으로 runner는 많이 있어야 하므로 번호를 붙였습니다).
다음 명령을 실행하여 runner를 실행 합니다.
sudo docker run --detach \
--name gitlab-runner1 \
--restart always \
--dns=192.168.1.34 \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume /home/anakin/docker/gitlab-runner1/config.toml:/etc/gitlab-runner/config.toml \
--volume /home/anakin/docker/gitlab-runner1/config.json:/root/.docker/config.json \
gitlab/gitlab-runner:alpine
빌드 테스트시 내부 시스템과 연동 되는 경우 도메인 이름으로 접속하기 위해 runner container가 NAS의 local DNS를 볼 수 있도록 지정 했습니다. 또한 runner 안에서 실행 역시 docker로 실행할 것이기 때문에 docker.sock도 마운트 해 줍니다. config.json 은 runner가 docker를 실행할때의 참조 파일로서, 필요하면 작성 합니다. 예를들어, local docker registry에 접근하려고 할 때 인증정보등을 적어 줍니다.
{
"auths": {
"purple.example.io:5000": {
"auth": "인증정보"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.06.1-ce (linux)"
}
}
이제 Runner를 Gitlab에 등록 해야 합니다. 리눅스 서버에서 다음을 실행 합니다.
sudo docker exec -ti gitlab-runner1 gitlab-runner register
Gitlab 에서 얻은 URL과 token을 넣고 executor에는 docker 를 입력합니다(필요에 따라 입력하시면 됩니다)
입력이 완료되어 다시 Gitlab의 Runners 항목을 확인하면 정상 등록 된것을 확인 할 수 있습니다.

연필을 눌러 설정메뉴로 들어가면, 특정 프로젝트에만 사용되게 한다거나 하는 설정을 할 수 있습니다. 모든 프로젝트에서 사용할 수 있도록 하려면 “Protected”와 “Lock to current projects” 체크를 끄고 “Run untagged jobs”를 켜줍니다.
Runner가 잘 등록 되었다면, maven 프로젝트의 root 디렉토리에 .gitlab-ci.yml 이라는 파일을 만들어 줍니다.
image: maven
variables:
# MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_CLI_OPTS: "--batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
- target/
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS compile
test:
stage: test
script:
- mvn $MAVEN_CLI_OPTS test
#deploy:
# stage: deploy
# script:
# - mvn $MAVEN_CLI_OPTS deploy
# only:
# - master
파일을 커밋하고 푸시 하면, gitlab이 알아서 runner를 실행 시키고 빌드/테스트를 진행 합니다. gitlab ci에 대해서는 https://docs.gitlab.com/ee/ci/ 를 참조 하시면 됩니다.
프로젝트의 CI/CD 메뉴를 클릭 하면 빌드 히스토리를 조회 할 수 있습니다.
