環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 20.04 |
ROS | Noetic |
インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。
概要
ソフトウェア開発していると、気づいたらビルドの問題が突如発生するということがありますしえます。例えば、追加ビルドは通るが、新たにcloneしてビルドをすると通らないこと、apt installで何を入れると通るか分からなくなるということが起こります。
これを防ぐのがCI(継続的インテグレーション)でして、これは自動的にサーバーで特定の処理を行うというものです。今回はgitの更新がある(=pgit pushする)たびにサーバーで仮想環境を使って1からビルドを試すということをします。今回はCIサービスとしてgithub actionを使います。
github actionとは
github actionとはgithubの公式機能でリポジトリの.github/workflow/
以下のファイルに書かれている操作を自動で実行する仕組みです。左記のディレクトリにファイルを作ってpushするだけで、その他の操作は一切不要です(githubのWebページへ行って機能をONにするなどの操作は一切ありません)。
操作
ワークフローファイル
name: ROS build workflow
on: [push]
jobs:
build:
runs-on: ubuntu-20.04
env:
CATKIN_WS: /home/runner/work/catkin_ws
steps:
- uses: actions/checkout@v2
- name: Setup ROS
uses: ros-tooling/setup-ros@v0.2
with:
required-ros-distributions: noetic
- name: Install catkin tool
run: sudo apt-get install python3-catkin-tools
- name: Init workspace
run: |
source /opt/ros/noetic/setup.bash
mkdir -p ${CATKIN_WS}/src
ln -s ${GITHUB_WORKSPACE} ${CATKIN_WS}/src/
- name: pre build
run: |
source /opt/ros/noetic/setup.bash
cd ${CATKIN_WS}/src/ros_lecture
git submodule update --init --recursive
rosdep update
rosdep install -i -y --from-paths ./
- name: build
run: |
source /opt/ros/noetic/setup.bash
cd ${CATKIN_WS}
catkin build
-
on: [push]
は実行タイミングでこれはgithubにpushするたびに実行することを示します。 -
uses: ros-tooling/setup-ros@v0.2
これは他の人が定義したactionを実行することを示します。指し先はこちら - submoduleのclose、rosdepで依存パッケージのダウンロー、
catkin build
という流れでビルドを実行します。
実行&確認
pushするだけで動作が始まります。
githubのWebサイトに行きリポジトリのactionタブを見ます。
左側のタブから目的のワークフロー(今回はROS build workflow)を選びます。
このページで最新や過去の実行履歴が見れます。緑や赤の表示は結果でその横の文字はコミットメッセージになります。ワークフローに含まれるアクションの一覧が見えます。
アクション名を押すと詳細が見えてここからログも見れます。失敗したときに何が失敗したのかはここで確認できます。
バッチを付ける
ワークフローの詳細ページの右上の「...」から「Create Status Badge」を選択しましょう。リンクが生成されます。これをgithubに上げるREADME.mdにそのまま張れば表示されます。
TravisCIからgithub actionへの乗り換え
以前はTravisCIというサービスを使っていました。昔はpublicリポジトリなら無料だったのですが2021年に(ほぼ)有料になってしまいました。特に複雑なことをやっていたわけではないのでgithub actionへの乗り換えをしました。
参考
GitHubの新機能「GitHub Actions」で試すCI/CD