![https://gitlab.com/uploads/-/system/project/avatar/250833/runner_logo.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F155486%2F4202d3bb-3786-f7e1-fb94-7125439d6cd0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ab7626aada6f4496cb3ce9148f724561)
「GitLab CI」とは
GitLab CIはCI(Continuous Integration、継続的インテグレーション)ツールの一つです.
私は以前インターンシップでGitLabCIを用いたLaravelアプリケーションのCIツールを自作したことがあるのでこちらについて記載させていただきます.
「GitLab Runner」とは
「GitLabサーバー」と「GitLab Runner」の役割
GitLabを用いて継続的インテグレーションを行うためには、「GitLabサーバー」とは別にジョブを実行するための「GitLab Runner」というサーバーが必要.
####GitLabサーバー(CIサーバー、Coordinator)
ジョブ管理者.GitLabのプロジェクトで管理しているブランチへのプッシュやマージリクエストをトリガーとして、GitLab Runnerを呼び出す.
GitLab Runner
実行者.サーバー内の環境でシェルを実行したり、一時的にDockerコンテナを生成してジョブを実行する.
![000001-12.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F155486%2F664d820d-4295-3c10-30cd-32e4e70421a9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dd526b68b770d630919d4d2c58b71d08)
GitLab Runnerの実行方式「Executor」とは
GitLab Runnerには「Executor」と呼ばれるジョブの実行方式がある.
Executorの種類
-
Docker(GitLab推奨)
Runnerとは別に一時的に生成したDockerコンテナの環境内でジョブを実行する.ジョブを実行する度にコンテナを新しく生成するため,実行するジョブの冪等性が保証される. -
Shell(GitLab非推奨)
Runnerの環境内でジョブを実行する.ジョブを実行する際にRunnerの環境をクリーンアップしないため、実行するジョブの冪等性が保証されない.またShellによるRunnerの実行はGitLabサーバー上の他プロジェクトのソースコードを取得することができてしまうため、セキュリティに問題があり,GitLabはこの実行方式を非推奨としている. -
その他のExecutor
- Docker Machine and Docker Machine SSH (auto-scaling)
- Parallels
- VirtualBox
- SSH
- Kubernetes
研究に用いるアーキテクチャ例
![Screen Shot 2019-09-18 at 15.45.34.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F180040%2F798644b4-5a0f-a0c7-4cbd-eb1a52a2f2ff.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f424d0463d3e20e14e787522556f469d)
効果
講義でも説明があったが,継続的インテグレーション (以下CI) とは,アプリ開発時の品質向上・納期短縮を目的とした習慣のこと.機械学習の研究成果においても,CIを行うことで以下の利点があると考えられます.
・バグの修正が容易
・共有がしやすい
・モデルの管理なども自動化することで管理品質の向上
問題
講義でもおっしゃられた通り,CIツールの管理は非常に難しく専門家が出来てしまう場合が多い.
特に機械学習のチームは流動性が高いということなので,標準化して協力してCIツールを使う体制が望まれると感じました.