1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/project_harbor-harbor

Клонировать/Скачать
CONTRIBUTING.md 27 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 07.03.2025 20:01 d5af08d

Вклад в проект Harbor

Добро пожаловать

Проект Harbor развивается открыто и постоянно улучшается благодаря нашим пользователям, вкладчикам и поддерживателям.
Благодаря вам мы можем предлагать отличные решения сообществу.

Этот гайд предоставляет информацию о создании проблем и руководства для участников открытого исходного кода. Пожалуйста, оставьте свои комментарии / предложения, если вы заметили недостающую или неверную информацию.

Участники приглашаются к сотрудничеству с использованием следующих ресурсов помимо трекера задач на GitHub:

Подпишитесь на нас в Twitter на @project_harbor

Начало работы

Разветвление репозитория

Разветвите репозиторий Harbor на GitHub на ваш личный аккаунт.

# Настройте окружение Go
export GOPATH=$HOME/go
mkdir -p $GOPATH/src/github.com/goharbor
```# Получите код
go get github.com/goharbor/harbor
cd $GOPATH/src/github.com/goharbor/harbor

# Отслеживание репозитория под вашим личным аккаунтом
git config push.default nothing # Чтобы избежать случайной отправки на goharbor/harbor по умолчанию
git remote rename origin goharbor
git remote add $USER git@github.com:$USER/harbor.git
git fetch $USER

ЗАМЕЧАНИЯ: GOPATH может быть любой директорией, пример выше использует $HOME/go. Измените $USER выше на свой собственный GitHub username.

Для сборки проекта, обратитесь к руководству сборки.

Структура репозитория

Вот базовая структура кодовой базы Harbor. Некоторые ключевые папки / файлы прокомментированы для вашего удобства.

.
...
├── contrib       # Содержит документацию, скрипты и другие полезные вещи, предоставленные сообществом
├── make          # Ресурсы для сборки и установки окружения Harbor
...
├── src           # Папка исходного кода
├── tests         # Тестовые случаи для тестирования API / e2e
└── tools         # Содержит поддерживающие инструменты
...

Картинка ниже показывает структуру папки с исходным кодом harbor/src, которая станет вашей основной рабочей директорией. Основные папки также имеют пояснения.```markdown . ├── chartserver # Исходный код содержит основную логику для работы с чартами. ├── cmd # Исходный код содержит скрипт миграции для обработки обновлений базы данных. ├── common # Исходный код для общих компонентов, таких как DAO и т. д. │ ├── api │ ├── config │ ├── dao │ ├── http │ ├── job │ ├── models │ ├── rbac │ ├── registryctl │ ├── secret │ ├── security │ └── utils ├── core # Исходный код для основной бизнес-логики. Включает REST API и всю информацию о сервисах. │ ├── api │ ├── auth │ ├── config │ ├── controllers │ ├── filter │ ├── label │ ├── notifier │ ├── promgr │ ├── proxy │ ├── service │ ├── systeminfo │ ├── utils │ └── views ├── jobservice # Исходный код для компонента управления задачами. │ ├── api │ ├── config │ ├── core │ ├── env │ ├── errs │ ├── job │ ├── logger │ ├── models │ ├── opm │ ├── period │ ├── pool │ ├── runtime │ ├── tests │ └── utils ├── portal # Исходный код веб-интерфейса Harbor │ ├── e2e │ ├── lib # Исходный код библиотеки @harbor/ui npm, которая включает основные компоненты веб-интерфейса. │ └── src # Общие страницы веб-интерфейса Harbor. ├── registryctl # Исходный код содержит основную логику для работы с регистром. ├── replication # Исходный код содержит основную логику репликации. ├── testing # Некоторые утилиты для тестирования.


└── vendor # зависимости Go-кода ├── github.com ├── golang.org ├── google.golang.org └── gopkg.in

