1

我正在编写 vagrantfile 以实现本地设置的自动化。通过 vagrant,我正在为我的应用程序创建 docker 映像并在 vm 中运行它。一切都在一个命令下,即vagrant up 但我必须手动做一件事,即使用mvn clean package.

我想知道有没有办法从 vagrantfile 运行 mvn 命令,这样当我发出时vagrant up,它应该构建 JAR 并完成剩下的工作。

4

1 回答 1

2

正如@Patrick 所提到的,shell 配置非常适合 - 我个人用于 gradle,但对于 maven 也可以这样做。这是我如何调用我的脚本

config.vm.provision "shell", path: "script/run-test.sh", privileged: false, run: 'always'
  • path: 是我的 shell 脚本从项目目录中的路径
  • privileged:如果未设置,root 将运行脚本,如果为您的 vagrant 用户安装了 maven,请确保将其设置为 false 否则您将看到问题
  • run: 'always':这是我的用例(由您选择是否对您有意义),脚本将在我运行时始终运行vagrant up

shell脚本将类似于

#!/bin/bash

if [ -d "/home/vagrant/test" ];then 
    cd /home/vagrant/test && git pull
    cd /home/vagrant/test && maven compile
    cd /home/vagrant/test && maven deploy 
    .....

else
    git clone <your project> /home/vagrant/test
fi

这是一个例子,基本上我第一次创建实例时它会克隆一个 git repo - 然后它会从 git latest 文件中提取并运行你的 maven 命令。

同样,这是一个简单的示例,根据您自己的需要使用它

于 2016-05-12T12:57:58.307 回答