Travis CI
https://travis-ci.org/
GitHubとの連携ならかなり手軽
publicリポジトリなら無料で利用可能.
privateリポジトリに使いたい場合は課金しましょう
組み込み(stm32のソースコード)に適用してみる
マイコン程度のプログラムでこれやる必要あるのかって言われると正直ないけど,今後プログラムマンになる可能性はゼロではないので世の中のツールを使えるようになって損ではないかと
armのGCCで使ってる事例がないわけでは無さそうなので試してみる?
とりあえず参考文献のやつコピペで無事に動いた.動作を理解したい.
TravisCIに走ってるOS(Ubuntu 14.04?)で動作するようにパッケージを追加する.
どっちかというとLinuxの知識がまだ足りてない感
The Build Lifecycle
基本的なステップは以下の2つ
install
: 必要な依存関係のインストールscript
: ビルドスクリプトの実行
カスタムコマンドなども追加可能(Ubuntuで追加に必要なパッケージの指定とか,ビルド後に文書生成とかサーバにデプロイとか)
全体の詳細のステップは以下のようになる.
apt addons
(OPTIONAL)cache componets
(OPTIONAL)before_install
install
before_script
script
before_cache
after_success
orafter_failure
before_deploy
(OPTIONAL)delpy
(OPTIONAL)after_deploy
(OPTIONAL)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_finish
をtrue
に設定する.
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_install
,install
,before_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