Pre_2 gitlab+runner+ cp repo

kyoungyeon·2025년 7월 3일
0

TIL

목록 보기
124/129


gitlab runner 설치 중 error

condition1

  • 현재 enterprise trial 버전 60일 쓰고있음
  • gitrunner 로 ci/cd test 를 위해 실행중
  • 블로그 보니 예전 버전(?)의 shared-runenr token 발생 방법만 기록해놔서 찾아봄
    migrate new runner register

gitlab내 ai 챗봇 활용-1

질문 1) New Runner Registration Workflow (Recommended)

GitLab now uses runner authentication tokens instead of registration tokens. To create these:

  1. Navigate to the Runners page: Go to the Admin area and select the Runners page
  2. Create a runner: Create a runner directly in the GitLab UI or programmatically
  3. Receive the token: You'll receive a runner authentication token with the glrt- prefix
  4. Register the runner: Use the command:
    gitlab-runner register --token $RUNNER_AUTHENTICATION_TOKEN
    2) 옛 레거시 버전도 비교해줌

Legacy Registration Tokens (Deprecated)

The old registration token method is deprecated and planned for removal in GitLab 20.0. If you still need to use it:

gitlab-runner register --registration-token $RUNNER_REGISTRATION_TOKEN <runner configuration arguments>

3) runner 생성 >> token 등록이 시급해 보였음.

Programmatic Creation

You can also create runners programmatically using the REST API:

  1. Create an access token: Generate a personal access token, group access token, or project access token
  2. Use the API: Make a POST request to /runners endpoint with your registration token
  3. Required permissions:
    • Instance runners: Administrator access
    • Group runners: Administrator or Owner role
    • Project runners: Administrator or Maintainer role

gitlab내 ai 챗봇 활용-2


1) 참고로 SaaS버전에선 admin area가 없다는걸 알았다

  • self-manged 버전에서만 사용가능하다는데?

2) 아래는 SaaS내 project 러너 생성하는 방법

On GitLab.com (the SaaS version), you don't have access to the Admin area since you're not an administrator of the entire GitLab.com instance. However, you can still get runner tokens at the project or group level.

Here's how to get a runner token on GitLab.com:

For Project Runners:
1. Go to your project
2. On the left sidebar, select Settings > CI/CD
3. Expand the Runners section
4. You'll find the runner registration information there

For Group Runners:
1. Navigate to your group
2. On the left sidebar, select Settings > CI/CD
3. Expand the Runners section
4. The runner token will be available in this section

Important Note about Runner Registration:
The documentation indicates that in GitLab 17.0, the use of runner registration tokens is disabled by default. The new workflow uses authentication tokens instead of registration tokens. You may need to:

  1. Create a project or group access token with the create_runner scope
  2. Use this token to create a runner configuration via the GitLab REST API or Terraform

To create an access token for runner creation:
1. Go to your project/group settings
2. Navigate to Access Tokens
3. Create a new token with the create_runner scope
4. Use this token to create and register runners through the API

The Admin area is only available on self-managed GitLab instances, not on GitLab.com where you're using the hosted service.

결론 (Success!)

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 "/home/gitlab-runner/.gitlab-runner/config.toml"

#인증 토큰이 포함된 설정 파일이 정상적으로 저장되었음을 나타냅니다.

Proejct runner local 연동 성공시

  • 회색::not contacted >>> 초록::online 으로 버튼이 활성화 된다

과정

local- SaaS 환경

  • local: coliam+ helm + k8s
    • 내 mac OS 환경을 고려해 최대한 경량화(docker desktop 사용안함) dockercli + minimum 설치 (colima 활용)
  • SaaS (Owner) : project runner

용량문제로 docker 저장 경로 변경 시도함

colima start --mount ~/data/docker:/var/lib/docker

  • 실패 이유:

Docker는 /var/lib/docker에 ext4와 같은 리눅스 네이티브 파일 시스템을 요구함

macOS 디렉토리는 NFS로 마운트되기 때문에 overlay2 드라이버가 비호환

  • 해결:
    /mnt/docker-data 등으로 mount 위치 변경
mkdir -p ~/data/docker-volumes
sudo chown $(whoami) ~/data/docker-volumes
colima start --kubernetes --mount ~/data/docker-volumes:/mnt/docker-data --disk 80

Docker 내부 동작은 그대로 두고, 실제 저장은 외부 마운트에만 위임

그 외 Tool

구성 요소목적
ColimaM1 환경에서 Docker & K8s 구동을 위한 가상머신 경량 레이어
DockerGitLab Runner 내부에서 CI 파이프라인 실행 시 사용
KubernetesGitLab Runner 및 앱 배포 환경 제공
HelmGitLab Runner 등 K8s 앱을 Chart로 구성하여 쉽게 설치
GitLabCI/CD 파이프라인 실행, Runner 등록 대상
macOS (M1)기본 운영체제 (ARM64 기반)

helm 특징

