Перейти к содержанию

Обновление ПО GitFlic с 3.х.х до 4.х.х версии


Внимание !

Если вы используете версию GitFlic 2.x.x, то выполните шаги из инструкции по переходу с версии 2.x.x до 3.x.x прежде, чем выполнять шаги из этой инструкции

Внимание !

Перед обновлением ПО GitFlic до версии 4.0.0, сделайте резервные копии:

  • баз данных Postgresql и Redis/Keydb
  • статических данных. Директории img, repo, cicd, registry, releases
  • ключей для ssh сервера. Файл /opt/gitflic/key.pem

Общие сведения

В рамках релиза 4.0.0 мы сделали ряд необходимых изменений в GitFlic для корректной работы сервиса, эти изменения блокируют обратную совместимость. Данная статья призвана решить проблемы перехода со старой версии 3.x.x на новую версию 4.х.х.

В том случае если у вас возникнут сложности с обновлением, то вы можете написать на нашу почту support@gitflic.ru, обозначив свою проблему

Что изменилось?

  • Изменена схема работы с RSA-ключами, необходимыми для подписей пакетов и авторизационных токенов. Добавлены обязательные параметры gitflic.vault.cert.publicKey и gitflic.vault.cert.privateKey
  • Для LDAP-подключений добавлен новый обязательный параметр UID пользователя, идентифицирующий пользователя.
  • Изменена схема работы подписей SAML подключений.
  • В рамках CI/CD GitFlic агенты по умолчанию выполняют задачу в одном контексте (ранее выполнение задачи происходило в разных контекстах)
  • Из стандартных пакетов убраны манифесты для k8s. На смену им пришли Helm Charts
  • Изменен подход к установке и запуску ПО в Docker Containers

Обновление ПО GitFlic

  1. С помощью утилиты keys-retriever.jar, извлеките ключевую пару из текущей инсталляции ПО GitFlic и сохраните её на файловую систему:

    Для импортирования существующих ключей RSA нужно запустить:

     java -jar keys-retriever.jar /path/to/application.properties 
    

    Укажите application.properties, которые используются в работе с основным приложением GitFlic. Ключи private_key.pem и public_key.pem будут экспортированы в директорию, из которой запускается утилита.

Внимание !

Для работы keys-retriever.jar у пользователя должен быть доступ на запись.

Необходимо прописать путь до этих ключей в application.properties (gitflic.vault.cert.publicKey=path/to/public_key.pem и gitflic.vault.cert.privateKey=path/to/private_key.pem)

  1. Остановите ПО GitFlic и отредактируйте файл application.properties инстансов GitFlic, добавив следующую информацию:

    application.properties

    gitflic.vault.cert.publicKey=#Путь до публичного ключа public_key.pem
    gitflic.vault.cert.privateKey=#Путь до приватного ключа private_key.pem
    
  2. Замените исполняемый файл gitflic.jar на новый из комплекта поставки 4.0.0 и запустите ПО GitFlic

Изменения в docker compose

  • В новой версии docker-compose.yaml был изменен подход к хранению данных. Вместо прямой связки ФС с контейнерами, используются volume'ы предоставляемые docker engine. Во избежание дальнейших проблем, рекомендуется создать и перемести данные ПО в соответствующие volume. В противном случае, перед запуском, отредактируйте ваш файл docker-compose.yaml в соответствии с требуемыми изменениями

  • В случае использования docker-compose.yaml из комплекта поставки ПО GitFlic, необходимо будет сделать полный перенос данных!

Внимание

