GitLab-Runner 설치

이 문서는 GitLab-Runner 설치 에 대한 것이다. GitLab 은 CI/CD 를 위해 외부 프로그램을 사용하는데, 이것이 바로 GitLab-Runner 이다. 외부 프로그램을 사용하기 때문에 반드시 GitLab 과 함께 있어야 하는것도 아니고 독립적으로 다양한 플랫폼에 설치해도 된다.

설치

설치는 아주 간단하다. 각 배포판, 플랫폼마다 패키지를 제공한다. 나는 Ubuntu 20.04 에 그것도 GitLab 서버에 설치할 예정이다. 다른 서버에 설치를 해도 되지만 테스트 삼아 설치하는 것이여서 이렇게 진행했다.

$ sudo apt install git # 의존성 설치
$ curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.deb
$ sudo dpkg -i gitlab-runner_amd64.deb

이렇게 설치를 하고 나면 /home/gitlab-runner 계정이 생성되며 systemd 에 gitlab-runner 서비스가 등록이되며 자동으로 실행이 된다.

$ ls /home/
gitlab-runner
$ systemctl status gitlab-runner
● gitlab-runner.service - GitLab Runner
     Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-08-01 22:49:15 KST; 1min 2s ago
   Main PID: 9245 (gitlab-runner)
      Tasks: 12 (limit: 9487)
     Memory: 5.5M
     CGroup: /system.slice/gitlab-runner.service
             └─9245 /usr/lib/gitlab-runner/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslo>

Aug 01 22:49:15 gitlab gitlab-runner[9245]: Running in system-mode.
Aug 01 22:49:15 gitlab gitlab-runner[9245]: Running in system-mode.
Aug 01 22:49:15 gitlab gitlab-runner[9245]:
Aug 01 22:49:15 gitlab gitlab-runner[9245]:
Aug 01 22:49:15 gitlab gitlab-runner[9245]: Configuration loaded                                builds=0
Aug 01 22:49:15 gitlab gitlab-runner[9245]: Configuration loaded                                builds=0
Aug 01 22:49:15 gitlab gitlab-runner[9245]: listen_address not defined, metrics & debug endpoints disabled  builds=0
Aug 01 22:49:15 gitlab gitlab-runner[9245]: listen_address not defined, metrics & debug endpoints disabled  builds=0
Aug 01 22:49:15 gitlab gitlab-runner[9245]: [session_server].listen_address not defined, session endpoints disabled  builds=0
Aug 01 22:49:15 gitlab gitlab-runner[9245]: [session_server].listen_address not defined, session endpoints disabled  builds=0
$ sudo systemctl stop gitlab-runner

우선 gitlab-runner 서비스를 중지를 해준다.

Gitlab 에 등록하기

GitLab-Runner 를 설치했다면 이제 이것을 GitLab 에 등록을 해줘야 한다. 이를 위해서 GitLab 에서 Runner 메뉴를 보고 URL 과 Token 값을 확인 한다.

gitlab-runner 셋업 정보

오른쪽에 보면 URL 과 token 값이 보인다. Gitlab-Runner 를 GitLab 서버에 등록을 해줘야 한다.

$ sudo gitlab-runner register
[sudo] password for sbhyun:
Runtime platform                                    arch=amd64 os=linux pid=10804 revision=a998cacd version=13.2.2
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.systemv.local:8001/
Please enter the gitlab-ci token for this runner:
HHjQMREKED4vxoazrDBv
Please enter the gitlab-ci description for this runner:
[gitlab]: For compile java
Please enter the gitlab-ci tags for this runner (comma separated):
java,java runner
Registering runner... succeeded                     runner=HHjQMREK
Please enter the executor: docker, shell, ssh, docker-ssh+machine, docker+machine, kubernetes, custom, docker-ssh, parallels, virtualbox:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

등록할때에 URL, Token 값을 입력해 준다. 그리고 무엇보다 중요한 executor 를 선택해줘야 한다. 나의 경우에 Java 컴파일을 해줘야 하기 때문에 executor 를 shell 로 선택해줬다. 이렇게 설정된 내용은 /etc/gitlab-runner/config.toml 파일에 기록된다.

정상적으로 완료됐다면 서비스를 시작해 준다. 그리고 GitLab 에서 다음과 같이 runner 가 보인다.

등록된 gitlab-runner

여기서 중요한 것이, config.toml 파일을 수동으로 조작한다고 해서 GitLab 서버에 등록이 되지 않는다. 반드시 register 를 이용해야만 등록이 가능하다.