기능설명
템플릿화된 배포복잡한 K8s 리소스를 템플릿으로 묶어 한 번에 배포
버전 관리Chart version별 관리 가능
설정 커스터마이징--set key=value 또는 values.yaml로 쉽게 구성 변경
다수 환경 배포dev/stage/prod 환경별로 구성값만 바꿔서 재활용 가능

기존 k8s 를 도커 배포 설치했을 때 문제 상황

Kubernetes에 앱을 배포하려면 Deployment, Service, RBAC, ConfigMap, PVC 등 수많은 yaml 파일을 작성해야 함

이걸 수동으로 하다 보면 반복성, 실수, 유지보수가 어렵고 코드로 관리하기 어려움

GitLab Runner Helm Chart는 내부적으로 이런 걸 포함함

helm-cli 참조
Deployment (Runner Pod)
ConfigMap (Runner 설정)
RBAC
ServiceAccount
Secret (Registration Token)
PVC (캐시 저장소)

chart 도 설치필수

helm repo add gitlab https://charts.gitlab.io

  • 왜 설치해야하지?
    • Helm 저장소(repository)를 추가,
    • GitLab의 Helm Chart 저장소를 로컬 Helm 환경에 등록함.
    • Helm chart 설치는 쿠버네티스 클러스터 내부에만 영향을 줌.

러너 종류

  • Project Runner |특정 프로젝트에만 사용 | 프로젝트Maintainer/Owner

    • 이번 Runner는 "Project Runner"로 등록되어 있음.
    • 즉 Project Runner는 해당 프로젝트의 Maintainer/Owner만 관리 및 등록 가능.
  • Group Runner |그룹 내 모든 프로젝트| 그룹Owner

  • Instance Runner | 인스턴스 전체(모든 프로젝트) |인스턴스 Admin

    • SaaS 에선 생성불가!
    • Instance Runner(공유 러너)는 GitLab이 직접 관리하므로 별도 권한 없이 사용 가능.

Self-hosted가 필요한 경우와 대안

  • Self-hosted 러너가 필요한 경우
    • GPU 기반 ML 모델 훈련이 필요한 경우
    • 특수한 하드웨어 환경 (ARM, 특정 OS) 테스트
    • 대용량 데이터 처리 (400분 초과)

SaaS 러너 선택 이유:

  • 대부분의 기업이 SaaS 솔루션 채택 추세
  • 포트폴리오 프로젝트에는 충분한 무료 할당량
  • 비용 효율성 (무료 400분 vs 서버 운영비)
  • 개발 속도 (설정 시간 0 vs 수십 시간)
  • 실무 적합성 (기업 환경과 동일)
    customized에 특화된 self-hosted 관련 기획안이 계획에 없어서, 1차로 SaaS 성공 이후 self-hosted 도전하기로 함.

주의사항

  • 기존의 shared token 은 사용불가

  • SaaS 에서 기본적으로 ADMIN 권한 없다.

    • 기본적으로 private/ public repo에선 Admin 권한은 더이상 제공하지 않음
      Admin AREA 진짜 없다!
    • 새롭게 public 레포로 직접 만들어서 확인해보니 최대 Owner 권한 상승까지는 가능함 (Maintainer/Owner 두가지 권한 만 사용 가능)
  • 옛 버전 gitlab 에서 클릭으로 customer token 발행도 발행 불가


Error breakPoint

  1. 로그 메시지의 의미 파악의 어려움
  • 실패 ::PANIC: The registration-token needs to be entered

    • 사유: 이는 Runner가 GitLab과 통신할 인증 토큰을 찾지 못해 등록에 실패하는 현상입니다.
    • 해결방법
    1. values.yaml 내 토큰 설정 오류
      최신 Helm Chart(0.77.x 이상)에서는 반드시 runners.authTokens 배열에 glrt-로 시작하는 토큰을 입력해야 하며,
NAME                  CHART VERSION APP VERSION DESCRIPTION
gitlab/gitlab-runner  0.64.0        16.11.0     GitLab Runner
gitlab/gitlab-runner  0.63.0        16.10.0     GitLab Runner
gitlab/gitlab-runner  0.62.1        16.9.1      GitLab Runner
gitlab/gitlab-runner  0.62.0        16.9.0      GitLab Runner
gitlab/gitlab-runner  0.61.3        16.8.1      GitLab Runner
gitlab/gitlab-runner  0.61.2        16.8.0      GitLab Runner
...
  1. TOML config(runners.config) 내 token = ... 라인이나,
    최상단의 runnerToken, runnerRegistrationToken 필드는 절대 사용하면 안 됩니다.
  2. 만약 TOML config에 token = ...이 남아 있거나,
    runners.authTokens가 비어 있으면 위와 같은 에러가 발생합니다.
#value.yaml
# gitlab-runner-values.yaml
gitlabUrl: "https://gitlab.com/" # 실제 GitLab 인스턴스 URL로 변경
runnerRegistrationToken: "YOUR_RUNNER_REGISTRATION_TOKEN" # 실제 토큰으로 변경

