gitea

Вступление

Gitea Gitea - это удобный, современный и самостоятельно размещаемый сервис для разработки программного обеспечения. Он включает в себя хостинг Git, обзор кода, совместную работу команд, реестр пакетов и CI/CD. Подобно GitHub, Bitbucket и GitLab, Gitea предлагает полный набор инструментов для разработки и управления кодом.

Основное преимущество Gitea заключается в его легковесности и простом интерфейсе. В нем доступны все необходимые функции, такие как отслеживание задач, pull-запросы, обзор кода и вики-страницы. Особенно стоит отметить поддержку различных методов аутентификации, включая OAuth, LDAP и двухфакторную аутентификацию.

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

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

Развёртывание инфраструктуры

В данном руководстве мы будем использовать Docker compose как платформу для построения инфраструктуры. Мы развернём следущие компоненты: Gitea server (gitea/gitea), Postgres 14 (postgres:14) и Gitea Act runner (gitea/act_runner). В добавок мы настроим Microsoft EntraID аутентификацию.

Все необходимые файлы можно найти здесь

Стркутра демо:

..
|-- docker-compose.core.yaml
|-- docker-compose.act_runner.yaml
|-- act_runner.env
|-- gitea.env
|-- pgsql.env

Установка Gitea сервера

  1. Создайте папку проекта и скопируйти демоо файлы из репозитория

  2. Удобным способом создайте папки data и gitea

  3. Определите переменные в pgsql.env

pgsql.env
POSTGRES_USER=gitea
POSTGRES_DB=gitea
POSTGRES_PASSWORD=GiTEA123
  1. Отредактируйте gitea.env и задайте переменные
gitea.env
USER_UID=1000
USER_GID=1000
GITEA__database__DB_TYPE=postgres
GITEA__database__HOST=gitea-pgsql:5432
GITEA__database__NAME=gitea
GITEA__database__USER=gitea
GITEA__database__PASSWD=GiTEA123
  1. Выполните docker compose -f ./docker-compose.core.yaml up -d, чтобы развернуть Gitea сервер
docker-compose.core.yaml
name: gitea-demo

services:
  db:
    container_name: gitea-pgsql
    image: postgres:14
    restart: always
    env_file:
      - pgsql.env
    networks:
      - gitea
    volumes:
      - postgres-db-volume:/var/lib/postgresql/data


  server:
    container_name: gitea-server
    image: gitea/gitea
    restart: always
    env_file:
      - gitea.env
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "22:22"
    depends_on:
      - db
  
volumes:
  postgres-db-volume:

networks:
  gitea:
    name: gitea-net

Обратите внимание, что будут открыты порты 3000/TCP и 22/TCP, но вы свободно можете изменить их, внеся изменеия в файл docker-compose.core.yaml. Кроме того, не забудьте добавить эти порты в разрещения в вашем брандмауэре.

gitea

Подготовка Act_runner (Gitea агент)

Функционал Gitea включает Gitea Actions, встроенное CI/CD решение котоое запускается на агенте Act_runner. В этом разделе мы только подготовим Act_runner в Docker контейнере, а развернём его после настройки Gitea сервера и генерации токена.

  1. Сгенерируйте файл config.yaml, выполнив команду docker run --entrypoint="" --rm -it gitea/act_runner act_runner generate-config > config.yaml в контекте вашей проектной папки.

  2. Проверьте и отредактируйте параметры агента в файле act_runner.env

act_runner.env
CONFIG_FILE="/config.yaml"
GITEA_INSTANCE_URL="http://gitea-server:3000"
GITEA_RUNNER_REGISTRATION_TOKEN="SET_AFTER_SERVER_IS CONFIGURED"
GITEA_RUNNER_NAME="main_runner"
GITEA_RUNNER_LABELS="gitea-demo:runner"

Обязательно добавьте раздел /var/run/docker.sock:/var/run/docker.sock чтобы полноценно запускать агент, развёрнутый в Docker.

docker-compose.act_runner.yaml
name: gitea-ar

services:
  runner:
    image: gitea/act_runner
    container_name: gitea-ar
    env_file:
      - ./act_runner.env
    volumes:
      - ./config.yaml:/config.yaml
      - ./data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - gitea
networks:
  gitea:
    name: gitea-net
    external: true

Конфигурирвание Gitea

Для завершения установки перейдите н страницу Gitea сервера

gitea

gitea

