GitLab CI (docker) でCentOSイメージを使う .gitlab-ci.yml
を紹介します。Circle CI (circle.yml
) や Travis CI (.travis.yml
) などでDockerコンテナを用いたビルドを行ってきた人にとってはほぼ違和感ないでしょう。
例
before_script:
- /bin/echo Testing... CentOS 6.6 x MySQL 5.6.17
- /bin/echo Testing... CentOS 7 latest x MySQL 5.7 latest
variables:
MYSQL_ROOT_PASSWORD: "1iEkou9luj4Etrie"
test:centos6xmysql56:
image: centos:6.6
services:
- mysql:5.6.17
script:
- rpm -q centos-release
- yum install -y mysql
- mysql --version
- mysql -h mysql -u root -p${MYSQL_ROOT_PASSWORD} -e 'SELECT VERSION()'
test:centos7xmysql57:
image: centos:7
services:
- mysql:5.7
script:
- rpm -q centos-release
- yum install -y mysql
- mysql --version
- mysql -h mysql -u root -p${MYSQL_ROOT_PASSWORD} -e 'SELECT VERSION()'
詳説
基本的に説明するところはないけれど、Dockerのリンクを理解していない人がはまりそうなところを少し。
本体コンテナからDBコンテナへの接続
- mysql -h mysql -u root -p${MYSQL_ROOT_PASSWORD} -e 'SELECT VERSION()'
-h mysql
の mysql
はホスト名です。GitLab CI runner側がDockerの機能でlinkしているため、このホスト名を指定します。
ホスト名の規則は services
で指定したイメージ名になります。ただし、(1) :
以降は除去、(2) /
(スラッシュ) を __
(アンダースコア2個) に置き換え、をする必要があります。(つまり、 mysql:5.6
と mysql:5.7
のサービスを同時に使えないということ。jobを複数書くことで対応するとよいでしょう。)
services:
- mysql:5.7
The alias hostname for the service is made from the image name following these rules:
Everything after : is stripped
Slash (/) is replaced with double underscores (__)
via Using Docker Images - GitLab Documentation
変数
CIでは MYSQL_ALLOW_EMPTY_PASSWORD
(パスワードなしログイン可)でも十分ですが、今回はランダムなパスワードを指定してみました。
variables:
MYSQL_ROOT_PASSWORD: "1iEkou9luj4Etrie"
結果
CentOSの最新版はCentOS 7 (1511) Docker Hub official repository for centosで提供されている通り、2016-02-17のビルドイメージからを使うことになります。リリースバージョンとしては CentOS 7.2 (1511)
ですが、実際には、いくつかのパッケージアップデートが入っていることでしょう。
$ rpm -q centos-release
centos-release-7-2.1511.el7.centos.2.10.x86_64
$ yum install -y mysql
[...]
$ mysql --version
mysql Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1
$ mysql -h mysql -u root -p${MYSQL_ROOT_PASSWORD} -e 'SELECT VERSION()'
VERSION()
5.6.29
キャッシュを使わない場合のビルド所要時間は27秒。
ビルド状況(2017-06-21追記)
ナイトリービルドをtnir/centos-for-ci on GitLab.comで実行しているので、状況を確認できます。
まとめ
Circle CIやwerckerでもいいと思うけど、新しいメンバーが増えるたび連携登録が面倒くさいことを考えると、GitLab CI (docker) はデフォルト機能であるため、より手軽にCIを開始できて便利。
あと、UI/UXは商用製品と比べるとまだまだなので、2016/3/22にリリースされるGitLab 8.6 CI Featuresに期待している。