```### Настройка среды разработки
#### Go
Backend Harbor написан на [Go](http://golang.org/). Если у вас нет среды разработки для сервиса backend Harbor, пожалуйста, [настройте её](https://golang.org/doc/install).

|  Версия Harbor  |  Требуется Go  |
|------------------|-----------------|
|       1.1        |      1.7.3      |
|       1.2        |      1.7.3      |
|       1.3        |      1.9.2      |
|       1.4        |      1.9.2      |
|       1.5        |      1.9.2      |
|       1.6        |      1.9.2      |
|       1.7        |      1.9.2      |
|       1.8        |      1.11.2     |
|       1.9        |      1.12.12    |
|       1.10       |      1.12.12    |
|       2.0        |      1.13.15    |
|       2.1        |      1.14.7     |

Убедитесь, что ваш GOPATH и PATH были настроены в соответствии с инструкциями окружения Go.

**Управление зависимостями:** Harbor использует [dep](https://github.com/golang/dep) для управления зависимостями Go-кода. Официально поддерживаемые версии будут отвечать за управление кодом в директории `vendor`. Пожалуйста, не пытайтесь отправить Pull Request для обновления зависимости кода, откройте Issue вместо этого. Если ваш Pull Request требует изменений в коде vendor, убедитесь, что вы обсудили это с поддерживаемыми версиями заранее.

#### Веб

Web-интерфейс Harbor основан на [Clarity](https://vmware.github.io/clarity/) и [Angular](https://angular.io/) веб-фреймворках. Для настройки среды разработки web-интерфейса, убедитесь, что инструмент [npm](https://www.npmjs.com/get-npm) установлен первым.|  Harbor  |  Требуется Angular  |  Требуется Clarity  |
|----------|---------------------|---------------------|
|   1.1    |      2.4.1          |       0.8.7        |
|   1.2    |      4.1.3          |       0.9.8        |
|   1.3    |      4.3.0          |       0.10.17      |
|   1.4    |      4.3.0          |       0.10.17      |
|   1.5    |      4.3.0          |       0.10.27      |
|   1.6    |      4.3.0          |       0.10.27      |
|   1.7    |      6.0.3          |       0.12.10      |
|   1.8    |      7.1.3          |       1.0.0        |**Зависимости npm-пакета:** Выполните следующие команды для восстановления зависимостей пакета.

Для web-интерфейса

cd $REPO_DIR/src/portal npm install

Для библиотеки UI

cd $REPO_DIR/src/portal/lib npm install


Чтобы запустить код, обратитесь к [руководству сборки](https://goharbor.io/docs/2.0.0/build-customize-contribute/compile-guide/).

## Процесс внесения вклада

Предложения (Pull Request, PR) всегда приветствуются, даже если они содержат небольшие исправления, такие как опечатки или несколько строк кода. В случае значительных усилий, пожалуйста, оформите это в виде задачи (issue) и начните обсуждение до начала работы над ней.

Пожалуйста, отправьте предложение с разделением на небольшие изменения по частям. Предложение, содержащее много новых функций и изменений кода, может быть сложно проверять. Рекомендуется отправлять предложения поэтапно.

Примечание: Если вы разделяете своё предложение на небольшие изменения, убедитесь, что любое из этих изменений, которое будет включено в основной код (`master`), не вызывает проблем. В противном случае, оно не сможет быть объединено до завершения всех необходимых работ.

### Создайте форк и клонируйте

Создайте форк репозитория Harbor и склонируйте код в ваше локальное рабочее пространство. По указанию Go [инструкций по рабочему пространству](https://golang.org/doc/code.html#Workspaces), расположите код Harbor в вашем `GOPATH`. Для получения подробностей обратитесь к разделу [Форка репозитория](#fork-repository).Определите локальное рабочее пространство:
```bash
working_dir=$GOPATH/src/github.com/goharbor

Установите пользователя, чтобы имя совпадало с вашим профилем GitHub:

user={ваше имя профиля GitHub}

Оба $working_dir и $user указаны выше.

Ветка

Изменения должны выполняться в новой ветке вашего форка. Название ветки должно быть XXX-описание, где XXX — номер задачи. Предложение должно быть основано на вершине ветки master без смешивания нескольких веток в одном предложении. Если ваше предложение не объединяется чисто, используйте команды ниже, чтобы обновить его.

# goharbor — это исходный репозиторий

cd $working_dir/kubernetes
git fetch goharbor
git checkout master
git rebase goharbor/master

Создайте ветку от обновленной ветки master:

git checkout -b моя_функциональность master

Разработка, сборка и тестирование

Напишите код в новой ветке вашего форка. Стиль программирования, используемый в проекте Harbor, рекомендован сообществом Go. Подробнее см. документацию по стилю.Постарайтесь ограничить ширину столбцов до 120 символов для обоих кода и документов в формате Markdown, таких как этот. Так как мы внедряем стандарты, установленные golint, пожалуйста, всегда запускайте golint перед коммитом ваших изменений. Если он выявляет проблему, в общем случае, предпочитаемым действием является исправление кода с целью соответствия рекомендациям линтера, так как golint предоставляет предложения согласно стилистическим конвенциям, приведенным в Effective Go и CodeReviewComments.

