본문 바로가기

시스템/Gitlab

[Gitlab] Docker Gitlab으로 pages 기능 사용해보기(with runner)

반응형

Pages Daemon에 Gitlab 프로젝트 내 소스코드를 runner를 이용하여 배포하고 Gitlab Nginx에서 Reverse Proxy를 구성해  Pages Daemon으로 Proxing하여 웹호스팅을 하는 것이 일련의 흐름이다.

이번에 구현해 볼 pages의 형태는 Pages가 Gitlab과 동일한 서버(or Container)에서 구동되며 nginx에서 Reverse Proxing을 통해 서비스 되는 형태이다.

Gitlab과 Pages는 동일 Container내에서, Runner는 별도의 Container에서 구동시켜 연동할 예정이다.

구축에 앞서 Pages에서 사용할 도메인이 필요한데 이때 Gitlab과 다른 하위(2차)도메인이 필요하다.

Gitlab : test-gitlab.test.com

Pages : test-gitlab-pages.test.com

또한 프로젝트의 Pages 도메인은 3차 도메인으로 생기게 되므로 *(와일드카드 or sharepoint) DNS 레코드 설정도 필요하다. 예를 들어 <프로젝트이름>.pages.test.com 이렇게 Pages 도메인이 생성 되므로 *.pages.test.com의 레코드 설정이 필요하다.

참고 : https://docs.gitlab.com/administration/pages/#prerequisites

 

 

Docker를 이용하여 Gitlab, Runner 실행

Docker-compose를 사용하며 https는 사용하지 않는다.

docker-compose.yml

services:
  gitlab:
    container_name : gitlab
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'test-gitlab'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://test-gitlab.test.com'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        gitlab_rails['initial_root_password'] = '1qaz@WSX'
        gitlab_pages['enable'] = true
        # pages
        pages_external_url "http://test-gitlab-pages.test.com"
        pages_nginx['ssl'] = false
        pages_nginx['listen_https'] = false
        gitlab_pages['listen_proxy'] = '0.0.0.0:8090'
        gitlab_pages['internal_gitlab_server'] = 'http://localhost:8080'
      GITLAB_TIMEZONE: Asia/Seoul
        # Add any other gitlab.rb configuration here, each on its own line
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - '/srv/gitlab2/config:/etc/gitlab'
      - '/srv/gitlab2/logs:/var/log/gitlab'
      - '/srv/gitlab2/data:/var/opt/gitlab'
      - '/srv/gitlab2/backups:/var/opt/gitlab/backups'
      - '/srv/gitlab2/certs:/var/opt/gitlab/certs'
    networks:
      - gitlab
  gitlab-runner:
    container_name: gitlab-runner
    image: 'gitlab/gitlab-runner:latest'
    restart: always
    depends_on:
      - gitlab
    volumes:
     - '/srv/gitlab-runner/config:/etc/gitlab-runner'
     - '/var/run/docker.sock:/var/run/docker.sock'
    networks:
      - gitlab
networks:
  gitlab:
    name: gitlab-network

 

Container 실행

docker-compose -f docker-compose.yml up -d

docker-compose -f docker-compose.yml ps
NAME            IMAGE                         COMMAND                  SERVICE         CREATED       STATUS                 PORTS
gitlab          gitlab/gitlab-ce:latest       "/assets/wrapper"        gitlab          2 hours ago   Up 2 hours (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp
gitlab-runner   gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   gitlab-runner   2 hours ago   Up 2 hours

 

 

Gitlab Runner Register

모든 프로젝트에서  Share 되는 runner로 구성한다.

Runner Container 접속

docker exec -it gitlab-runner /bin/bash

 

Gitlab Runner Register

gitlab-runner register

 

Gitlab URL 입력 : test-gitlab.test.com

Runtime platform                                    arch=amd64 os=linux pid=29 revision=ef334dcc version=17.10.1
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):

 

Registration token 입력 

Gitlab WEB GUI : Admin - CI/CD - Runners - Registration token 복사

Enter the registration token:
oMqXjzcznzhauAacgh7p

 

runner tag 입력 : test-runner

Enter a description for the runner:
[test-gitlab-runner]: <엔터>

Enter tags for the runner (comma-separated):
test-runner

Enter optional maintenance note for the runner:
<엔터>

 

executor 입력 : 여기서는 shell

Enter an executor: custom, ssh, docker-autoscaler, docker+machine, kubernetes, instance, shell, parallels, virtualbox, docker, docker-windows:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
 
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

 

Runner Start

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

gitlab-runner start

 

Gitlab 에서 Runner 확인

Gitlab WEB GUI : Admin - CI/CD - Runners

 

참고 

Pipeline Job에서 아래와 같은 에러가 난다면

Runner 수정

Run untagged jobs 옵션 선택

 

 

Pages 프로젝트 생성

Pages Template을 통해 프로젝트를 생성한다.

 

Pipelines 확인 : Build - Pipelines

소스 코드가 수정되면 .gitlab-ci.yml 에 의해 배포된다.

 

Pages URL 확인 : Deploy - Pages 

 

참조 : https://gitlab-docs.infograb.net/ee/administration/pages/source.html#dns-%EA%B5%AC%EC%84%B1

반응형