GitLab-Runner 설치
이 문서는 GitLab-Runner 설치 에 대한 것이다. GitLab 은 CI/CD 를 위해 외부 프로그램을 사용하는데, 이것이 바로 GitLab-Runner 이다. 외부 프로그램을 사용하기 때문에 반드시 GitLab 과 함께 있어야 하는것도 아니고 독립적으로 다양한 플랫폼에 설치해도 된다.
설치
설치는 아주 간단하다. 각 배포판, 플랫폼마다 패키지를 제공한다. 나는 Ubuntu 20.04 에 그것도 GitLab 서버에 설치할 예정이다. 다른 서버에 설치를 해도 되지만 테스트 삼아 설치하는 것이여서 이렇게 진행했다.
1 2 3 |
$ 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 서비스가 등록이되며 자동으로 실행이 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ 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 값을 확인 한다.
오른쪽에 보면 URL 과 token 값이 보인다. Gitlab-Runner 를 GitLab 서버에 등록을 해줘야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ 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 가 보인다.
여기서 중요한 것이, config.toml 파일을 수동으로 조작한다고 해서 GitLab 서버에 등록이 되지 않는다. 반드시 register 를 이용해야만 등록이 가능하다.
Java 컴파일 환경 구축.
번외로 Java 컴파일 환경을 구축해 보겠다. gitlab-runner 의 프로세스를 보면 다음과 같다.
1 2 |
$ 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 를 사용하기로 했다. 현 시점에서 최신판을 다운로드 한다.
1 2 3 |
$ 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 에 작성해야 한다.
1 2 3 4 5 6 7 8 9 10 |
$ 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 을 설치해준다.
1 2 3 |
$ 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 파일에 해준다.
1 2 3 4 |
$ vim .profile export MAVEN_HOME=$HOME/maven export PATH=$PATH:$MAVEN_HOME/bin $ source .profile |
그리고 maven 에 setting.xml 파일을 수정해 의존성 패키지들의 저장소를 다음과 같이 바꿔 준다.
1 2 3 |
$ mkdir ~/maven/repository $ vim setting.xml <localrepository>${user.home}/maven/repository</localrepository> |
이로써 java 컴파일을 위한 gitlab-runner 설정을 완료됐다.
.gitlab-ci.yml 파일
Spring5MVC 프로젝트를 maven 으로 작성했다. Eclipse 를 쓴다면 간단하게 Spring5MVC 를 Maven 프로젝트로 손쉽게 제작할 수 있다. 이런 경우에 .gitlab-ci.yml 파일을 다음과 같이 간단하게 작성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 에 대해서 이야기 해보도록 하겠다.