continuous_integration:travis-ci

継続インテグレーション(CI)ツール

Travis CI

https://travis-ci.org/
GitHubとの連携ならかなり手軽
publicリポジトリなら無料で利用可能. privateリポジトリに使いたい場合は課金しましょう

マイコン程度のプログラムでこれやる必要あるのかって言われると正直ないけど,今後プログラムマンになる可能性はゼロではないので世の中のツールを使えるようになって損ではないかと
armのGCCで使ってる事例がないわけでは無さそうなので試してみる? とりあえず参考文献のやつコピペで無事に動いた.動作を理解したい.
TravisCIに走ってるOS(Ubuntu 14.04?)で動作するようにパッケージを追加する.
どっちかというとLinuxの知識がまだ足りてない感
The Build Lifecycle
基本的なステップは以下の2つ

  1. install : 必要な依存関係のインストール
  2. script : ビルドスクリプトの実行

カスタムコマンドなども追加可能(Ubuntuで追加に必要なパッケージの指定とか,ビルド後に文書生成とかサーバにデプロイとか)
全体の詳細のステップは以下のようになる.

  1. apt addons(OPTIONAL)
  2. cache componets(OPTIONAL)
  3. before_install
  4. install
  5. before_script
  6. script
  7. before_cache
  8. after_success or after_failure
  9. before_deploy(OPTIONAL)
  10. delpy(OPTIONAL)
  11. after_deploy(OPTIONAL)
  12. after_script

Configuring email notifications

notifications:
  email: hoge@poyo.com

ビルド結果を通知する.特に通知が必要なければ引数にfalseとしておく
複数のアドレス,ビルドの結果によるメール通知の有無なども設定可能

  language: c

ビルドの言語環境

addons:
  apt:
    packages:
    - libc6-i386 

arm-none-eabiは32bitでコンパイルされている
しかしTravis CIの動作しているシステムは64bitなので,32bitのライブラリをインストールする必要がある.
addonにてaptコマンドを使ってインストールする.
Installing Packages on Standard Infrastructure

matrix:
  fast_finish: true
  include:
    - name: 7-2018-q2
      env: GCC_URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2?revision=bc2c96c0-14b5-4bb4-9f18-bceb4050fee7?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,7-2018-q2-update
    - name : 6-2017-q2
      env: GCC_URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2?revision=2cc92fb5-3e0e-402d-9197-bdfc8224d8a5?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,6-2017-q2-update
    - name : 5-2016-q3
      env: GCC_URL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/5_4-2016q3/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2?revision=111dee36-f88b-4672-8ac6-48cf41b4d375?product=GNU%20Arm%20Embedded%20Toolchain,32-bit,,Linux,5-2016-q3-update

ビルドマトリクスの中で失敗が許容されている場合,ビルドは全部のビルドが完了するまで完了マークがつかない
なるべく早くビルド完了のマークを付けるには,fast_finishtrueに設定する.
C,C++はenv,compilseをビルドマトリクスの変数として指定可能.
上記のように書くことでマトリクス内のジョブに名前をつけることが可能.
今回はコンパイラのURLをenvで指定し,それぞれのバージョンで名前をつけてみた.

install:
  - pushd .
  - cd ~ 
  - mkdir arm-gcc-toolchain
  - wget -O $HOME/arm-gcc-toolchain/gcc.tar.bz2 $GCC_URL
  - cd arm-gcc-toolchain
  - tar -jxf gcc.tar.bz2 --strip=1
  - popd
  - export PATH=$HOME/arm-gcc-toolchain/bin:$PATH

コードをビルドしてテストするための依存関係をインストールする. 同リポジトリ内部にスクリプトを用意しておき,実行するのもよい.↓の用な感じ

install: ./install-dependencies.sh

この場合は実行権限を持っている状態である必要がある.chmod +x(実行権限を付加するコマンド)
実行するシェルスクリプトは以下のようなShebangを設定しておく.

  • /usr/bin/env sh
  • /usr/bin/env ruby
  • /usr/bin/env python

Shebangとはシェルスクリプトで使用するインタプリタの指定をするやつ,実際のシェルスクリプトには以下のように#!を最初につけて書く,たいていシェルスクリプトの最初の行につける.

#!/usr/bin/env sh

#!/bin/sh は ただのコメントじゃないよ! Shebangだよ!

installステップ内で失敗したとき,ビルドは終わり,直ちにエラーがマークされる.
installで何もしない場合,下記のように書けばよい

install: true

ビルドライフサイクルにて,最初の4段階にあるコマンドのいずれかがゼロ以外の終了コードを返した場合、ビルドは中断される.

  • before_installinstallbefore_scriptにて,0以外の戻り値が来ると,エラーがマークされ,直ちにビルドが終了
  • script中は,0以外の戻り値が来るとビルドがエラーになるが,エラーがマークされるまで,実行は続けられる.

after_success,after_failure,after_deploy,after_scriptおよびこれに続くステージの戻り値はビルド結果に影響なし,しかし,どれか一つのステージでもタイムアウトすると結果はビルドは失敗でマークされる.

before_script:
  - arm-none-eabi-gcc --version

scriptの一個まえ,このコマンドはなくてもいい.
今回は確認のためコンパイラのバージョンを見てる

script:
  - make

これまでのコマンドで必要な環境を作ったりの準備が終わったので,いよいよメインのビルドを実行する.
今回はMakefileに全部書いてあるので,Makeを実行すれば,stm32のコードのビルドが可能.
シェル上でコマンドを叩くのと同じ

$ make

参考文献

  • continuous_integration/travis-ci.txt
  • 最終更新: 2020/08/10
  • by yuqlid