Как начать работу с консолью GitLab Rails для расширенного администрирования
Консоль Rails GitLab предоставляет интерактивный терминал, который позволяет вам напрямую манипулировать данными в вашем экземпляре GitLab. Вы можете использовать его для извлечения информации, устранения неполадок и выполнения сложных задач администрирования, которые не поддерживаются в веб-интерфейсе или API GitLab.
Для доступа к консоли у вас должен быть запущен собственный сервер GitLab с самостоятельным управлением. Вам потребуются привилегии суперпользователя на компьютере, на котором размещена ваша среда. Консоль обеспечивает беспрепятственный контроль над GitLab и вашими данными, поэтому использовать ее должны только доверенные администраторы. Действия могут переопределить обычные меры безопасности и привести к непреднамеренному уничтожению данных.
Запуск консоли
Метод, используемый для запуска консоли, зависит от типа используемой установки GitLab. Дистрибутивы Omnibus, установленные из менеджера пакетов, поддерживают следующую команду:
$ sudo gitlab-rails console
Используйте этот вариант, если вы вручную установили GitLab из исходного кода:
$ sudo -u git -H bundle exec rails console -e production
Консоль также доступна для облачных инстансов GitLab, работающих в Kubernetes. Используйте Kubectl, чтобы подключиться к поду GitLab toolbox
и начать сеанс консоли:
$ kubectl --namespace gitlab exec -it toolbox -- /srv/gitlab/bin/rails console
Версии GitLab старше 14.2 будут иметь модуль task-runner
вместо toolbox
. Замените task-runner
в команде, показанной выше, если вы используете один из этих выпусков.
Запуск консоли Rails может занять несколько секунд. Он отобразит сводку ваших версий Ruby, GitLab и PostgreSQL, а затем перенаправит вас в командную строку терминала.
$ sudo gitlab-rails console -------------------------------------------------------------------------------- Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 15.0.0 (8a186dedfc1) FOSS GitLab Shell: 14.3.0 PostgreSQL: 12.10 ------------------------------------------------------------[ booted in 22.48s ] Loading production environment (Rails 6.1.4.7) irb(main):001:0>
Вы можете начать вводить команды Ruby, когда увидите приглашение.
Основное использование
Консоль обеспечивает доступ к среде GitLab Ruby on Rails. Объекты в области действия позволяют извлекать, обновлять и запрашивать данные в вашей базе данных GitLab. Базовое понимание Ruby и Rails поможет вам начать работу.
Rails использует шаблон Active Record для предоставления статических методов сопоставления данных с объектами. Вы можете вызвать следующий метод, чтобы получить пользователя по его имени пользователя:
$ demo = User.find_by_username("demo") # <User id:1 @demo>
Вы можете просмотреть свойства извлеченного объекта, проверив его атрибуты
:
$ pp demo.attributes {"id"=>1, "email"=>"demo@example.com", ...
Чтобы получить конкретное свойство, обратитесь к нему по имени:
$ demo.email demo@example.com
Вы можете использовать методы Rails для удобного извлечения нескольких экземпляров объекта, соответствующих запросу:
$ admins = User.where(admin: true).where('email like ?', '%@example.com')
Это извлекает всех пользователей example.com
с правами администратора GitLab.
Вы можете изменить свойства экземпляра объекта, назначив новые значения и вызвав save
:
$ demo.email = "example@example.com" $ demo.save
Метод save
проверит допустимое состояние объекта перед его сохранением в базе данных. Вы можете явно отключить проверку в ситуациях, когда вы хотите принудительно применить конкретное изменение:
$ demo.save!(validate: false)
Это следует использовать только для исследования проблем, когда веб-интерфейс или API GitLab неожиданно отклоняет данные.
Общие задачи
Консоль GitLab Rails имеет безграничное количество приложений, так как вы можете работать с любым аспектом вашего экземпляра GitLab. Вот несколько полезных операций, с которых можно начать.
Откройте для себя методы, доступные для объекта
Опыт работы с консолью может быть пугающим для новичков, особенно если вы не очень хорошо знакомы с Rails. Документация по консоли относительно скудна, но вы можете открыть для себя функциональность, изучив список методов, связанных с каждым объектом:
$ User.methods [:before_add_for_closed_issues, :before_add_for_closed_issues=, :after_add_for_closed_issues, ...]
Вы можете комбинировать это с grep
, чтобы быстро отфильтровать методы с определенным корнем:
$ Project.methods.grep(/find/) [:find_by_runners_token, :find_by_url, :find_by_full_path, ...]
Это показывает, что вы можете получить проект по его пути с помощью следующей команды:
$ Project.find_by_full_path("/user/project")
Получить проект с его проблемами и запросами на слияние
Сначала используйте объект Project
, чтобы получить проект, сопоставив уникальный атрибут, такой как его идентификатор, путь или URL-адрес:
$ project = Project.find_by_full_path("/user/project")
Теперь вы можете получить доступ к задачам проекта и запросам на слияние через его свойства отношения:
# Get all issues $ project.issues.all # Get the first issue $ project.issues.first # Get a specific merge request by its project-level ID $ project.merge_requests.find_by(iid: 10)
Получение конвейера непрерывной интеграции
Объект Pipeline
вложен в пространство имен CI
:
# Get the pipeline with ID 100 $ pipeline = Ci::Pipeline.find(100) # Get builds (jobs) associated with the pipeline $ jobs = pipeline.builds
Сбросить пароль администратора
Консоль может спасти вас, если вы когда-нибудь заблокируете свою учетную запись. Получите затронутый объект пользователя, а затем сбросьте его пароль:
$ user = User.find_by_username("demo") $ user.password = "abc123" $ user.password_confirmation = "abc123" $ user.save
Сделать проект доступным только для чтения
GitLab поддерживает проекты только для чтения, которые сохраняют доступ к репозиторию, но предотвращают внесение изменений. Режим только для чтения должен быть включен с помощью консоли:
$ project = Project.find_by_full_path("/user/project") $ project.repository_read_only = true $ project.save
Запуск расписания конвейера вручную
Запланированные конвейеры можно запускать сразу с помощью консоли. Иногда это может помочь отладить проблемы, о которых не сообщается полностью в пользовательском интерфейсе и API.
Сначала извлеките объект PipelineSchedule
:
$ schedule = Ci::PipelineSchedule.find_by(id: 10)
Затем выберите пользователя, для которого вы хотите выполнить конвейер, как:
$ user = User.find_by_username("demo")
Теперь используйте эту команду, чтобы запустить прогон по расписанию:
$ Ci::CreatePipelineService.new(schedule.project, user, ref: schedule.ref).execute!(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule)
Он создает новый конвейер из расписания и начинает его выполнение.
Включить флаги функций
Некоторые предварительные версии функций GitLab закрыты флажками функций. Флаги также иногда используются для разрешения временной повторной активации устаревших возможностей.
Консоль — это единственный механизм, с помощью которого можно активировать флаги функций. Передайте идентификатор флага функции в функцию Feature.enable()
:
$ Feature.enable(:certificate_based_clusters)
Изменение вступает в силу немедленно, без перезапуска GitLab. В этом примере повторно активируется поддержка кластеров Kubernetes на основе сертификатов в GitLab 15.0.
Вы можете проверить, включен ли флаг, с помощью вызова Feature.enabled?()
:
$ Feature.enabled?(:certificate_based_clusters) => true
Чтобы отключить флаг функции, передайте его идентификатор методу Feature.disable()
:
$ Feature.disable(:certificate_based_clusters)
Тестовая доставка электронной почты
Консоль позволяет напрямую отправлять тестовые сообщения, чтобы убедиться, что ваша система исходящей электронной почты работает:
$ Notify.test_email("example@example.com", "Test subject", "Test body").deliver_now
Электронное письмо будет отправлено немедленно с использованием того же механизма, что и сообщения, созданные функциями приложения GitLab.
Запуск скриптов Ruby с помощью Rails Runner
Сеанс интерактивной консоли не всегда необходим. Rails Runner — это альтернатива, упрощающая запуск скриптов Ruby в контексте вашей среды GitLab.
Используйте команду gitlab-rails runner
, чтобы выполнить некоторый код Ruby. Ваш сценарий может ссылаться на те же переменные и объекты GitLab, которые доступны для сеанса консоли Rails.
$ sudo gitlab-rails runner "puts User.find_by_username('demo').email"
Rails запустит предоставленный вами скрипт, а затем завершит процесс. Показанный выше пример выдает адрес электронной почты пользователя GitLab с именем demo
. Эта альтернатива запускает код Ruby, представленный в виде файла:
$ sudo gitlab-rails runner /scripts/gitlab-rails-script.rb
Скрипты, сохраненные в виде файлов Ruby, должны быть доступны пользователю git
Unix. GitLab Rails всегда выполняется как git:git
, поэтому скрипты, принадлежащие другим пользователям, могут привести к ошибке. Недопустимые пути к файлам будут интерпретироваться как код Ruby для запуска, что приведет к синтаксической ошибке, которая может замаскировать истинную проблему:
$ sudo gitlab-rails runner /scripts/invalid-file.rb Please specify a valid ruby command or the path of a script to run. Run 'rails runner -h' for help
Краткое содержание
Консоль GitLab Rails — это мощная утилита для прямого взаимодействия с вашим экземпляром GitLab. Это может быть бесценным инструментом отладки, когда у вас возникают проблемы с установкой. Консоль также позволяет создавать сценарии административных задач, используя простой код Ruby, вместо того, чтобы полагаться на GitLab API. Некоторые операции, такие как включение флага функции, можно выполнить только с помощью консоли.
С властью приходит ответственность. Консоль способна игнорировать ограждения и принимать операции в контекстах, для которых они не предназначены. Неправильное использование может привести к потере данных и неожиданному поведению. Используя консоль, вы открываете кодовую базу GitLab и ее внутренние операции. Доступные методы и их эффекты не имеют гарантии поддержки и могут быть изменены без предупреждения.