개발자 안내서

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

개발 환경 설정

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

  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 대신 task from taskfile.dev을 사용합니다. 그 이유는 여기에 있습니다.

    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 파일에는 CRD 및 OLM에서 사용되는 Custom Resource Definitions 및 Cluster Service Version 파일을 생성하는 데 사용하는 스펙 정의와 마커가 포함되어 있습니다.
  • config/samples 디렉토리에는 GitLab Custom Resource의 예제 매니페스트가 포함되어 있습니다.
  • config/test 디렉토리에는 통합 테스트를 실행하는 데 사용되는 매개 변수화된 GitLab 정의가 포함되어 있습니다.

    아래는 예시입니다:

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

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

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

  • hack/assets 경로에는 컨테이너 이미지를 작성하는 동안 이미지에 푸시해야 하는 리소스가 포함되어 있습니다. 여기에는 릴리스 파일이 들어갑니다.

오퍼레이터 배포

오퍼레이터를 배포하는 방법에 대한 지침은 installation docs를 참조하세요.

디버깅

controllers/gitlab/template_test.go에 추가된 여러 함수가 있습니다. 이러한 함수들은 기능 개발 및 테스트 작성을 돕기 위한 것입니다.

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

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

마찬가지로 dumpHelmValues()는 Helm 값의 YAML 표현을 문자열로 반환합니다. 이것은 테스트의 시작 시 원하는 값이 설정되었는지 확인하는 데 사용될 수 있습니다. dumpHelmValues() 함수는 YAML을 검사하기 위해 파일에 쓰이며 파일명 매개변수에는 dumpTemplateToFile()와 같은 제한이 있습니다.