热部署应用程序构建到Vagrant

热部署应用程序构建到Vagrant,vagrant,virtualization,deploying,Vagrant,Virtualization,Deploying,请注意:尽管我在这个问题中提到了Gradle/Groovy,但这完全是关于不正常的使用,可以很容易地应用于任何其他语言/构建系统 我是新来的,正在尝试弄清楚当推到源代码控制时,Vagrantfile是如何与repo的构建交互的 假设我有以下由Gradle建立的回购协议: src/ main/ groovy/ <lots of groovy source> test/ groovy/ <

请注意:尽管我在这个问题中提到了Gradle/Groovy,但这完全是关于不正常的使用,可以很容易地应用于任何其他语言/构建系统

我是新来的,正在尝试弄清楚当推到源代码控制时,Vagrantfile是如何与repo的构建交互的

假设我有以下由Gradle建立的回购协议:

src/
    main/
        groovy/
            <lots of groovy source>
    test/
        groovy/
            <lots of groovy test source>
build.gradle
settings.gradle
src/
主要/
棒极了/
试验/
棒极了/
格雷德尔先生
格雷德尔酒店
现在让我们假设,在没有Vagrant的情况下,我通常会克隆这个repo并运行
gradle clean build
,对代码运行单元测试,并最终将其打包到一个正在运行的程序(可执行JAR)中。然后,
gradle运行
启动应用程序

嗯,在很多GitHub回购协议中,我看到Vagrantfile已提交。很明显,这是为了让虚拟机更容易启动,并在虚拟机中运行相应的应用程序。我正试图找出将
Vagrantfile
合并到我的上述回购协议中的典型“流程”,以便开发人员能够:

  • 复制回购协议
  • 用梯度建造
  • 不知何故,部署到流浪者的箱子里
  • 测试正在运行的应用程序实例(在框内运行)
  • 利用热重新部署调整代码}4、#5和#6快速/快速开发测试调整周期
  • 重新测试
  • 看一看(随机选择)。我想这就是神奇的地方,在盒子上部署和重新启动服务器,但是我检查了Wagrant文档中的
    shell.inline
    ,没有发现任何具体的东西


    所以我问:我如何将我的
    Vagrantfile
    与我的构建“集成”,以便构建生成一个已部署、正在运行的应用程序?此外,我的运行/部署测试代码重新部署周期在Vagrant Box(我称之为“热部署”)中是什么样子的?

    我将解释如何实现您希望实现的目标,这可能不是正式的实现方法,因此任何有更多Vagrant经验的人都应该提供一些改进建议。我已经和流浪汉一起工作了6个月了。你说你是新来的流浪汉,所以我会尽可能完整,即使有些部分你可能已经掌握了,但可能对其他用户有用

    tl;博士如果您已经熟悉Vagrantfile的工作方式,请跳到创建Vagrantfile部分

    让我们从示例所做的事情开始

    config.vm.box = "puppetlabs/centos-6.5-64-puppet"
    
    这是在告诉流浪汉把所有其他东西都建在上面的盒子拉出来。你可以在网上找到许多官方和社区捐款箱。这一个来自puppetlabs,基于CentOS 6.5 64位,已经安装了Puppet

    config.vm.network "forwarded_port", guest: 8080, host: 8088
    
    这是告诉流浪者将主机上的8088端口转发到流浪者盒上的8080。因此,在主机上访问将访问来宾机上的8080端口

    config.vm.provision :shell do |shell|
    
    设置是在第一次运行“漫游箱”时设置“漫游箱”的过程。除非强制,否则新VM的资源调配将只运行一次。请参阅的“资源调配”部分。这一个特别是在配置时执行一组shell命令

    shell.inline = "command;
                    command;"
    
    Shell inline将这些命令(以分号分隔)发送到框中。这是为了自动化命令,就像您自己在SSH会话中键入命令一样。具有一些更高级的用途,您可以在其中定义要执行的实际文件。 注意:shell脚本不应尝试执行尚未安装的工具。(例如,在Python还不可用的情况下运行Python脚本)

    我不能对Puppet部分发表太多评论,因为我不是一个Puppet用户(可能现在还不是)。这是设置一些傀儡值

    shell.inline = "cd /vagrant && mvn clean package;
                      sudo cp target/cas.war /srv/tomcat/cas/webapps/;
                      sudo /sbin/service tomcat-cas restart"
    
    这也是在执行shell命令。基本上是更改目录、清理、将cas.war复制到webapps目录,然后重新启动服务。有关
    /vagrant
    共享文件夹的详细信息,请稍后访问。现在我们有足够的钱开始建立我们自己的流浪汉档案。我将保持样本的简单性,使其通用

    创建文件 你很可能想要建立一个已经符合你需求的流浪者盒子,但是现在,让我们不要这样做。但是,您可以在上找到许多已创建的框。我将向您展示如何使用Flask运行(非常)简单的Python应用程序

  • 从可用的流浪者箱中选择您最喜欢的分发版。我打算使用ubuntu/trusty64,因为我每天都在使用它。所有命令都应该容易地转换为其他发行版
  • 为项目创建一个新目录,并在其中打开一个shell/console窗口
  • 使用控制台,初始化你的Vagrant box
    Vagrant init ubuntu/trusty64
    。这将创建一个基本文件供您使用
  • 打开您的Vagrant文件并取消注释
    config.vm.network“forwarded\u port”,guest:5000,host:8080
    。我们希望8080端口将我们带到来宾机器上的5000端口。提示:对于您的项目,明智的做法是选择一个最有可能尚未使用的端口,以避免与其他应用程序发生冲突。8080可能是个坏选择,8089会更好
  • 让我们添加一些脚本来执行资源调配。由于Python与Ubuntu(以及我所知道的大多数其他软件)一起提供,我们不需要安装Python,但我们确实需要pip(一个Python包管理器)和Flask

    config.vm.provision :shell do |shell|
        shell.inline = "cd /vagrant;
            sudo apt-get -y install python-pip;
            sudo pip install Flask;"
    end
    
    这会将目录更改为Vagrant共享。使用Ubuntu的包管理器安装pip,然后使用pip安装Flask。-y标志是自动让apt get安装,而不提示是/否问题。您可能需要运行几次
    Vagrant up--provision
    ,以使所有命令100%正确

    关于Vagrant共享的注意事项:Vagrant共享是主机和来宾计算机之间同步的目录,可在
    /Vagrant
    下使用。它包括项目目录中的所有文件和目录(其中
    config.vm.provision :shell do |shell|
        shell.inline = "cd /vagrant;
            sudo apt-get -y install python-pip;
            sudo pip install Flask;"
    end
    
    config.vm.provision :shell do |shell|
      shell.inline = "/vagrant/app.py &"
    end