В случае использования версии enterprise установите образ ПО GitFlic версии 4.х.х в вашу docker систему

  • Загрузите из личного кабинета образ с gitflic-enterprise (docker/images/gitflic-server-ee.tar)

  • Импортируйте образ в вашу систему

    docker load -i gitflic-server-ee_<version>.tar
    
  • В файле .env укажите установленный образ в переменной GITFLIC_IMAGE

    # .env
    ...
    GITFLIC_IMAGE=gitflic-server-ee:<актуальный тег>
    ...
    
  1. С помощью утилиты keys-retriever, извлеките ключевую пару из текущей инсталляции ПО GitFlic и сохраните её на файловую систему:

    Для импортирования существующих ключей RSA нужно:

    1. Сделать команду docker pull:

      docker pull registry.gitflic.ru/project/gitflic/keys-retriever/keys-retriever:1.0.0
      

    2. Достать ключи из поднятого контейнера:

      CONTAINER_ID=$(docker run -d --env-file ./ENV --network gitflic_network registry.gitflic.ru/project/gitflic/keys-retriever/keys-retriever:1.0.0) && docker logs -f $CONTAINER_ID
      docker cp $CONTAINER_ID:/opt/key-retriever/private_key.pem ./private_key.pem
      docker cp $CONTAINER_ID:/opt/key-retriever/public_key.pem ./public_key.pem
      docker rm $CONTAINER_ID
      
      Ключи private_key.pem и public_key.pem будут импортированы в директорию откуда запускалась команда docker cp.

  2. Остановите ПО GitFlic версии 3.х.х

  3. Создайте volume gitflic_certs

    docker volume create gitflic_cert
    
  4. Скопируйте в данный volume ключевую пару и текущий файл key.pem, подключенный к контейнеру

    sudo cp private_key.pem public_key.pem key.pem $(docker volume inspect gitflic_cert -f '{{.Mountpoint}}')
    
    docker run --rm -v gitflic_cert:/root -v "$PWD":/host ubuntu cp /host/private_key.pem /host/public_key.pem /host/key.pem /root/
    
  5. Запустите ПО Gitflic версии 4.х.х для инициализации окружения и создания необходимых контейнеров. Дождитесь запуска приложения, после чего остановите запущенное ПО. При успшном запуске ПО в логе будет строка содержащая Started OnPremiseApplication или Started EnterpriseApplication в зависимости от версии ПО.

    docker compose up --attach gitflic
    
  6. Найдите в системе созданные volumes с соотвестующим префиксом. При использовании docker compose без параметра -p, в качестве префикса будет добалено имя текущей директории.

    docker volume ls -q | grep -e gitflic_data -e pg_data
    
    # Пример вывода команды docker volume ls -q | grep -e gitflic_data -e pg_data
    docker_gitflic_data
    docker_pg_data
    
    • Том gitflic_data отвечает за хранение данных ПО gitflic
    • Том pg_data отвечает за хранение данных БД postgres
  7. Перейдите в директорию с версией 3.х.х и скопируйте содержимое папки docker/gitflic/data в volume _gitflic_data.

    cp -rT  <Путь по директории с распакованных архивом ПО Gitflic>/docker/gitflic/data/* $(docker volume inspect <prefix>_gitflic_data -f '{{.Mountpoint}}')
    
  8. Перейдите в директорию с версией 3.х.х и скопируйте cодержимое папки docker/postgres/data в volume _pg_data

    cp -rT  <Путь до директории с распакованных архивом ПО Gitflic>/docker/postgres/data $(docker volume inspect <prefix>_pg_data -f '{{.Mountpoint}}')
    
  9. Запустите ПО Gitflic версии 4.х.х и проверьте корректность перенесенных данных.

Описание новых томов и данных

  • Том gitflic_data отвечает за хранение данных ПО gitflic
  • Том gitflic_etc отвечает за хранение настроек ПО gitflic
  • Том gitflic_cert отвечает за хранение сертификатов ПО gitflic
  • Том pg_data отвечает за хранение данных БД postgres
  • Том redis_data отвечает за хранение данных БД redis
  • Файл .env является основным файлом подключаемым по умолчанию
  • Файл external.env является дополнительным и служит для переопределения данных. Отвечает за подключения к базам данных, настройке почты и работы с elasticsearch. Файл может быть пустым или закоментированным, но обязательно должен присуствовать в директории вместе с docker-compose.yaml
  • Параметр TRANSPORT_URL был убран из .env. В него подставляются данные из перменной BASE_URL
  • Параметр TRANSPORT_SSH, используется только при первичной инициализации ПО Gitflic и служит для установки корректного отображения ссылок для SSH. При необходимости его можно переопределить в веб интерфейсе ПО Gitflic
  • Если необходимо добавить дополнительные параметры в gitflic-server, необходимо создать файл c расширением .properties (например s3.properties) и поместить его в volume gitflic_etc. Изменения будут применены автоматически после перезапуска ПО Gitflic. Не рекомендуется вносить изменения в файл application.properties

Изменения после успешного обновления GitFlic до версии 4.x.x

После успешного обновления GitFlic до версии 4.x.x обращаем ваше внимание на измененную схему настройки SAML и LDAP подключений в панели администратора.

Обновление конфигурации LDAP с 3.х.х до 4.х.х версии

В версии 4.0.0 в конфигурацию LDAP добавлен новый обязательный атрибут — UID пользователя - уникальный и неизменяемый идентификатор. При обновлении до версии 4.0.0 поле UID пользователя автоматически будет заполнено первым значением из поля LDAP-атрибут для логина пользователя. ВНИМАНИЕ Для корректной работы системы необходимо вручную указать UID пользователя как атрибут, содержащий глобально уникальный идентификатор (например, uid, employeeNumber, sAMAccountName и т.п.). Более подробно о подключении можете ознакомиться в этой инструкции

Обновление конфигурации SAML с 3.х.х до 4.х.х версии

В версии 4.0.0 изменен процесс проверки подписи SAML-IDP. Начиная с версии 4.0.0 появилась возможность включать или выключать проверку подписи IDP используя опцию Проверять сертификат метаданных. По умолчанию эта опция отключена. В рамках проверки подписи начиная с версии 4.0.0 сверяется SHA1 отпечаток подписи в составе SAML-ответа с SHA1 отпечатком, хранящимся в настройках SAML-подключения. При первом запуске GitFlic после обновления будет вычислен SHA1 отпечаток (хэш) x509 сертификата, указанного в настройках подключения. ВНИМАНИЕ Если вы активируете опцию Проверять сертификат метаданных - перед сохранением изменений убедитесь что заполнено поле SHA1 хэш сертификата. Более подробно о подключении SAML-SSO можете ознакомиться в этой инструкции

Обновление агентов GitFlic Runner

Информация

С версии 4.0.0 GitFlic CI/CD агенты производят выполнение задачи в одном контексте, что может привести к некорректному поведению конвейеров, которые были написаны ранее.

Для того чтобы включить старое поведение (выполнение задачи в разных контекстах) необходимо добавить параметр runner.enableExecScriptsInSession=false в application.properties самого агента, после чего перезапустить его.

# application.properties
...
runner.enableExecScriptsInSession=false
...