在 GitHub Actions 上使用 Vagrant(最好包括 VirtualBox)

jon*_*ckt 5 continuous-integration virtualbox virtual-machine vagrant github-actions

从这个答案中知道,可以使用 TravisCIlibvirt而不是 VirtualBox 在 TravisCI 上启动并运行 Vagrant Boxes。

GitHub Actions 也可以实现这一点吗?由于新的定价模型,我们将把所有内容从 TravisCI 上移走,因此我们还需要切换基于 Vagrant 的测试用例。

jon*_*ckt 7

是的,使用(当前)环境可以实现这一点macos-10.15。您也可以尝试使用,但目前似乎没有适用于 Big Sur 的稳定 VirtualBox 版本我在https://github.com/jonashackt/vagrant-github-actions创建了一个小示例项目macos-latestmacos-11.0

假设您的存储库中有一个Vagrantfile,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

然后,您在文件夹中添加一个 GitHub Action 工作流程,例如vagrant-up.yml,.github/workflows如下所示:

name: vagrant-up

on: [push]

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

    steps:
    - uses: actions/checkout@v2

    - name: Cache Vagrant boxes
      uses: actions/cache@v2
      with:
        path: ~/.vagrant.d/boxes
        key: ${{ runner.os }}-vagrant-${{ hashFiles('Vagrantfile') }}
        restore-keys: |
          ${{ runner.os }}-vagrant-

    - name: Run vagrant up
      run: vagrant up

    - name: ssh into box after boot
      run: vagrant ssh -c "echo 'hello world!'"
Run Code Online (Sandbox Code Playgroud)

您甚至可以省略缓存操作- 我只是将其添加到此处以展示可能性。它会为您节省几秒钟的时间,这取决于您使用的 VagrantBox。

用于运行 Vagrant 的 GitHub Actions 实现比TravisCI 对应的实现要容易得多,因为您不需要安装 Vagrant 或 VirtualBox - 并且也不需要切换到 libvirt。只需使用https://app.vagrantup.com/boxes/search中您想要的框即可,这非常酷。