gitlab CIのメモ [ C++ / cmake ]
前書き
C++の環境構築?のためにgitlab CIとかcmakeとか少し触ったのだけど、しばらく触らないかもしれないし、
忘れないうちにメモしておこうと思う。
申し訳ないけれど何をやったのか気になる方はいっそリンク先の .gitlab-ci.yml を見てほしい。その方がはやい。
長い時間が空かない限りは自分は読めると思うし、それを細かく解説する気力はないです。。。
少なくとも自分は特殊な知識や技能でこれを成し遂げたわけではなくググって何とかしたのでググればできるはず。
とりあえず得た教訓
こんなところか? _1. について _2. について _3. について そしてcmakeのバージョンの差異が原因の1つだとわかった。
apt/apt-getでubuntu:18.04やdebianがインストールするcmakeはcmake 3.7 (?)で、ローカルのcmakeは3.15。 cmakeにはいろんな書き方があるらしい。 そして取り入れた新しい書き方の1つにCMP0076の使用があった。 CMP0076 — CMake 3.13.5 Documentation
)
残念ながらubuntuでデフォルトで入るcmakeは3.13に満たないので落ちていたらしい。
curlでcmake 3.15をDLしてtar, make, configureして...これでbuildは通るようになった。
代わりにgitlab上でのbuild時間は一気に伸びてしまった。 新しいcmakeを使えるようにするこの工程は時間をかなり食うらしい。 _4. について BoostTestを使うならローカルに持っておいてそれを参照するようにする。
それでgitの管理に含めないのが想定された使用法なんだろうなぁと思った。
IUTESTもそうできるんだろうけど、今回はgitlabのCIでtestする+ヘッダオンリーの手軽さが重要だったので考えなかった。詳細
addやcommitは消せるのは知っていた。pushを消すのは作業中には思いつかなかった。
一方でrebaseで問題が起きるケースがあるのは知っていた(
Git - リベース
)。
rebaseはほぼ使わないのだけどコミットログをきれいにする用途で使うのかなぁくらいに思っていた。
リモートのブランチのログをきれいにする(rebaseする)と問題が起きるならできないってことか、くらいに思ってた。
けどできるらしいので次回はもっときれいにしましょうね( git pushを取り消す2つの方法 - Reasonable Code )。
gitlabにpushしてbuildやtestの成否を待つのは大変苦しい。
やってみて分かったけれど、今回のケースではそんなにメリットが感じられない。
ローカルのdockerでやるのが難しいとかなら良いのかもしれないけどどうなんだろう。
他の人にリポジトリが有効で、その有効の判断はどの環境/テストコードに基づいている、と明示できるというのは良いのかもしれないけどうーん。
小規模ならローカルでテスト回して通ったらpushで良いのでは?と思う。
分かんないけどbashなりbatなりでtestが通ったらmasterにcommit/push/merge&topic branchのdelete; 通らないならdev/hotfixのbranchにcommit/push みたいなことはできるんじゃなかろうか。いや分からんけど。
gitlabにpushしてもbuildでコケる。ローカルでは上手くいく。
何度もpushするのは面倒だし、gitlab上のdockerで何が起きているのかを逐一echoしようかと思ったら上手くできなかったり。そもそもechoで色々知れてもpushを繰り返すことになりそう。
なのでローカルのdockerにgitを入れてgitlabからcloneしてbuildなりtestなりして調べることにした。
(今調べたら とりあえずubuntu18.04のcmakeは3.10.2みたいだ。
記憶違いかもしれない。debianもubuntuとcmakeのバージョンは同じだった気がするので3.10.2かもしれない?)
そしてsetや謎の変数${...}を多用する比較的古い書き方を回避できるらしいのも調べるうちに分かったのでなるべく新しい書き方にすることにして作業を進めていた。
情報が少ないのでかなりしんどかったけれど、古い書き方よりもCMakeLists.txtを書くのは楽だった。すっきりしてるように感じる。
(
CMakeとIDEを連携させる - Qiita
もうこの時点でサクサク開発するのとはかけ離れている。
cacheとかで回避できるんだろうか。
考えてみれば当たり前の話なのだろうけど、BoostTestリポジトリだけclone/submoduleしても動かない。
残念ながら”とりあえず試してみよう”というタイミングでこれに気づくことはできなかった。
ローカルにはBoostがあるから足りない分は多分そっちで解決されたのだろう。
確かにCMakeLists.txt書いているときにUITESTの設定と比べてなんかDirectoryの設定が少し雑でも許されるなぁ?とは思っていた。
次に似たようなことをやるならこれ参考にしたい。 カバレッジも出したい。 ローカルでtestしてその結果使ってgitlab/githubでカバレッジ見るとかもできそう?
www.slideshare.net