本日開催予定の Mobile CI/CD Meetup,LT枠で申し込んでおきながら体調を崩してしまって参加できなくなってしまいました.
関係者の方々大変ご迷惑をお掛けして申し訳ありません.
とはいえ,せっかく資料を作ったので,このまま寝かせるのももったいないのでQiitaに投稿することにします.
GitLab CI with GitHub
今回発表するつもりだったのはこちら.「GitLab CI with GitHub」です.
Why GitLab CI?
GitLabといえば,GitHubのOSSクローンや競合と思う方も多いかと思います.
しかし,GitLabはCIに関する機能も豊富で自由度が高く,このCI機能を単体で使うというのも十分に検討の価値が有ります.
上の図は, Forrester Wave社の調査 によるCIツールの評価です.
現在の価値提供,及びツールの戦略で高い評価を得ています.
また,GitLab CIはオンプレミスな環境に導入できますので,社外にソースコードやビルド出す必要もありません.
大人の事情でSaaSなCIサービスが使えない御社[誰?]にも最適です.
GitLab CI is powerful!
こちらは具体的なGitLab CIの特徴です.
GitLab CI Runner
実際にビルドなどを行うマシンにRunnerソフトウェアをインストールすることで,GitLab CIとして動かすことができるようになります.
Runnerは,オンプレミスな物理サーバやAWS,GCPなどのクラウド,または手元の余ったPCに自由にインストールできます.
OSも,Win, Mac, Linuxをサポートしています
CI Engine(Executor)
GitLab Runnerは,CIを実行するための複数の Executor
を提供します.
Dockerはもちろん,Shell, docker-machine, Kubernetes, VirtualBox, SSH, etc...
docker-machineでAWSやGCPを指定することで,CIのたびにインスタンスを起動する,オートスケールなCI環境を構築することもできます
Private Container Registory
例えば,AndroidをビルドするためのDockerイメージは,Android SDKを含んだまま公開してしまうと,再配布条件に引っかかってライセンス違反となってしまいます.
GitLabはプライベートなDockerイメージのレジストリを持っており,いつでもそのプライベートなイメージでビルドすることができるようになります.
CIのたびにAndroid SDKのダウンロードやアップデートするのを最小限にでき,CIの時間を短縮できるようになります.
Auto DevOps
モバイルでは恩恵は少ないのですが, GitLabは Auto DevOps
というDevOps支援のツールチェインを目指していて,
- Build
- Test
- Code Quality
- Review App
- Deploy
- Monitoring
まで,一貫したDevOpsツールチェインとなっています.
恩恵に預かりやすいのはバックエンド開発でしょうか.GitLab CIのメリットはモバイル開発に限らないので,ぜひバックエンドCIでも使ってみてください.
Network
連携はこんな感じです.
GitLab本体と,CI Runnerはサーバリソースを共有しない形で立てます.
GitLabのGitHub連携は, Premiumライセンス が必要です.(19 USD / month / user)
そのまま利用とすると,人数分のライセンスが必要になってしまいますが,GitLab CIだけが目的であれば,管理ユーザ1名分のライセンスのみで利用できます.
結果はSlackへ通知し,各開発者はSlackで結果を確認します.
ちなみに, Circle CI のオンプレミス料金を見ると, 35 USD / month /user ですので,それよりもだいぶお安めです.
また,もちろん同時ビルド数に制限などありません.
Sample GitHub repository
サンプルのGitHubリポジトリです.
ここでは,単純に GitLab CI 実行するための .gitlab-ci.yml
を配置しています.
その中身もとても簡単ですね.シェルコマンドで ehco OK
を実行しているだけです.
もちろん,Androidのソースコードがあるリポジトリで, ./gradlew build
を実行すれば,AndroidプロジェクトのCIを実行することができます.
Link GitHub to GitLab
それでは実際に連携してみます.
なお,この連携は自分で GitLab を立てなくても, gitlab.com で試してみることもできます.
GitLabのNew Projectから, CI/CD external repo
を選択し,GitHubをクリックします.
GitLabがEnterprise Premium以上のライセンスでないと,この選択肢が出てきませんのでご注意ください.
GitHubのPersonal Access Tokenの入力画面に移ります.
未発行の場合は,リンク先からPATを発行します.
scopeはrepoを選択してPATを作成します.
PATを入力すると,連携するGitHubリポジトリの選択画面が表示されます.
各リポジトリに Connect
ボタンがあるので,クリックすると連携できます.
連携が完了すると,画像のように Done
と表示されます.
連携が完了すると,GitLab側にもGitHubのリポジトリが取り込まれます.
この時点でWebHookも自動で連携されています.
Pipeline
パイプラインページに移動してみると,すでにパイプラインが動いており,passしています.
Job Details
ジョブの詳細を見てみると,ちゃんと ok がコンソールに出力され,ビルドがパスしているのがわかります.
Conclusion
完全無料!とは行きませんでしたが,GitLab CIは十分に低コストでオンプレミスで ナウい モダンなCI環境を提供してくれます.
すでにGitLabを使っている方は,それこそPremiumライセンス不要でGitLab CIを使えます.(Community Editionでも.)
みなさんも試してみてはいかがでしょうか?