GitLabのCI環境を構築してみる
- やってみたきっかけ
- Install GitLab-CE Core
- Install GitLab Runner
- インストール方法
- Register the Runner
- 1. Run the following command:
- 2. Enter your GitLab instance URL
- 3. Enter the token you obtained to register the Runner:
- 4. Enter a description for the Runner, you can change this later in GitLab's UI:
- 5. Enter the tags associated with the Runner, you can change this later in GitLab's UI:
- 6. Enter the Runner executor:
- 7. If you chose Docker as your executor, you'll be asked for the default image to be used for projects that do not define one in .gitlab-ci.yml:
- Runnerの確認
- GitLab CIの動作確認
- 次にやったこと(次回予告)
やってみたきっかけ
インフラCI実践ガイド
を買って読み始めたことと、
Ansible Night in Tokyo 2018.09
のイベントでGitLabを使ったCIの話があったようで、
書いている時点ではまだ資料が上がっていませんが自分なりに試してみようと思いました。
Install GitLab-CE Core
動作要件
まずはGitLabを動かすのに必要なリソースを確認です。
docs.gitlab.com
リンクを調べてみるとサーバはメジャーなLinuxなら大抵動くようなので
今回はVagrant(VirtualBox)でデプロイしたCentOS7にしました。
またMemoryは最低4GB/推奨8GBということでしたが念のために8GB、
CPUは2Coreが推奨でしたが100usersまでなら1Coreでも良さそうなので1Coreにしました。
インストール方法
次はGitLab(CE)のインストール方法です。 about.gitlab.com 手順がまとまっているのでほぼコピペで進められました。
1. Install and configure the necessary dependencies
sudo yum install -y curl policycoreutils-python openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-service=http sudo systemctl reload firewalld
この次にpostfixのインストールがありますが、Slack等の別の通知方法でよければskipしても良いとのことだったのでスキップしました。
2. Add the GitLab package repository and install the package
GitLabのパッケージなどが含まれているyumのリポジトリを追加します
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
次にGitLabのパッケージインストールするのですが、
本文をよく見るとhttp://gitlab.example.com
のところを環境に合わせて書き換えるように書いてあるのですが、
英語だったのでスルーしてそのまま入力してしまい後ほど少々困りましたが、
後から書き換えてreconfigure
でちゃんと動きました。
sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce
↑のせいかもしれませんが、
「インストールとともにconfigureとstartが走ってURLにアクセスすれば繋がる」的なことが書いてあるのですが、
psなどを見て動いていなさそうだったのでインストールメッセージにあったコマンドを実行して起動させました。
sudo gitlab-ctl reconfigure
その後vagrantで割り当てたIPアドレスをブラウザに打ち込むとGitLabの画面が表示され、
rootのパスワード設定をしてメイン画面に入れました。
この段階でGitのリポジトリとしては十分動作します!
個人的に驚いたのはWeb IDE機能です。
Gitなのでしばらくはローカルからcommit & pushしていましたが、
ある程度のシンタックスが効いたりオートインデントしてくれるので、
ちょっとした変更ならWeb IDEでも良さそうです。
この辺はGitHubやAWSのCode Commitは弱いのでGitLabの意外な強みですね。
また色々説明が英語で書かれてて読み飛ばすとリスキーであることはわかったので、
ユーザ設定から言語を日本語に変更しました。言語を変えられるのは地味に助かりますね。
ただし新しい機能解説なのか英語のままというところもチラホラあるのでやっぱり英語は避けて通れませんね。
Install GitLab Runner
GitLabの自分的目玉であるCIをするには、当然何らかの実行基盤が必要です。
それを提供するのがGitLab Runnerです。
Admin Area -> 概要 -> Runner
にSetup a shared Runner manually
としてインストール方法のリンクが記載されています。
インストール方法
1. Simply download one of the binaries for your system:
# Linux x86-64 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2. Give it permissions to execute:
sudo chmod +x /usr/local/bin/gitlab-runner
3. Optionally, if you want to use Docker, install Docker with:
Optionally
と書いてありますが、DockerでCIを動かしたかったのでインストールしました
curl -sSL https://get.docker.com/ | sh
4. Create a GitLab CI user:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
5. Install and run as service:
(*) sudoだと/usr/local/bin/
にPATHが通っておらず、ここはgitlab-runner
が叩けなかったのでrootで実行しました。
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start
Register the Runner
1. Run the following command:
GitLab Runnerのインストールが済んだら、GitLab Runner側でGitLabの情報を登録します。
sudo gitlab-runner register
こちらのコマンドを実行することで対話的に設定することができます。
(コマンドにオプションを追加することでワンライナーで設定することも可能なようです)
2. Enter your GitLab instance URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) http://<hostname>
3. Enter the token you obtained to register the Runner:
TOKENについては上記の
Admin Area -> 概要 -> Runner -> Setup a shared Runner manually -> 3.
に記載されています。
Please enter the gitlab-ci token for this runner xxx
4. Enter a description for the Runner, you can change this later in GitLab's UI:
Please enter the gitlab-ci description for this runner [hostame] gitlab01
5. Enter the tags associated with the Runner, you can change this later in GitLab's UI:
タグは適当に割り当てておきましたが、私の使い方だとあまり活用できてません。
Please enter the gitlab-ci tags for this runner (comma separated): myself
6. Enter the Runner executor:
GitLab CIの実行環境を選びます。今回は先述の通りdocker
を選択しました。いずれkubernetes
なども使ってみたいですね。
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: docker
7. If you chose Docker as your executor, you'll be asked for the default image to be used for projects that do not define one in .gitlab-ci.yml:
Docker Imageを指定しなかった場合のデフォルトのイメージを指定します。大抵指定すると思うのであまり考えずにコピペでalpine:latest
にしました。
Please enter the Docker image (eg. ruby:2.1): alpine:latest
これでgitlab-runner register
の設定は完了です。
Runnerの確認
次にGitLab側でRunnerが登録されたか確認します。
うまく登録されていれば以下のようにRunnerが表示されているはずです(ローカルなのでトークンも未加工でサボり)
この画面では表示されていませんが、同じようにインストールしていると最初はlocked
というタグがついているかと思います。
この状態だとCIには使えないため解除する必要があります。
Runner token
の列に記載されているIDをクリックしてRunnerの設定画面に入ります。
現在のプロジェクトをロックする
のチェックを外してロックを解除しました。((gitlab-runner register
のオプションで最初からロックしないようにできるようです))
また、先述したようにタグの設定が有効とCIの記述が増えて面倒なのでRun untagged jobs
にチェックを入れます。
これでタグの付いていないジョブ(後述)が実行されるようになります。
GitLab CIの動作確認
最後にCIが意図通りに動いてくれるか確認します。
CIの設定はリポジトリ直下に.gitlab-ci.yml
というファイルを作って記載していきます。(ファイル名/パスはリポジトリごとの設定で変更できるようです)
image: alpine:latest stages: - test - deploy test1: stage: test script: - pwd - ls -lR deploy: stage: deploy script: - apk add git - git status
記述していくパラメータは以下のようになります。((.gitlab-ci.yml
の書き方はまだ勉強中なので最小限です))
image
使用するコンテナイメージを指定stages
パイプライン上段に書かれる工程<job>
ジョブ名stage
stagesで指定したステージに紐付けますscript
実行するコマンド
このように指定すると以下のようなパイプラインで実行されます。
各ジョブをクリックするとその実行経過&結果が表示されます。
注意すべき点は、ジョブ毎に実行するコンテナが別々になる、ということ。
そのため、pre-build
のようなジョブで何かを準備していても、別のジョブではその準備が引き継がれません。
この辺りはもしかしたらうまい方法があるかもしれないので調査するとともに情報提供お待ちしています。
次にやったこと(次回予告)
次にやったことは、
PackerのAnsible Provisonerを使ってAMIをCI/CDする
です。
ですが、今回はここまでにして次回に解説を回したいと思います。
一応順次更新中ですがGitLabにおいているのと同じリポジトリをGitHubに置いておきましたので、先に見たい方はご覧ください。