개발자 안내서
이 개발자 안내서는 새로운 개발자가 이 프로젝트에 기여할 수 있는 환경을 설정하는 방법에 대해 안내합니다.
개발 환경 설정
오퍼레이터를 개발하기 위해 시스템을 설정하려면 다음 단계를 따르세요:
-
gitlab-operator
리포지토리를 GOPATH에 클론합니다.git clone git@gitlab.com:gitlab-org/cloud-native/gitlab-operator.git cd gitlab-operator
-
런타임 종속성을 관리하기 위해
asdf
를 설치합니다. -
런타임 종속성을 설치합니다.
cut -d' ' -f1 .tool-versions | xargs -i asdf plugin add {} asdf plugin add opm https://gitlab.com/dmakovey/asdf-opm.git asdf install
-
리포지토리 루트에서
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()
와 같은 제한이 있습니다.