在云 CI 服务上使用 Vagrant

Using Vagrant on cloud CI services

是否有任何云 CI 服务允许 Vagrant VM 运行 使用 VirtualBox 作为提供者?

早期调查表明,这似乎无法通过 Travis CI 或 Circle CI 实现,尽管 vagrant-aws 插件允许使用 AWS 服务器作为 Vagrant 提供商。这是正确的吗?

许多 CI 服务不允许通过 LXC 或 Virtualbox 运行 Vagrant,因为它需要嵌套虚拟化(运行虚拟机中的虚拟机)或配置的纯​​裸机服务器给你。

2021 年当前(更新)情况:

  • Github动作可以做到
  • Travis 能够 运行 Vagrant 有一些解决方法。
  • AppVeyor 允许 运行ning VirtualBox(非免费计划)。
  • 你不能在 CodeShip 下
  • You can't under CircleCI
  • 不知道其他 CI 服务,将进一步调查。

我希望在此期间我们会看到 CI 服务允许 运行 使用 Virtualbox 或 LXC 的 Vagrant,但目前 Docker(有其局限性)是唯一的选择.


就个人而言,我很乐意通过 Test-Kitchen CI 或类似的方式将它用于针对不同 platforms/linux 发行版的集成测试。

2021 年 1 月更新GitHub Actions also supports Vagrant - and Vagrant/VirtualBox are both installed out-of-the-box in the MacOS environment (not on Linux or Windows currently!). See the possible environments here. Therefore I created a fully comprehensible example project at: https://github.com/jonashackt/vagrant-github-actions

1.: 创建一个 Vagrantfile(并且您不限于像 Travis 那样使用 libvirt,您有一个完整的 VirtualBox 环境,嵌套虚拟化在 GitHub 动作!)像这样:

Vagrant.configure("2") do |config|
    config.vm.box = "generic/ubuntu1804"

    config.vm.define 'ubuntu'

    # Prevent SharedFoldersEnableSymlinksCreate errors
    config.vm.synced_folder ".", "/vagrant", disabled: true
end

2.: 在存储库的 .github/workflows 目录中像这样 vagrant-up.yml 创建一个 GitHub 操作工作流程

name: vagrant-up

on: [push]

jobs:
  vagrant-up:
    runs-on: macos-10.15

    steps:
    - uses: actions/checkout@v2

    - name: Run vagrant up
      run: vagrant up

    - name: ssh into box after boot
      run: vagrant ssh -c "echo 'hello world!'"

你甚至可以 add caching for the Vagran boxes,这会让你安全几秒钟:)


2020 年初:

TravisCI 现在终于可以 运行 Vagrant 了! 感谢 this GitHub issue I learned about libvirt and KVM, which could be used together with the vagrant-libvirt Plugin 到 运行 TravisCI 上的 Vagrant boxes。

一个示例 TravisCI .travis.yml 应该看起来像这样:

---
dist: bionic
language: python

install:
# Install libvrt & KVM
- sudo apt-get update && sudo apt-get install -y bridge-utils dnsmasq-base ebtables libvirt-bin libvirt-dev qemu-kvm qemu-utils ruby-dev

# Download Vagrant & Install Vagrant package
- sudo wget -nv https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.deb
- sudo dpkg -i vagrant_2.2.7_x86_64.deb

# Vagrant correctly installed?
- vagrant --version

# Install vagrant-libvirt Vagrant plugin
- sudo vagrant plugin install vagrant-libvirt

script:
- sudo vagrant up --provider=libvirt
- sudo vagrant ssh -c "echo 'hello world!'"

generic Vagrant Box images from Vagrant Cloud 的帮助下,您还可以建立在 Travis 上使用 Vagrant + libvirt + KVM 并在本地计算机上使用 Vagrant + VirtualBox 的工作流程,如果您愿意:

我在这里创建了一个完全可用且 100% 可理解的示例项目:https://github.com/jonashackt/vagrant-travisci-libvrt

AppVeyor 使用 VirtualBox 作为提供程序运行 Vagrant。此外,您可以使用其他提供程序,例如 libvirt 或 Hyper-v.

更新: Github Actions is another option. Only Mac OS environment has nested virtualization enabled. An example is here and here.