# Kubernetes Executor 설정
runners:
  privileged: true # Docker-in-Docker 등을 위해 필요한 경우 true로 설정. 보안상 고려 필요.
  tags: "colima,kubernetes,m1" # 러너 태그
  config: |
    [[runners]]
      [runners.kubernetes]
        namespace = "default"
        # 각 잡이 사용하는 리소스 제한 (M1 메모리 효율을 위해 중요!)
        # 이 값은 프로젝트의 CI/CD 요구사항에 따라 조절해야 합니다.
        # 너무 낮으면 잡이 실패할 수 있고, 너무 높으면 메모리가 부족해질 수 있습니다.
        cpu_limit = "1"        # 각 잡은 최대 1 CPU 코어 사용
        memory_limit = "1Gi"   # 각 잡은 최대 1GB 메모리 사용
        cpu_request = "0.5"    # 각 잡은 최소 0.5 CPU 코어 요청
        memory_request = "512Mi" # 각 잡은 최소 512MB 메모리 요청

        # Kubernetes Executor의 Image Pull Policy
        image_pull_policy = "IfNotPresent" # 이미지 없으면 pull, 있으면 기존 사용

        # CI 잡 컨테이너의 Docker Daemon 동작을 위한 privileged 모드 활성화 (Docker-in-Docker 필요 시)
        # privileged: true

        # 서비스 컨테이너를 위한 리소스 제한 (필요시 추가)
        # [[runners.kubernetes.service_account]]
        #   name = "gitlab-runner"
        #   namespace = "default"

        # 볼륨 마운트 설정 (옵션, 캐시 등에 활용)
        # [[runners.kubernetes.volumes]]
        #   name = "data"
        #   mount_path = "/cache"
        #   type = "emptyDir" # 임시 볼륨, Pod 종료 시 사라짐

# 서비스 계정 권한 설정 (필요 시)
rbac:
  create: true

# GitLab Runner의 Pod 리소스 제한 (GitLab Runner 자체 Pod)
resources:
  requests:
    cpu: "100m"
    memory: "128Mi"
  limits:
    cpu: "200m"
    memory: "256Mi"
  • 성공 :: 이전과 달리 PANIC: The registration-token needs to be entered 에러가 더 이상 보이지 않습니다.
  1. 버전별 token migration method가 다름
  • 공식문서에 업데이트되어있긴함
  • runner를 만들때 gitlab에서 배포 환경별 외부 링크/curl bash script를 제공하니 확인필.
  1. authentication token || registration token

    registration token

  • 이 토큰은 Runner 등록 자체만을 위한 일회성 또는 제한적인 목적으로 사용되었고, Runner가 일단 등록되면 이 토큰은 더 이상 사용되지 않는다고 함.
    • Register token 은 'GR-'로 시작함
    • 아직 등록되지 않은 새로운 Runner를 GitLab에 등록할 때 사용하는 "등록 토큰"입니다.
    • 현황: GitLab 15.6부터 사용이 중단(Deprecated)되기 시작했으며, GitLab 20.0에서는 완전히 제거될 예정입니다. 즉, 이제는 이 토큰을 사용하는 방식은 권장되지 않습니다

    authentication token

  • 기본은 authentication token(runner 내 token 활용을 위해) 등록해야함
    • 로컬에서 배포중인 pods에 project runner를 동록해야하므로
    • 이미 생성된 Runner의 "인증 토큰"이다.
    • glrt- xxxx 형태로 제공됨
    • 현황: 현재 GitLab에서 Runner를 등록하고 운영하는 공식적이고 권장되는 방식입니다.
    • SaaS 에선 create project 후 위 페이지에서 딱 1번만 보여지기 때문에 authentication token cp 필수!
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner

# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

secret.yaml 을 추가해서 최종 등록완료함

  1. glrt- 토큰을 base64로 인코딩
    echo -n "glrt-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" | base64
  2. Secret YAML 파일 작성
    k8s_secret
apiVersion: v1
kind: Secret
metadata:
  name: gitlab-runner-secret
  namespace: default  # Runner가 배포될 네임스페이스와 일치해야 함
type: Opaque
data:
  runner-token: <base64-encoded-glrt-token>
  runner-registration-token: ""
<base64-encoded-glrt-token> 부분에 위에서 인코딩한 값을 넣으세요.

위 runner token 양식은 redhat참조
3. Secret 생성

  1. values.yaml에서 Secret 사용 설정
  2. values.yaml에 secretName 지정
  3. Helm Chart로 Runner 재배포

Secret 방식 적용 효과

  • 직접 Secret을 생성하여 base64 인코딩된 glrt- 토큰을 넣고, values.yaml에서 runners.secret로 지정한 방식이 정상적으로 적용된 것입니다.

  • 이 방식은 Helm Chart 0.77.x 이상, Runner 18.x 환경에서 권장되는 최신 등록 방식입니다.

gitlabrunner in dockd
gitlab runner in helm
helm-value.yaml설정

profile
🏠TECH & GOSSIP

0개의 댓글