# Установка fgt и golint
``````bash
go get -u golang.org/x/lint/golint
go get github.com/GeertJohan/fgt
```# В директории working_dir/harbor выполните:

go list ./... | grep -v -E 'vendor|tests' | xargs -L1 fgt golint

```

Примеры тестовых случаев должны быть добавлены для покрытия нового кода. Для бэкенд-сервисов используется тестовый фреймворк [go testing](https://golang.org/doc/code.html#Testing). Тестовый фреймворк для библиотек пользовательского интерфейса основан на [Jasmine](http://jasmine.github.io/2.4/introduction.html) и [Karma](https://karma-runner.github.io/1.0/index.html), подробнее см. [Angular Testing](https://angular.io/guide/testing).

Выполнение тестовых случаев для Go:
```
# cd #working_dir/src/[пакет]
go test -v ./...
```

Выполнение тестовых случаев для библиотек пользовательского интерфейса:
```
# cd #working_dir/src/portal/lib
npm run test
```

Для сборки кода обратитесь к руководству [build](https://goharbor.io/docs/2.0.0/build-customize-contribute/compile-guide/).

### Сохранение синхронизации с основной веткой

Если ваша ветка вышла из синхронизации с веткой goharbor/master, используйте следующие команды для обновления:
```bash
git checkout my_feature
git fetch -a
git rebase goharbor/master
```

Пожалуйста, используйте `fetch / rebase` (как показано выше), а не `git pull`. Команда `git pull` выполняет слияние, что приводит к появлению слиятельных коммитов. Это делает историю коммитов запутанной и нарушает принцип, согласно которому каждый коммит должен быть отдельно понятным и полезным (см. ниже). Вы также можете рассмотреть возможность изменения файла конфигурации .git/config через `git config branch.autoSetupRebase always`, чтобы изменить поведение `git pull`.
### Коммит

Как Harbour внедрил проверочный инструмент [DCO (Developer Certificate of Origin)](https://probot.github.io/apps/dco/), участники проекта обязаны подписать свои коммиты, указывая, что они соблюдают эти требования, добавляя строку `Signed-off-by` в сообщении коммита. Git предоставляет командную строку `-s`, которая автоматически добавляет эту строку к вашему сообщению коммита, пожалуйста, используйте её при создании ваших коммитов.

```bash
$ git commit -s -m 'Это мое сообщение коммита'
```

Коммитируйте ваши изменения, если они готовы:
```bash
git add -A
git commit -s #-a
git push --force-with-lease $user my_feature
```

Сообщение коммита должно соответствовать правилам [Как правильно составить сообщение коммита](http://chris.beams.io/posts/git-commit/). Убедитесь, что вы включили любые связанные ссылки на задачи GitHub в сообщении коммита. Смотрите [синтаксис GFM](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) для ссылок на задачи и коммиты. Чтобы помочь составлять корректные сообщения о коммите, рекомендуется установить [git-good-commit](https://github.com/tommarshall/git-good-commit) хук коммита. Выполните эту команду в корневой директории репозитория Harbor:

```
curl https://cdn.rawgit.com/tommarshall/git-good-commit/v0.6.1/hook.sh > .git/hooks/commit-msg && chmod +x .git/hooks/commit-msg
```### Автоматическое тестирование
Как только ваш запрос на слияние будет открыт, Harbor запустит два CI-пайплайна против него.
1. В CI-системе Travis, ваш исходный код будет проверяться через `golint`, `go vet` и `go race`, что гарантирует читаемость, безопасность и корректность кода. Также все юнит-тесты будут запущены через `go test` против вашего запроса на слияние. Обратите внимание на результаты Travis и отчёт о покрытии.
   * Если возникнет сбой в Travis, вам потребуется выявить, был ли он вызван вашими коммитами.
   * Если покрытие значительно упало, вам потребуется добавить юнит-тесты для обеспечения покрытия вашего кода.
2. В CI-системе Drone, будут запущены E2E-тесты против вашего запроса на слияние. Также исходный код будет проверяться через `gosec`, а результаты будут сохранены в Google Storage для последующего анализа. Этот пайплайн предназначен для сборки и установки Harbor из исходного кода, затем выполнения четырёх очень базовых E2E-тестов для проверки основных функциональностей Harbor, таких как:
   * Базовая верификация реестра, чтобы проверить возможность успешной загрузки и отправки образа.
   * Базовая верификация Clair, чтобы проверить возможность успешного сканирования образа.
   * Базовая верификация Notary, чтобы проверить возможность успешной подписи образа.
   * Базовая верификация LDAP, чтобы проверить работу Harbor в окружении LDAP.### Отправка и создание запроса на слияние
Когда ваша работа готова для проверки, отправьте свою ветку в ваш форк репозитория на `github.com`:
```
git push --force-with-lease $user my_feature
```

Затем посетите ваш форк по адресу https://github.com/$user/harbor и нажмите кнопку "Compare & Pull Request" рядом со своей веткой `my_feature`, чтобы создать новый запрос на слияние (PR). Описание запроса на слияние должно ссылаться на все проблемы, которые он решает. Убедитесь, что вы указали ссылку на проблемы (например, `Closes #XXX` и `Fixes #XXX`) в ваших коммитах, чтобы эти проблемы были закрыты при слиянии PR.

Как только ваш запрос на слияние будет открыт, его назначат одному или нескольким проверяющим. Эти проверяющие проведут тщательную проверку кода, ища ошибки, возможности для улучшения, документацию и стиль. Принять изменения, внесенные в ответ на отзывы, в ту же ветку вашего форка.

## Доклад о проблемах

Это отличный способ внести свой вклад в проект Harbor, сообщив о проблеме. Хорошие, подробные отчеты о багах всегда приветствуются! Пожалуйста, откройте проблему на GitHub и следуйте шаблону для заполнения необходимой информации.Перед тем как создать новую проблему, пожалуйста, проверьте существующие [проблемы](https://github.com/goharbor/harbor/issues), чтобы избежать отправки повторной проблемы.
Если вы найдете совпадение, вы можете подписаться на неё, чтобы получать уведомления о её обновлении. Если у вас есть полезная информация о проблеме, пожалуйста, оставьте комментарий.При докладе о проблемах обязательно включите:

* Версию движка Docker и файла docker-compose
* Конфигурационные файлы Harbor
* Журналы в `/var/log/harbor/`

Из-за того, что проблемы доступны всем, при отправке журналов и конфигурационных файлов убедитесь, что удалены все чувствительные данные, такие как имя пользователя, пароль, адрес IP и название компании. Вы можете заменить эти части словами "REDACTED" или другими строками типа "****".

Убедитесь, что вы включили шаги для воспроизведения проблемы, если это применимо. Это поможет нам быстрее понять и исправить вашу проблему.

## Обновление документации

Обновите документацию, если вы создаёте или изменяете функции. Хорошая документация так же важна, как сам код.

Основное место хранения документов — это [репозиторий сайта](https://github.com/goharbor/website). Изображения, упомянутые в документах, могут быть расположены в `docs/img` этого репозитория.

Документы пишутся с использованием Markdown. Подробнее см. [Написание на GitHub](https://help.github.com/categories/writing-on-github/).

## Проектирование новых функцийВы можете предложить новые дизайны для существующих функций Harbor. Также можно проектировать полностью новые функции. Пожалуйста, представьте свою идею на GitHub (https://github.com/goharbor/community/tree/master/proposals). Модераторы проекта будут рассматривать ваше предложение как можно скорее. Это необходимо для обеспечения согласованности архитектуры и предотвращения дублирования работы в плане развития.

[community-meetings]: https://github.com/goharbor/community/blob/master/MEETING_SCHEDULE.md
[past-meetings]: https://www.youtube.com/playlist?list=PLgInP-D86bCwTC0DYAa1pgupsQIAWPomv
[users-slack]: https://cloud-native.slack.com/archives/CC1E09J6S
[dev-slack]: https://cloud-native.slack.com/archives/CC1E0J0MC
[cncf-slack]: https://slack.cncf.io
[users-dl]: https://lists.cncf.io/g/harbor-users
[dev-dl]: https://lists.cncf.io/g/harbor-dev
[twitter]: https://twitter.com/project_harbor

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/project_harbor-harbor.git
git@api.gitlife.ru:oschina-mirror/project_harbor-harbor.git
oschina-mirror
project_harbor-harbor
project_harbor-harbor
master