Edited at

ROS講座98 TravisCIでビルドチェックをする


環境

この記事は以下の環境で動いています。

項目

CPU
Core i5-8250U

Ubuntu
16.04

ROS
Kinetic

インストールについてはROS講座02 インストールを参照してください。

またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。


概要

ROSを開発していると、気づいたらビルドの問題が発生しえます。特に変更を加える&ビルドはできるが、新たにcloneしてビルドをすると通らないことや、apt installで何を入れると通るか分からなくなるということがあり得ます。

これを防ぐのがCIでして、gitの更新があるたびにサーバーが仮想環境を使って1からビルドをしてくれます。

今回はgithubと相性の良いTravisCIというサービスを使ってCIでビルドチェックを行います。


TravisCIへのログイン~リポジトリの登録

CIを導入したいリポジトリのGithubアカウントを持っていることが前提です。



  • Travis CIのサイトにアクセスして、Sign in with Githubを押す。



  • githubアカウントとパスワードを入力する。



  • Autholize Travis CI を押す。



  • 登録完了の画面が出るので、遷移するまで5秒ほど待つ。



  • アカウントのリポジトリの中で、CIを動作させるリポジトリをチェックを入れる。




.travis.ymlの追加

リポジトリのルートに.travis.ymlというファイルを置きます。以下がとりあえずROSをインストールしてcatkin_makeする例です。ros_lecture固有の設定などは入っていないので以下を自分のgithubリポジトリのルートに置けば、ROSのビルドチェックができます。


.travis.ciの例

sudo: required

cache:
- apt
language: generic

# ros distro
matrix:
include:
- name: "Xenial kinetic"
dist: xenial
env: ROS_DISTRO=kinetic

# env
env:
global:
- ROS_CI_DESKTOP="`lsb_release -cs`"
- CI_SOURCE_PATH=$(pwd)

before_install:
# install ros
- sudo sh -c "echo \"deb http://packages.ros.org/ros/ubuntu $ROS_CI_DESKTOP main\" > /etc/apt/sources.list.d/ros-latest.list"
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- sudo apt-get update -qq
# ros base
- sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-desktop-full
# source & rosdep
- source /opt/ros/$ROS_DISTRO/setup.bash
- sudo rosdep init
- rosdep update

install:
# make catkin_ws
- mkdir -p ~/catkin_ws/src
- cd ~/catkin_ws/src
- catkin_init_workspace
- cd ~/catkin_ws
- catkin_make
- source devel/setup.bash
- cd ~/catkin_ws/src
- ln -s $CI_SOURCE_PATH .

script:
# build
- cd ~/catkin_ws
- catkin_make




  • sudo: requiredはsudo権限が必要かどうかを選択します。必要でなければdocker環境で、必要だと仮想環境が立ち上がり、仮想環境のほうが遅いのですが、今回は必要です。


  • cache: / - aptはaptのキャッシュを使う設定です。


  • env以下では環境変数を書いています。デフォルトでgithubのリポジトリは/home/travis/(ユーザー名)/(リポジトリ名)にあり、デフォルトのワーキングディレクトリはここになっています。この位置をCI_SOURCE_PATHに設定します。

  • before_installではrosのインストールをしています。ほとんど通常と同じコマンドです。rosはいくつかインストールのオプションがあって少ない構成の物のほうが早くインストールが終わるのですが大した差がないのでdesktop-fullを使います。

パッケージ
内容
開始~インストール完了までの目安

ros-base
最低限
1分半

desktop
最低限+rvisなどのツール
2分半

desktop-full
上記+simやライブラリ
3分半


  • installではcatkin_wsを作成して、ビルドをします。今回は~/catkin_ws/srcからにリポジトリをcloneしたディレクトリにリンクを張ります。ここのスクリプトが失敗するとビルドエラーになります。

上記のスクリプトがrosをビルドする最低限のものです。ただしros_lectureではこれだけだと依存が足りなくでビルドが失敗します。以下でビルドが成功します。


.travis.yml

sudo: required

cache:
- apt
language: generic

# ros distro
matrix:
include:
- name: "Xenial kinetic"
dist: xenial
env: ROS_DISTRO=kinetic

# env
env:
global:
- ROS_CI_DESKTOP="`lsb_release -cs`"
- CI_SOURCE_PATH=$(pwd)

before_install:
# install ros
- sudo sh -c "echo \"deb http://packages.ros.org/ros/ubuntu $ROS_CI_DESKTOP main\" > /etc/apt/sources.list.d/ros-latest.list"
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- sudo apt-get update -qq
# ros base
- sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-desktop-full
# additional apt package for build
- sudo apt-get install -y ros-$ROS_DISTRO-jsk-rviz-plugins
- sudo apt-get install -y libarmadillo-dev libarmadillo6
# source & rosdep
- source /opt/ros/$ROS_DISTRO/setup.bash
- sudo rosdep init
- rosdep update

install:
# make catkin_ws
- mkdir -p ~/catkin_ws/src
- cd ~/catkin_ws/src
- catkin_init_workspace
- cd ~/catkin_ws
- catkin_make
- source devel/setup.bash
- cd ~/catkin_ws/src
- ln -s $CI_SOURCE_PATH .
# additional src package for build
- git clone https://github.com/tysik/obstacle_detector.git

script:
# build
- cd ~/catkin_ws
- catkin_make



  • jsk_rviz_pluginsが必要なのでaptでros-$ROS_DISTRO-jsk-rviz-pluginsをインストールしています。

  • obstacle_detectorが必要なので、git clone https://github.com/tysik/obstacle_detector.gitしています。またobstacle_detectorの依存ライブラリのインストールするためにsudo apt-get install -y libarmadillo-dev libarmadillo6しています。


git push

.travis.ymlの変更をcommitしてpushします。するとCIが動き出します。黄色は実行中、赤が失敗、緑が成功を示します。

ros_lectureのところを押すと詳細が見れます。


バッチを付ける



  • build passingという「バッジ」を左クリックします。


  • markdownを選択してコードをコピーします。



  • これをgithubのREADME.mdなどに入れると表示されます。




Email通知のOFF

デフォルトだとビルドをするたびに結果をEmailで通知してくれます。右上のアカウントのアイコン->Settings->Settingsの一番下の「Email notification」をOFFにしましょう。


参考

TravisCIの使い方

ROS answers

.travis.ymlスクリプト


目次ページへのリンク

ROS講座の目次へのリンク