我有一本与此任务相关的剧本,其中包括:
- name: Compile and package
command: './mvnw clean package'
args:
chdir: "{{workdir}}"
但是我得到这个错误:
失败! => {“ changed”:true,“ cmd”:“ ./mvnw clean package”,“ delta”:
“ 0:00:00.003895”,“结束”:“ 2016-12-29 21:59:16.121501”,“失败”:是的,
“ rc”:1,“开始”:“ 2016-12-29 21:59:16.117606”,“ stderr”:“错误:
JAVA_HOME的定义不正确。\ n我们无法执行“,” stdout“:
“”,“ stdout_lines”:[],“警告”:[]}
如果我通过SSH访问远程主机并执行相同的命令,则它可以工作。很明显,已定义了
JAVA_HOME
,但似乎Ansible无法检测到它。 最佳答案
如果说未定义JAVA_HOME
,则可能意味着未定义JAVA_HOME
。
首先,登录时,您使用的是Shell的交互模式/登录Shell,使用Ansible时,您使用的是Shell的非交互模式。两者加载了不同的rc文件-请参考man bash
或Bash Startup Files的“ INVOCATION”部分(对于其他shell,这是相似的,但我认为您正在使用Bash)。
如果JAVA_HOME
变量分配位于仅以交互方式运行的rc文件中,则将出现差异。将定义移到正确的位置。
其次,还取决于设置JAVA_HOME
的位置-使用shell
模块而不是command
可能会加载正确的定义文件。
只需使用JAVA_HOME
为此任务定义environment
,并且不依赖于隐式包含。