Java 컴파일 환경 구축.

번외로 Java 컴파일 환경을 구축해 보겠다. gitlab-runner 의 프로세스를 보면 다음과 같다.

$ ps aux | grep gitlab-runner
root        9245  0.0  0.3 138144 24564 ?        Ssl  22:49   0:02 /usr/lib/gitlab-runner/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner

위 내용을 보면 working-directory 가 /home/gitlab-runner 이고 사용자가 gitlab-runner 이다. 따라서 /home/gitlab-runner 홈 디렉토리를 기반으로 runner 가 작동된다.

Java 컴파일 환경을 위해 다음의 필요하다.

  • java 1.8 컴파일러
  • maven

이 두가지를 gitlab-runner 계정에 설정을 해줘야 한다.

java 1.8 설정

java 1.8 은 Oracle JDK 가 아닌 오픈 소스인 Zulu JDK 를 사용하기로 했다. 현 시점에서 최신판을 다운로드 한다.

$ curl -LJO https://cdn.azul.com/zulu/bin/zulu8.48.0.53-ca-jdk8.0.265-linux_musl_x64.tar.gz
$ tar xvzf zulu8.48.0.53-ca-jdk8.0.265-linux_musl_x64.tar.gz
$ ln -s zulu8.48.0.53-ca-jdk8.0.265-linux_musl_x64 java

gitlab-runner 를 executor 로 작동하도록 했기 때문에 gitlab-runner 의 기본 쉘인 bash 를 기반이다. gitlab-runner 계정에 .bashrc 파일에 java 1.8 환경 변수를 등록해준다. gitlab-runner 는 서비스에 등록되어 동작은 root 계정으로 동작한다. 하지만 gitlab-runner 가 실행될때에 su 명령어로 gitlab-runner 계정으로 전환된다.

문제는 이때에 .bashrc 를 읽어들이지 않는다. 대신에 .profile 을 읽어들이게 된다. 따라서 각종 환경 변수들은 .profile 에 작성해야 한다.

$ vim .profile
export JAVA_HOME=$HOME/java
export JRE_HOME=$HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JRE_HOME/lib/ext:$JAVA_HOME/lib/tools.jar
$ source .profile
$ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (Zulu 8.48.0.53-CA-linux-musl-x64) (build 1.8.0_265-b11)
OpenJDK 64-Bit Server VM (Zulu 8.48.0.53-CA-linux-musl-x64) (build 25.265-b11, mixed mode)

maven 설치

maven 을 설치해준다.

$ curl -LJO http://mirror.navercorp.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
$ tar xvzf apache-maven-3.6.3-bin.tar.gz
$ ln -s apache-maven-3.6.3 maven

이제 maven 을 위한 환경 변수를 등록해준다. 역시 .bashrc 파일에 해준다.

$ vim .profile
export MAVEN_HOME=$HOME/maven
export PATH=$PATH:$MAVEN_HOME/bin
$ source .profile

그리고 maven 에 setting.xml 파일을 수정해 의존성 패키지들의 저장소를 다음과 같이 바꿔 준다.

$ mkdir ~/maven/repository
$ vim setting.xml
${user.home}/maven/repository

이로써 java 컴파일을 위한 gitlab-runner 설정을 완료됐다.

.gitlab-ci.yml 파일

Spring5MVC 프로젝트를 maven 으로 작성했다. Eclipse 를 쓴다면 간단하게 Spring5MVC 를 Maven 프로젝트로 손쉽게 제작할 수 있다. 이런 경우에 .gitlab-ci.yml 파일을 다음과 같이 간단하게 작성할 수 있다.

stages:
  - build

build:
  stage: build
  script:
    - mvn clean install

  after_script:
    - echo 'build success!'

  tags:
    - springmvc-runner

  only:
    - master

tags 는 gitlab-runner 에서 지정한 tag 를 말한다. gitlab-ci.yml 에서 gitlab-runner 를 구분하는 방법은 바로 tag 다. 이것은 GitLab 에서 gitlab-runner 를 수정하면서 함께 변경이 가능하다.

only 는 git 브랜치중에서 master 브랜치에 커밋이 발생했을때에 이를 실행하도록 한 것이다. git 는 전략적으로 브랜치를 자주 사용하는데, 전략에 따라서 특정 브랜치에 대해서만 작동하도록 할 수도 있다.

위 파일은 Deploy 는 없어서 단순하게 컴파일하는 것으로 끝난다. 나중에 Deploy 에 대해서 이야기 해보도록 하겠다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다