virtualbox - 在 Concourse 任务中运行 VirtualBox

标签 virtualbox concourse

我正在尝试用大厅 build 流浪盒子。我正在使用 concourse/buildbox-ci 图像,该图像在 concourse 自己的构建管道中用于构建 concourse-lite vagrant box。

在运行 packer 之前,我将创建 virtualbox 设备,以便它们与主机设备匹配。然而,加壳器构建失败并显示:

==> virtualbox-iso: Error starting VM: VBoxManage error: VBoxManage: error: The virtual machine 'packer-virtualbox-iso-1488205144' has terminated unexpectedly during startup with exit code 1 (0x1)
==> virtualbox-iso: VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
  • 有人成功了吗?
  • 大厅 hetzner 工作人员配置可以在任何地方访问吗?

其他配置信息:

在大厅作业容器中:

# ls -al /dev/vboxdrv /dev/vboxdrvu /dev/vboxnetctl
crw------- 1 root root 10, 53 Feb 27 14:19 /dev/vboxdrv
crw------- 1 root root 10, 52 Feb 27 14:19 /dev/vboxdrvu
crw------- 1 root root 10, 51 Feb 27 14:19 /dev/vboxnetctl

在工作主机上:

# ls -al /dev/vbox*
crw------- 1 root root 10, 53 Feb 24 09:40 /dev/vboxdrv
crw------- 1 root root 10, 52 Feb 24 09:40 /dev/vboxdrvu
crw------- 1 root root 10, 51 Feb 24 09:40 /dev/vboxnetctl

大厅工作:

jobs:
  - name: mpf
    serial_groups: [build]
    plan:
      - get: vagrant
        trigger: true
      - get: version
        resource: version-mpf
      - task: build
        privileged: true
        file: vagrant/ci/tasks/build.yml
        tags: [vm-builder]
        params:
          TEMPLATE_FILE: virtualbox-mpf.json

vagrant/ci/scripts/build.sh:

#!/bin/bash -ex

mknod -m 0600 /dev/vboxdrv c 10 53
mknod -m 0600 /dev/vboxdrvu c 10 52
mknod -m 0600 /dev/vboxnetctl c 10 51

for name in $(VBoxManage list hostonlyifs | grep '^Name:' | awk '{print $NF}'); do
    VBoxManage hostonlyif remove $name
done

VERSION=$(cat version/version)

packer build -var 'version=${VERSION}' vagrant/packer/${TEMPLATE_FILE}

vagrant/ci/tasks/build.yml:

---
platform: linux

image_resource:
  type: docker-image
  source: {repository: concourse/buildbox-ci}

inputs:
  - name: vagrant
  - name: version

outputs:
  - name: build

run:
  path: vagrant/ci/scripts/build.sh

最佳答案

不幸的是,Hetzner 工作配置基本上只是我们定期升级 VirtualBox 并在崩溃时修复问题。 (编辑:我们还确保在主机和容器中使用相同的操作系统发行版 - 在我们的例子中是 Arch Linux)。

确保您的 VirtualBox 版本与容器中的版本匹配 - 直至补丁版本。

设备 ID(10,53 和 10,52 和 10,51)也必须与主机上找到的 ID 匹配 - 这些 ID 因 VirtualBox 版本的不同而有所不同。

我们还确保使用不执行任何网络命名空间的特殊后端,如果您正在启动需要纯主机网络的虚拟机,这一点非常重要。

这整件事很棘手。 :/

关于virtualbox - 在 Concourse 任务中运行 VirtualBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42531538/

相关文章:

android - Virtualbox 上 Android x86 中的蓝牙

Virtualbox headless : not starting via systemd

windows - 使用 VirtualBox(或 VMWare)虚拟化内联网络设备

continuous-integration - Concourse CI - 如何运行功能测试?

concourse - 如何在Windows 10中安装fly cli

python - 休息 api 触发大厅管道/工作

networking - 如何将在 boot2docker 中运行的 Docker 容器连接到在另一台主机上运行的网络服务?

ubuntu - 总是遇到 “Ambari Server not running, Stale PID File at:/var/run/ambari-server/ambari-server.pid”

git - Concourse:使用 HTTP 请求触发作业

concourse - 需要在windows系统上安装Concourse(CI/CD)