Ansible не распознает команду mvn, но Maven установлен - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь запустить проект maven из Ansible Tower, но Ansible kepps выдает ошибку 'mvn: команда не распознана', mvn работает нормально, если я делаю это вручную из командной строки на сервере Linux

У меня была похожая проблема при попытке запустить Gradle из Ansible, однако решение для этого здесь не сработало.Ранее проблема заключалась в том, что мне нужно было задавать переменные env при запуске playbook.Я пробовал это здесь, но безрезультатно.Я проверил свой путь и вижу там путь Maven.

Я воспользовался советом Zeitounator и попытался позвонить из Ansible, используя абсолютный путь, и это сработало.Но, как он упомянул, это был всего лишь тест, а не реальное решение.

  • Я добавил / bin к PATH, так как он ранее отсутствовал по какой-то причине
  • Я пытался изменитьMAVEN_HOME для / opt / maven / bin / как на сервере, так и в Ansible playbook
  • Я убедился, что переменная M2_HOME пуста, так как я прочитал, что она может вызвать некоторые проблемы, если она там

Кажется, что Ansible не знает, где искать Maven, и я не совсем уверен, как еще донести эту информацию до него.Я чувствую, что это глупая изворотливость Ansible, которая имеет глупое простое решение, и это можно исправить, если у меня есть что-то кроме 'mvn: command not found' для работы.

Вот вызов от моегоplaybook:

- name: test mvn
    shell: mvn -version
    args:
      chdir: /opt/jenkins/batchtest/
    environment:
      MAVEN_HOME: /opt/maven/
      JAVA_HOME: /usr/java/jdk1.8.0_162

и вот результат получения PATH:

-bash-4.2$ echo $PATH
/bin:/usr/lib64/qt-3.3/bin:/opt/maven/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

Вот вывод из mvn -version, в котором есть что-то, чего мне не хватает

-bash-4.2$ mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T13:49:05-06:00)
Maven home: /opt/maven
Java version: 1.8.0_202, vendor: Oracle Corporation
Java home: /usr/java/jre1.8.0_202-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.12.1.el7.x86_64", arch: "amd64", family: "unix"

1 Ответ

1 голос
/ 20 июня 2019

Вы запускаете свои тестовые команды выше непосредственно на сервере с оболочкой bash .

Модуль Ansible shell по умолчанию использует оболочку sh (см. документация )

Здесь я должен сделать предположение, но я на 99,9% уверен, что путь к корзине maven добавлен к вашей переменной PATH в файле инициализации, специфичном для bash, поэтомунедоступно при использовании sh.

Теперь у вас есть 2 решения:

  1. Измените способ объявления PATH, чтобы bash и sh выбирали значение.Для общесистемной настройки вы можете использовать /etc/profile.Для конкретного пользователя, использование ~/.profile должно сработать.
  2. Измените оболочку, которую использует ansible для bash, чтобы вы оказались в точно такой же ситуации
- name: test mvn
  shell: mvn -version
  args:
    chdir: /opt/jenkins/batchtest/
    executable: /bin/bash
  environment:
    MAVEN_HOME: /opt/maven/
    JAVA_HOME: /usr/java/jdk1.8.0_162
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...