리셋 되지 말자

[GitLab CI] docker gitlab-runner 등록 및 간단 예제 본문

GitLab

[GitLab CI] docker gitlab-runner 등록 및 간단 예제

kyeongjun-dev 2021. 2. 18. 18:39

간단하게 gitlab runner를 docker로 실행해서 CI 과정을 수행해봄

 

0. 사전준비

- docker 설치(gitlab-runner를 docker로 실행하기 위해서 설치 필요. 운영체제 별로 local로 설치하는 법이 존재하지만 여기서는 docker로 runner를 실행함. shared runner를 사용할 경우는 runner를 생성하여 실행할 필요 없음. shared runner를 사용하는 법은 다루지 않음)

- gitlab 가입(가입 방법은 다루지 않음)

1. 프로젝트 생성

 

2. ssh키 등록(이미 등록한 경우나 public repogitory로 생성한 경우 생략)

링크를 따라하여 등록(docs.gitlab.com/ee/ssh/README.html#generate-an-ssh-key-pair)

3. gitlab-runner

컨테이너 백그라운드 실행

$ docker run -d --name gitlab-runner gitlab/gitlab-runner:latest

 

컨테이너 접속

$ docker exec -it gitlab-runner bash

 

gitlab-runner register

root@bf9ecb4da995:/# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=31 revision=775dd39d version=13.8.0
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):

 

GitLab 프로젝트 -> 좌측 메뉴중 Settings -> CI / CD -> Runners의 Expand 클릭

 

빨간색 표시 한 항목을 차례대로 입력

Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com/
Enter the registration token:
jpFPYPGs94UMBFXLBzH4
Enter a description for the runner:
[bf9ecb4da995]:

 

description 알맞게 입력

[bf9ecb4da995]: my gitlab runner

 

tag 입력(기억해 두어야함. yml 파일 작성에 쓰임)

Enter tags for the runner (comma-separated):
my-runner
Registering runner... succeeded                     runner=jpFPYPGs
Enter an executor: ssh, docker-ssh+machine, kubernetes, docker-ssh, docker, parallels, shell, virtualbox, docker+machine, custom:

 

executor 입력 - 여기서는 shell 을 사용. docker 등 다른걸사용하고 싶다면 gitlab-runner 컨테이너에 각각 설치가 되어있어야 한다고 함(docker를 사용하고 싶다면 docker가 설치되어 있어야함.) 확실하지 않음

shell 입력

Enter an executor: ssh, docker-ssh+machine, kubernetes, docker-ssh, docker, parallels, shell, virtualbox, docker+machine, custom:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

 

 

4. gitlab-runner 서비스 시작

백그라운드 시작

gitlab-runner start

 

현재세션 시작

gitlab-runner run

 

여기서는 실시간으로 동작을 확인하기 위해 run으로 실행

root@bf9ecb4da995:/# gitlab-runner run
Runtime platform                                    arch=amd64 os=linux pid=66 revision=775dd39d version=13.8.0
Starting multi-runner from /etc/gitlab-runner/config.toml...  builds=0
Running in system-mode.

Configuration loaded                                builds=0
listen_address not defined, metrics & debug endpoints disabled  builds=0
[session_server].listen_address not defined, session endpoints disabled  builds=0

 

5. GitLab 프로젝트 -> 좌측 메누 중 Settings -> CI / CD -> Runners의 Expand를 클릭하여 Specific runner가 설정 되었는지 확인

 

6. git clone 및 디렉토리 이동

$ git clone https://gitlab.com/Penguin135/ci-test.git
Cloning into 'ci-test'...
warning: You appear to have cloned an empty repository.
$ cd ci-test/

 

7. .gitlab-ci.yml 파일 작성

touch로 생성 굳이 안해도 됨.

$ touch .gitlab-ci.yml

 

  • .gitlab-ci.yml (tags에 runner 생성시 입력한 tag 입력)
stages:
- test

lets_test:

  stage: test

  script:
  - echo hello
  - cd /home/gitlab-runner
  - touch gen_empty_file
  tags:
  - my-runner

 

8. git commit 및 git push

$ git commit -m "gitlab-ci yml upload"
[master ebefad0] gitlab-ci yml upload
 1 file changed, 13 insertions(+)
 create mode 100644 .gitlab-ci.yml
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://gitlab.com/Penguin135/ci-test.git
   e3d0a00..ebefad0  master -> master

 

9.  왼쪽 CI / CD 메뉴 -> Pipelines 메뉴에서 passed 확인

 

10. 왼쪽 CI / CD 메뉴 -> Jobs 메뉴에서 passed된 Job 확인

빨간 표시 'passed'를 확인하면 로그 확인 가능

 

로그 확인

 

11. yml 파일에서 touch 명령어로 gen_empty_file이 생성되었는지 gitlab-runner 컨테이너 접속 후 확인

$ docker exec -it gitlab-runner bash
root@bf9ecb4da995:/# cd /home/gitlab-runner/
root@bf9ecb4da995:/home/gitlab-runner# ls
builds  gen_empty_file

 

https://allroundplaying.tistory.com/21 - yml 파일 참고
https://github.com/toert/django-gitlab-ci-guide - 다음에 다뤄볼 Django CI 예제
https://americanopeople.tistory.com/335 - Django CI 구현시 참고할 블로그

 

Comments