В разделе Administrator Account Setting заполните требуемые поля и нажмите Install Gitea

gitea

Создание организации

  1. Перейдите в раздел Site Administration

gitea

  1. В секции Identity & Access выберите Organizations и кликните New Organization

gitea

  1. Впишите название организации в поле Organization Name (gitea-demo-organization), определите Visibility и нажмите Create Organization

gitea

Создание тимы

  1. На странице созданной организации нажмите View ORG_NAME

gitea

  1. Используя кнопку New Team создайте две тимы gitea-demo-readers и gitea-demo-contributors

gitea

gitea

Установка Act_runner

  1. Перед установкой агента act_runner перейдите в раздел Site Administration -> Actions -> Runner, нажмите Create new runner и скопируйте токен.

gitea

  1. Добавьте токен в файл настроек act_runner.env, как значение параметра GITEA_RUNNER_REGISTRATION_TOKEN.

Обратите внимание, что агент может быть установлен на разлиных уровнях: сервера, организации или пользователя. Для изменеия уровня агента, сгенирируйте токен в разделе User settings или Organization settings

  1. Выполните команду docker compose -f ./docker-compose.act_runner.yaml up -d, после развёртывания контейнера, на странице агентов появиться новый экзампляр.

gitea

Конфигурирование OAuth аутентификации

В добавок ко встроенному механизму аутетификации, Gitea поддерживает также широкий спектр внешних, включая LDAP и OAuth. В рамках этой статьи мы настроим OAuth2 OpenID Connect + Microsoft EntraID. Отметьте, что для этого вам необходимо иметь Microsoft EntraID тенант, как минимуи, с Free лицензией, однако, если вы планируете настроить маппинг групп безопасности с тимами, вам придётся приобрести лицензию уровня Premium.

Также нужно отметить, что представляемый метод не требует внешнего домена или публичного IP адреса.

Azure

  1. Войдите в вашу учетную запись в Microsoft EntraID и создайте App registartion

gitea

  1. Заполните поля Name и Redirect URI (http://localhost:3000/user/oauth2/Microsoft%20EntraID/callback)

gitea

  1. В зарегистрированной аппликации перейдите в раздел Authetication section и включите аттрибут public client flow

gitea

  1. Создайте новы клиентский секрет, сохраните его для дальнейшего использования

  2. Перейдите в раздел Token cofiguration и добавьте group claims как указано на изображении ниже

gitea

  1. Перейдите в раздел API permissions и делигируйте разрешенияGroup.Read.All. Также вы должны гарантировать admin consent.

gitea

  1. Скопируйте кончную точку для OpenID Connect metadata document

  2. Перейдите в связанную Enterprise Application, в разделе Properties измените аттрибут Assignment requirement на YES.

gitea

  1. Добавьте разрешённых пользователей и группы в секции Users and groups

Gitea сервер

  1. Вернитесь на ваш Gitea сервер и откройте Site Administration, в разделе Identety & Access создайте новый экземпляр.

  2. Вберите Autentication Type как OAuth и введите значение Name как Microsoft EntraID.

  3. Выберите OpenID Connect из выпадающего списка Ouath2 Provider

  4. Client ID - значение Aplication ID созданной в Azure App registration, Client Secret сгенерированный ранее клиентский секрет.

  5. Вставьте скопированную конечную точку OpenID Connect metadata document в OpenID Connect Auto Discovery URL

  6. В поле Additional Scopes вы можете добавить аттрибуты openid email profile

gitea

  1. Для маппинга групп доавьте groups в поле Claim name providing group names for this source. и сконфигурируйте соотношенипе групп к командам Map claimed groups to Organization teams.

gitea

  1. Нажмите на кнопку Add Authentication Source

Пользовательский вход

Для пользовательского входа через SSO используте кнопку Sign in with Microsoft EntraID

gitea

После успешной авторизации в Microsoft аккаунте, вам следует закончить процесс регистрации в Gitea

gitea

Вывод

Gitea представляет собой простой в использовании и самостоятельно размещаемый сервис разработки программного обеспечения, который включает в себя хостинг Git, обзор кода, коллаборацию команд, реестр пакетов и возможности CI/CD. Выпущенный под лицензией MIT, он ориентирован на лёгкость, удобство использования и высокую настраиваемость, подходя как для малых команд, так и для крупных организаций. Gitea поддерживает практически все возможности современной системы управления версиями Git.