今回は、GitLab CIについての概要を紹介します。
対象としているユーザーは、GitLab.comを使用していて、GitLab CIに必要なGitLab Runnerは別サーバーで用意しない人を想定しています。
GitLab CIを使うための手順
GitLab.comを使用している場合、GitLab CIを使う手順は下記のようになります。
- .gitlab-ci.ymlを作成する
- 作成したgitlab-ci.ymlをCI実行したいプロジェクトのリポジトリに置く
大まかな手順はこれだけです。
ということは、GitLab CIの一番のポイントとなるのは .gitlab-ci.yml ということになります。
このファイルでGitLab CIで実行するjobの定義などを行うことになります。
手順としては上記の通りですが、CIが実行されるタイミングはデフォルト設定では、リポジトリに何かしらの変更があった場合になります。
ファイルを追加したり、ファイルの内容を書き換えたり、ファイルを削除したりするとGitLabがそれをトリガーにして、GitLab CIを実行します。
.gitlab-ci.yml の書き方
.gitlab-ci.yml の構成
.gitlab-ci.ymlはYAMLファイルであり、構造化されたデータを表現するためのフォーマット形式になっています。
YAMLのフォーマット は、 データの階層構造をインデントを使って表します。
Ruby関連の設定にこのYAML形式のファイルが使用されることが多いようです。
(Rubyをほとんど触ったことないので、.gitlab-ci.ymlに触れるまで知りませんでした・・・)
.gitlab-ci.yml のサンプル
とても簡潔な.gitlab-ci.ymlのサンプルを書いてみます。
image: python:latest
stages:
- test
job_1:
stage: test
script:
- python hello.py
サンプルの解説
1行目:image
CI実行する環境のDockerイメージを指定しています。
今回はPythonのテストコードを実行するCIを作成しようと思うので、Python最新版のDockerイメージを指定しました。
3行目:stages
今回は1つのjobしかないので必要性がないですが、数多くのjobを実行させる時、ステージ分けをして並列で実行させることも可能です。
そのステージ分けにこのstagesを使用します。
そしてjob毎にstageを指定することでステージが関連付けされます。
6行目:job_1
CIで実行するjobの内容を書いていきます。
job_1がjob名になります。
7行目のstageが先ほど説明してstageの指定ですね。
8行目のscriptがCIで実行するスクリプトになります。
今回は、hello.pyというPythonのソースコードを実行するということを行っています。
これらのことすべてエラーなしに実行完了できれば、GitLab CIとしてsuccessということになります。
GitLab CIを実行してみる
これまでの説明を踏まえて、実際にGitLab CIを実行させてみたいと思います。
テスト実行するhello.pyを作成して、リポジトリに保存します。
今回、hello.pyの内容はとても簡単に下記のコードにしました。
print("Hello, World!")
ただ、Hello, World!のテキストが出力されるだけのコードです。
その次に先ほどサンプルとして作成した.gitlab-ci.ymlも同じリポジトリに保存します。
保存した直後に、GitLab CIが実行されると思います。
実行結果は、左側メニューの『CI/CD』から確認できます。
上の画像を見ると、Statusがpassedになっていると思います。
どうやらうまくhello.pyが実行できたようです。
つぎにPipelineの中をもう少し見てみましょう。
PipelineのIDをクリックしてみます。
Pipelineの実行状態が見えました。
今回はstageもjobも1つだけなので、少し寂しい表示ですが、stageもjobが複数になっても、各jobがどのように実行されて、Statusがどうだったかが表示されます。
最後はjobの実行画面です。
ここで、Dockerイメージが構築されるところからhello.pyが実行されるまでのログを見ることができます。
27行目にhello.py実行のスクリプトが表示されて、28行目に実行結果が表示されていることがわかります。
今回は、簡単なサンプルでGitLab CIを実行するところまでやってみました。
GitLab CIはいろんな設定をして使用することができるので、また記事にしたいと思います。
コメント