PM2 – Процесс или пространство имен не найдено при развертывании с помощью GitLab CI

Вопрос или проблема

При развертывании из CI, как пользователь, который запустил PM2, pm2 restart appname всегда приводит к [PM2][ERROR] Process or Namespace appname not found

whoami/who на развертывании показывает правильного пользователя.

Пробовал менять пользователей, а также местоположение PM2:
/usr/local/bin/pm2 restart appname
приводит к тому же процессу, который не найден.

Команда CI:

script:
- pm2 restart appname

или:

deploy: 'ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_IP "pm2 restart appname"'
script:
- "eval $deploy"

После первой команды “pm2 start appname” выполните “pm2 save”, это синхронизирует процесс с ранее сохраненным списком.
В CI скрипт включите “pm2 save” после рестарта
пример:

  • выполните: sudo pm2 restart appname
  • выполните: sudo pm2 save
    Мне это помогло, надеюсь, вы нашли свое решение.

Если вы получаете [PM2][ERROR] Script not found: /root/appname

Сначала запустите следующее:
pm2 start npm –name “appname” — run “start:dev”

Затем, посмотрите/выполните вышеуказанное от Debapriya Das, pm2 start appname и pm2 save

Ответ или решение

ТЕОРИЯ

При развертывании приложений с использованием GitLab CI с помощью процесс-менеджера PM2, может возникнуть ошибочный вывод [PM2][ERROR] Process or Namespace appname not found, что указывает на невозможность обнаружения указанного процесса или пространства имен. Эта ошибка часто вызывается несоответствием окружения выполнения, некорректными путями или отсутствием синхронизации состояния процессов.

ПРИМЕР

Рассмотрим ситуацию: при выполнении команды pm2 restart appname внутри GitLab CI, происходит ошибка, сообщающая, что процесс или пространство имен "appname" не найдено. Даже если вы уверены в том, что пользователь, от лица которого запускался PM2, совпадает с указанным в CI, ошибка все еще может проявляться. Пробовали изменения в команде, такие как указание полного пути /usr/local/bin/pm2, но это не решает проблему.

ПРИМЕНЕНИЕ

Для решения этой проблемы следует рассмотреть несколько аспектов:

  1. Сохранение состояния процессов:

    • После изначального запуска приложения с помощью pm2 start appname выполните команду pm2 save. Эта команда сохранит текущее состояние процессов и позволит PM2 запоминать их между перезагрузками и рестартами.
  2. Проверка окружения:

    • Убедитесь, что все переменные окружения и конфигурации, необходимые для запуска PM2, корректно настроены в CI/CD. Это включает правильного пользователя, права доступа и прочие зависимости.
  3. Правильная последовательность в GitLab CI:

    • В вашем .gitlab-ci.yml убедитесь, что выполняются команды pm2 restart и pm2 save после успешного запуска процессов. Пример секции script:
      script:
      - pm2 restart appname
      - pm2 save
  4. Обход потенциальных проблем с различиями в окружении:

    • В некоторых случаях использование SSH для выполнения удалённых команд может сработать лучше. Пример:
      script:
      - ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_IP "pm2 restart appname && pm2 save"
  5. Развертывание через NPM:

    • В некоторых случаях может помочь запуск через NPM, если используется Node.js приложение. Например:
      pm2 start npm --name "appname" -- run "start:dev"
      pm2 save

Следуя этим рекомендациям, вы сможете устранить ошибку и правильно настроить процесс развертывания с использованием GitLab CI и PM2. Теперь ваша настройка CI/CD должна работать более гладко, избегая нежелательных сбоев, связанных с управлением процессами.

Оцените материал
Добавить комментарий

Капча загружается...