개발자 가이드

이 개발자 가이드는 새로 온 개발자가 이 프로젝트에 기여하기 위해 환경을 설정하는 방법에 대해 안내합니다.

개발 환경 설정

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

  1. GOPATH에 gitlab-operator 리포지터리를 클론합니다.

    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.dev에서 task를 사용합니다. 이유는 여기에 있습니다.

    brew install task를 사용하여 task를 설치하지 마세요. 다른 패키지인 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 표시에 영향을받지 않습니다.

    config 디렉터리의 대부분 다른 내용은 자동으로 생성되지만 kustomize를 사용하여 수정할 수 있습니다.

  • hack/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을 파일에 기록하고 파일 이름 인수에 동일한 제한이 적용됩니다.