我想为我的开源应用程序设置一个持续的交付周期。它基于Linux的用户空间文件系统(FUSE)。我尝试在CloudBees' Jenkins上设置它,它提供了不错的免费帐户,但我没有root访问权限,这是有问题的,因为我的项目有很多依赖项。我继续使用Travis CI,它非常适合测试内部API,因为我具有root访问权限来安装依赖项。但它确实not support FUSE,所以我不能直接在文件系统上运行测试。 根据我对Travis CI的经验,持续交付方法可能会阻止许多错误的发布,并有助于更快地发现问题。
是否有与Travis CI类似的服务,它与Github集成,允许root访问,并支持FUSE?
[编辑]
六。建议在Travis-ci机器上运行用户模式Linux,以模拟FUSE。总结一下Vi.s帮助取得的进展:
为了设置具有更多内存的UML,网络访问和对文件系统的访问执行:
/usr/bin/linux.uml init=script_to_run.sh rootfstype=hostfs rw eth0=slirp mem=2G
在用户脚本中,调用:
# Enable fuse module.
insmod /usr/lib/uml/modules/`uname -r`/kernel/fs/fuse/fuse.ko
# Set up TCP/UDP network access.
ifconfig lo up
ifconfig eth0 10.0.2.15
ip route add default via 10.0.2.1
如果使用gcc,请设置PATH变量:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果您需要procfs,请在UML中执行:
mount none /proc -t hppfs
对于Python,您应该在UML中激活虚拟环境:
source /home/travis/virtualenv/python2.6.9/bin/activate
通过在启动UML之前发出以下命令,可以找到activate
的路径:
echo "Path to Python executable: "$(which python)
我仍然无法运行FUSE:
简而言之:
`fuse' likely not compiled with -mcmodel=kernel
insmod: error inserting '/usr/lib/uml/modules/3.2.2/kernel/fs/fuse/fuse.ko': -1 Invalid module format
modprobe: FATAL: Could not load /lib/modules/3.2.2/modules.dep: No such file or directory
modprobe: FATAL: Could not load /lib/modules/3.2.2/modules.dep: No such file or directory
[...]
fuse: device not found, try 'modprobe fuse' first
答案 0 :(得分:3)
Travis-CI允许安装系统包,包括UML(用户模式Linux)。
您可以在UML中启动应用程序(使用帮助程序脚本)。示例:https://travis-ci.org/vi/execfuse/builds/47789978
以下是帮助程序脚本:
#!/bin/bash
CURDIR="`pwd`"
cat > umltest.inner.sh <<EOF
#!/bin/sh
(
export PATH="$PATH"
set -e
set -x
insmod /usr/lib/uml/modules/\`uname -r\`/kernel/fs/fuse/fuse.ko
cd "$CURDIR"
./tests.sh
echo Success
)
echo "\$?" > "$CURDIR"/umltest.status
halt -f
EOF
chmod +x umltest.inner.sh
/usr/bin/linux.uml init=`pwd`/umltest.inner.sh rootfstype=hostfs rw
exit $(<umltest.status)
.travis.yml
中的补充命令:
- sudo apt-get install -qq libfuse-dev pkg-config fuse user-mode-linux
- sudo mknod /dev/fuse c 10 229
- sudo chmod 666 /dev/fuse