gitlab runner executor

gitlab runner executor 는 여러가지가 있다. https://docs.gitlab.com/runner/executors/

기본적인 shell과 docker만 다루어 보겟다. 하나의 장비에서 두개의 runner를 돌려서 tag가 docker가 붙으면 도커 executor가 돌게 해보자.

executor 등록

shell executor

ssh runner01

gitlab-runner register \
 --non-interactive \
 --executor "shell" \
 --url "https://gitlab.yourdomain.com/" \
 --registration-token "xxxNM11xxKvg6TDKtxs3" \
 --description "runner01" \
 --tag-list "" \
 --run-untagged="true" \
 --locked="true"

docker executor

 gitlab-runner register \
 --non-interactive \
 --executor "docker" \
 --docker-image alpine:latest \
 --url "https://gitlab.yourdomain.com/" \
 --registration-token "xxxM11xxKvg6TDKtxs3" \
 --description "runner01-docker-executor" \
 --tag-list "docker" \
 --run-untagged="true" \
 --locked="true"

등록하고 나면 다음 파일에 내용이 정리되는걸 볼수가 있다.

cat /etc/gitlab-runner/config.toml

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "runner01"
  url = "https://gitlab.yourdomain.com/"
  token = "xxxpzshVpBoXzz4XA6y"
  executor = "shell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]

[[runners]]
  name = "runner01-docker-executor"
  url = "https://gitlab.yourdomain.com/"
  token = "xxx8XwGwqt4T39ahqu"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

참고

config.toml파일을 수정하면 자동 적용된다. runner를 재시작 할 필요가 없다는것이다.

tags 사용하기

위에서 runner를만들때 컴마로 구분하여 자신이 받을 태그를 적어놓는다.

깃랩이 작업을 던질 때 이 태그가 있는 러너에만 작업을 할당한다.

중요한것은 태그가 여러개 있으면 모든 태그를 다 가지고 있는 러너가 실행이 된다.

Gitlab Release 만들기

Gitlab에서 요즘 업데이트로 인해서 Release도 편하게 만들수 잇게 되있다.

shell executor

stages:
  - release

release:
  stage: release
  when: manual
  script:
    - >
      release-cli create --name release-$CI_JOB_ID --description release-$CI_COMMIT_REF_NAME-$CI_JOB_ID --tag-name job-$CI_JOB_ID --ref $CI_COMMIT_SHA

shell executor는 release-cli를 따로 설치를 해줘야한다.

curl -L --output /usr/local/bin/release-cli "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-linux-amd64"
sudo chmod +x /usr/local/bin/release-cli

docker executor

stages:
  - release

Release-Node:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - echo $CI_COMMIT_TAG
  release:
    name: release-$CI_COMMIT_TAG
    description: release-$CI_COMMIT_TAG
    tag_name: $CI_COMMIT_TAG
    ref: $CI_COMMIT_TAG
  tags:
    - docker

tags에 docker를 추가하여 이 태그가 있는 러너에서만 실행이 되게 해두었다.

실행해보면 잘된다.

참고

release를 지우는것은 ui에는 없으나 tag자체를 지우면 release가 지워지는것을 확인할수 있다.

teamsmiley's profile image

teamsmiley

2021-03-01 00:00

Read more posts by this author