簡體   English   中英

Ansible無法識別mvn命令,但已安裝Maven

[英]Ansible doesn't recognize mvn command, but Maven is installed

我正在嘗試從Ansible Tower運行Maven項目,但是Ansible kepps給我一個“ mvn:無法識別的命令”錯誤,如果我從Linux服務器上的命令行手動進行操作,則mvn可以正常運行

我在嘗試從Ansible運行Gradle時遇到了類似的問題,但是該解決方案在這里不起作用。 以前的問題是,我在運行劇本時需要設置env變量。 我在這里嘗試過,但無濟於事。 我檢查了我的路徑,可以在那里看到Maven路徑。

我接受了Zeitounator的建議,並嘗試使用絕對路徑從Ansible撥打電話,並且行得通。 但是,正如他所說,這只是一個測試,而不是實際的解決方案。

  • 我將/ bin添加到PATH中,因為以前由於某種原因而缺少它
  • 我嘗試在服務器和Ansible劇本中將MAVEN_HOME更改為/ opt / maven / bin /
  • 我確保M2_HOME變量為空,因為我讀到它在那里可能會引起一些問題

看來Ansible不知道在哪里尋找Maven,而且我不太確定該如何將這些信息傳達給它。 我覺得這是Ansible的一個愚蠢的怪癖,它有愚蠢的簡單解決方案,如果我可以使用“ mvn:找不到命令”以外的任何其他東西,可以解決該問題。

這是我的劇本打來的電話:

- 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"

您將直接使用bash shell在服務器上啟動上述測試命令。

默認情況下,Ansible shell模塊使用sh shell(請參閱文檔

我必須在這里進行猜測,但是我有99.9%的把握將maven bin路徑添加到了bash特定的init文件中的PATH變量中,因此在使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM