-
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