개발자 안내서

이 개발자 안내서는 새로 온 개발자가 프로젝트에 기여할 수 있도록 환경을 설정하는 방법을 안내합니다.

개발 환경 설정

오퍼레이터 개발을 위해 시스템을 설정하려면 다음 단계를 따르세요:

  1. gitlab-operator 리포지토리를 GOPATH에 복제합니다.

    git clone git@gitlab.com:gitlab-org/cloud-native/gitlab-operator.git
    cd gitlab-operator
    
  2. 런타임 종속성을 관리하기 위해 asdf를 설치합니다.

  3. 런타임 종속성을 설치합니다.

    cut -d' ' -f1 .tool-versions | xargs -i asdf plugin add {}
    asdf plugin add opm https://gitlab.com/dmakovey/asdf-opm.git
    asdf install
    
  4. 리포지토리의 루트에서 task를 실행하여 사용 가능한 명령을 확인합니다.

    이 프로젝트에서는 make 대신 taskfile.devtask를 사용합니다. 여기에서 자세한 내용을 확인하세요.

    brew install tasktask를 설치하지 마세요. 다른 패키지인 Taskwarrior가 설치됩니다. 앞서 설명한 asdf 플러그인을 사용하거나 taskfile.dev의 설치 지침에 따르세요.

    우리의 작업 정의는 Taskfile.yaml에서 확인할 수 있습니다.

프로젝트 구조

GitLab Operator는 Operator SDK v1.0.0을 사용하여 작성되었으며, 이에 따라 Kubebuilder v2 레이아웃 형식을 사용합니다. 이는 프로젝트 디렉토리와 오퍼레이터 SDK에서 사용하는 일부 도구에 변경이 있었기 때문에 알아야 하는 사항입니다.

$ pwd
gitlab-operator
$ tree -dL 2 .
.
├── api
│   └── v1beta1
├── bundle
│   ├── manifests
│   ├── metadata
│   └── tests
├── config
│   ├── certmanager
│   ├── crd
│   ├── default
│   ├── deploy
│   ├── manager
│   ├── manifests
│   ├── prometheus
│   ├── rbac
│   ├── samples
│   ├── scorecard
|   ├── test
│   └── webhook
├── controllers
│   ├── backup
│   ├── gitlab
│   ├── helpers
│   ├── runner
│   ├── settings
│   ├── testdata
│   └── utils
├── doc
├── hack
│   └── assets
├── helm
│   └── testdata
└── scripts
    └── manifests
  • controllers 디렉토리는 GitLab 및 GitLab 백업 컨트롤러의 구현을 포함합니다.
  • api 디렉토리에는 오퍼레이터가 소유한 GitLab 및 GLBackup 리소스의 API 리소스 정의가 포함되어 있습니다. API 정의는 API 버전에 따라 그룹화됩니다. api/<api_version> 안의 *_types.go 파일에는 사용자 정의 리소스 정의 및 OLM에서 사용하는 사용자 정의 리소스 정의 및 클러스터 서비스 버전 파일을 생성하는 데 사용되는 마커가 포함되어 있습니다.
  • config/samples 디렉토리에는 GitLab 사용자 정의 리소스에 대한 예제 매니페스트가 포함되어 있습니다.
  • config/test 디렉토리에는 통합 테스트를 실행하는 데 사용되는 매개변수화된 GitLab 정의가 포함되어 있습니다.

    다음은 예시입니다:

    // +kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete

    config/rbac/custom의 내용은 수동으로 생성되었으며 RBAC 마커의 영향을 받지 않습니다.

    구성 디렉토리의 다른 많은 내용은 자동으로 생성되지만 kustomize를 사용하여 수정할 수 있습니다.

  • scriptshack/assets 경로에는 컨테이너 이미지를 빌드할 때 오퍼레이터 이미지 내부에 넣어야 하는 리소스가 포함되어 있습니다. 여기에 릴리스 파일이 들어갑니다.

오퍼레이터 배포

오퍼레이터를 배포하는 방법은 설치 문서에서 확인할 수 있습니다.

디버깅

controllers/gitlab/template_test.go에는 기능 개발과 테스트 작성을 지원하기 위해 몇 가지 함수가 추가되었습니다.

  • dumpTemplate(template)
  • dumpTemplateToFile(template, filename)
  • dumpHelmValues(values)
  • dumpHelmValuesToFile(values, filename)

dumpTemplate() 함수는 GitLab 어댑터에서 템플릿 객체를 가져와 Helm 차트의 렌더링된 YAML을 문자열로 반환합니다. Go 테스트 프레임워크가 표준 출력에 기록된 내용을 흡수하기 때문에 dumpTemplateToFile() 함수는 검사를 위해 YAML을 파일에 씁니다. 파일명만 제공하면 테스트 파일이 있는 하위 디렉토리에 파일이 쓰여지며, 원하는 경우 테스트가 시작된 디렉토리에 파일을 쓰려면 절대 파일 경로가 필요합니다.

비슷하게, dumpHelmValues()는 Helm 값의 YAML 표현을 문자열로 반환합니다. 이는 테스트를 시작할 때 의도한 값이 설정되었는지 확인하는 데 사용될 수 있습니다. dumpHelmValues() 함수는 YAML을 검사하기 위해 파일에 쓰이며, 파일명 인수에는 dumpTemplateToFile()와 동일한 제한이 있습니다.