Ansible 无法在流浪机器上构建 Grails war
Ansible can't build Grails war on a vagrant machine
我向 SO 社区提出的第一个问题 :)
我正在使用 Ansible 来配置 Vagrant 机器。
任务是将 grails war 文件部署到 tomcat7.
当我 运行 构建 war 文件的任务时,我收到此错误:
TASK [Build application] *******************************************************
fatal: [vagrant]: FAILED! => {"changed": true, "cmd": ["sh", "/home/vagrant/src/grailsw", "war"], "delta": "0:00:00.110227", "end": "2017-03-23 12:12:07.728096", "failed": true, "rc": 1, "start": "2017-03-23 12:12:07.617869", "stderr": "Error: Could not find or load main class org.grails.wrapper.GrailsWrapper", "stdout": "", "stdout_lines": [], "warnings": []}
to retry, use: --limit @/home/user/work/scratch/vagrant/petclinic_ansible/playbook.retry
如果我通过 vagrant ssh 进入机器并 运行 ./gradlew war 然后创建 war 文件
但是我无法使用 ansible
创建 war 文件
这是我的 vagrant 文件:
Vagrant.configure("2") do |config|
config.vm.define "vagrant" do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network :private_network, ip: "192.168.10.10"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end
end
这是我的 playbook.yml
- hosts: all
become: true
roles:
- java
- servers
tasks:
- name: Make sure src directory doesn't exist
file:
path: /home/vagrant/src
state: absent
force: yes
- name: Pull repository
git:
repo: https://github.com/Rcsuax/grails-petclinic.git
dest: /home/vagrant/src
version: master
- name: Build application
become: true
command: ./home/vagrant/src/grailsw war
所以我不确定为什么命令:./home/vagrant/src/grailsw war 不起作用
但是我用 shell 模块替换了命令模块,现在它可以编译了。希望这对其他有类似问题的人有用。
解决方案:
- name: Build application
become: true
shell: ./grailsw war
args:
chdir: src/
creates: target/petclinic-0.2.war
environment:
JAVA_HOME: /usr/lib/jvm/java-8-oracle
我向 SO 社区提出的第一个问题 :)
我正在使用 Ansible 来配置 Vagrant 机器。 任务是将 grails war 文件部署到 tomcat7.
当我 运行 构建 war 文件的任务时,我收到此错误:
TASK [Build application] ******************************************************* fatal: [vagrant]: FAILED! => {"changed": true, "cmd": ["sh", "/home/vagrant/src/grailsw", "war"], "delta": "0:00:00.110227", "end": "2017-03-23 12:12:07.728096", "failed": true, "rc": 1, "start": "2017-03-23 12:12:07.617869", "stderr": "Error: Could not find or load main class org.grails.wrapper.GrailsWrapper", "stdout": "", "stdout_lines": [], "warnings": []} to retry, use: --limit @/home/user/work/scratch/vagrant/petclinic_ansible/playbook.retry
如果我通过 vagrant ssh 进入机器并 运行 ./gradlew war 然后创建 war 文件 但是我无法使用 ansible
创建 war 文件这是我的 vagrant 文件:
Vagrant.configure("2") do |config|
config.vm.define "vagrant" do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network :private_network, ip: "192.168.10.10"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
end
end
这是我的 playbook.yml
- hosts: all
become: true
roles:
- java
- servers
tasks:
- name: Make sure src directory doesn't exist
file:
path: /home/vagrant/src
state: absent
force: yes
- name: Pull repository
git:
repo: https://github.com/Rcsuax/grails-petclinic.git
dest: /home/vagrant/src
version: master
- name: Build application
become: true
command: ./home/vagrant/src/grailsw war
所以我不确定为什么命令:./home/vagrant/src/grailsw war 不起作用 但是我用 shell 模块替换了命令模块,现在它可以编译了。希望这对其他有类似问题的人有用。 解决方案:
- name: Build application
become: true
shell: ./grailsw war
args:
chdir: src/
creates: target/petclinic-0.2.war
environment:
JAVA_HOME: /usr/lib/jvm/java-8-oracle