3

オープンソース アプリケーションの継続的デリバリー サイクルを設定したいと考えています。Linux の Filesystem in Userspace (FUSE) に基づいています。CloudBees の Jenkinsにセットアップしようとしましたが、これはまともな無料アカウントを提供していましたが、ルート アクセス権がありませんでした。私のプロジェクトには多くの依存関係があるため、これは問題です。依存関係をインストールするためのルート アクセス権があるため、内部 API のテストに最適なTravis CIを使用しました。ただし、FUSE はサポートしていないため、ファイルシステムで直接テストを実行することはできません。Travis CI での私の経験によると、継続的デリバリー アプローチは、多くのバグがリリースされるのを防ぎ、問題をより迅速に特定するのに役立つ可能性があります。

Github と統合し、root アクセスを許可し、FUSE をサポートする、Travis CI に似たサービスはありますか?

[編集]
ヴィ。FUSE をエミュレートするために、Travis-ci マシンで User Mode Linux を実行することをお勧めします。Vi.s ヘルプで達成された進歩を要約すると、次のようになります。

  1. より多くのメモリ、ネットワーク アクセス、およびファイル システムへのアクセスを使用して 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
  1. gcc を使用する場合は、PATH 変数を設定します。

    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
  2. procfs が必要な場合は、UML 内でこれを実行します。

    mount none /proc -t hppfs
    
  3. Python の場合、UML 内で仮想環境を有効にする必要があります。

    source /home/travis/virtualenv/python2.6.9/bin/activate
    

へのパスはactivate、UML を開始する前に次のコマンドを発行することによって見つけることができます。

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        
4

1 に答える 1

3

Travis-CI を使用すると、UML (User Mode 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
于 2015-01-21T15:02:47.510 に答える