ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Gitlab CI
    Tool 2023. 7. 20. 14:01
    728x90
    반응형

    Gitlab

     

    깃랩은 깃랩 사가 개발한 깃 저장소 및 CI/CD, 이슈 추적, 보안성 테스트 등의 기능을 갖춘 웹 기반의 데브옵스 플랫폼으로써, 오픈 소스 라이선스 및 사유 소프트웨어 라이선스를 사용한다.

    Runner

    Gitlab에서 빌드 및 테스트 등 CI작업을 하기 위해서는 작업을 수행하는 runner가 필요하다. docker, kubernetes 등 다양한 러너를 지원하지만 kubernetes runner를 helm chart를 통해 설치하고 등록하여 사용하였다.

    설치

    $ helm repo add gitlab https://charts.gitlab.io
    $ helm init
    $ helm repo update gitlab
    $ helm search repo -l gitlab/gitlab-runner
    $ helm install --namespace <NAMESPACE> gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner

    등록

    Gitlab에서 runner를 생성하고 token을 발급받은 뒤 등록하면 된다.

    Settings > CI/CD > Runners > New project runner

    $ helm upgrade --namespace gitlab-runner -f setting.yml  gitlab-runner --set gitlabUrl=http://xxx.xxx.xxx.xxx,runnerRegistrationToken=<TOKEN> gitlab/gitlab-runner

    settings.yml

    # kubernetes에 serviceaccount를 등록해야한다. 기본적으로는 없다.
    rbac:
      create: true
      serviceAccountName: system:serviceaccount:gitlab-runner:default
    
    # dind를 이용하기 위해 privileged를 사용해야한다.
    runners:
      privileged: true

     

    Docker Registry

    기본적으로 Gitlab은 docker registry를 지원한다. 하지만 Docker registry를 별도로 설치하고 연결할 수 도 있다. 아래 Docker registry 를 등록하고 gitlab과 연결해 주어야 한다. gitlab에 아래 설정을 적용해야 메뉴에 Container Registry를 볼 수 있다.

    docker-registry-deploy.yml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: docker-registry
    spec:
      selector:
        matchLabels:
          app: docker-registry
      template:
        metadata:
          labels:
            app: docker-registry
        spec:
          containers:
          - name: docker-registry
            image: registry:2
            ports:
            - containerPort: 5000
              protocol: TCP
            volumeMounts:
              - name: registry
                mountPath: /var/lib/registry
          volumes:
          - name: registry
            hostPath:
              path: /registry
              type: DirectoryOrCreate
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: docker-registry-svc
    spec:
      type: NodePort
      ports:
      - port: 5000
        nodePort: 32000
        protocol: TCP
      selector:
        app: docker-registry

    gitlab.rb

    registry_external_url 'http://<NodeIP>:32000'
    registry['registry_http_addr'] = "<NodeIP>:32000"
    

     

    Pipeline

    Gitlab에서는 CI/CD는 Pipeline을 만들어서 관리한다. Pipeline은 .gitlag-ci.yml 파일을 작성하면 특정 조건에서 Job을 생성하고 동작하도록 커스터마이징 할 수 있다.

    예시) 아래 yaml 파일은 spring-boot 프로젝트를 build하고 docker image를 만들어 등록하는 Pipeline이다. Job은 build, package가 된다.

    stages:
      - build
      - package
    
    cache:
      paths:
        - .gradle/wrapper
        - .gradle/caches
    
    build:
      image: openjdk:11
      stage: build
      only:
        - main
      before_script:
        - chmod +x ./gradlew
      script:
        - ./gradlew clean build
      artifacts:
        paths:
          - build/libs/*.jar
        expire_in: 1 week
      tags:
        - kubernetes
    
    package:
      variables:
        DOCKER_HOST: tcp://docker:2375/
        DOCKER_DRIVER: overlay2
        DOCKER_TLS_CERTDIR: ""
      image: docker:latest
      stage: package
      only:
        - main
      services:
        - name: docker:20.10.16-dind
          alias: docker
          command: ["--tls=false", "--insecure-registry=<docker registry IP"]
      before_script:
        - until docker info; do sleep 1; done
        - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
      script:
        - docker build -t $CI_REGISTRY_IMAGE:latest .
        - docker push $CI_REGISTRY_IMAGE:latest
      after_script:
        - docker logout
      tags:
      - kubernetes

     

     

    Reference

    728x90
    반응형

    'Tool' 카테고리의 다른 글

    Kubernetes Prometheus Monitoring  (0) 2023.08.01

    댓글

Designed by Tistory.