GitLab CIでRustのCIとクロスコンパイル: お手軽編

κeenです。ちょっとづつGitLabを使っていこうとしてます。 RustでCIとクロスビルドができたので紹介します。

GitLab CIとは

GitLabはGitHubと違って1開発からデプロイまでの面倒をみるのでCIも付属しています。 外部サービスでない分コンフィグファイル置くだけで走り始めたり、CIの成果物をそのままバイナリリリースに置けたりします。

また、GitLabは利用形態にサービスとオンプレがありますが私は今回サービスの方で試しているのでオンプレで使いたい方は自分に合わせて読んでください。

方針

  • 想定ケースとしてはRustで書かれたCLIツールのCI
    • プラットホーム依存のコードはない想定
  • ひと目で何してるか分かる範囲で頑張る
  • 1ファイルで済ませる
  • 素性のよく分からないDockerイメージとかは使わない

コード

これ。バイナリリリースの例はここ。適当にコピペしてお使い下さい。

残念ながらmacOS向けには簡単はできそうになかったのであきらめました。SaaSでもmacOSのrunner提供してくれないかなー。 一応Linuxからのクロスコンパイルは成功例があるものの、よくわからないdockerイメージを使っているのと、ベースに使われているdockerプロジェクトが更新されていないようなので避けることにしました。手軽に出来る方法がありましたら情報、マージリクエストともにお待ちしております。

Windowsはmingwのみビルドしています。クロスビルドのガイドを見るにMSVCは手軽にはビルドできなそうです。 それにバイナリを提供するという目的ではどちらか1つがあれば十分でしょう。

次回予告

GitHub + Travis CIならtrustというおばけのようなプロジェクトがあります。 さまざまな環境でビルド/テストできるように整えられています。

それをGitLab CIに移植しようとしているのですが内部で使われているツールの問題で詰まってしまいました。 問題が解決できたらまた紹介記事を書こうと思います。

ノート

GitLab 11.7からReleaseがリッチになりました。 しかしまだAPIレベルでのサポートで、CI/CDからスムーズに登録できるよう鋭意開発中とのことです。 今はリリースノートにリンクを手で書いてますがいずれ自動化されると思われます。


  1. 最近だとGitHub Actionsもありますが…。 ↩︎

Written by κeen