Help us understand the problem. What is going on with this article?

GitLab-CI on docker を触ってみた

More than 3 years have passed since last update.

前回の投稿(GitLab on docker のバージョンアップをしてみた)でGitLabのversionが8.3.0になったので、CI機能を触ってみました。
※GitLabは以前CIサーバーを別途用意する必要がありましたが、8.0以降CI機能が本体にマージされました。

環境

ホストのCentOSにVirtualBoxでUbuntuを作成し、その中にdockerを入れています。

  • HostOS: CentOS release 6.5
  • GuestOS: Ubuntu 14.04 LTS
  • docker version: 1.9.1
  • docker container
    • gitlab
    • postgresql
    • redis

作業

今回もsameersbn@Githubさんにお世話になりたいと思います。
GitLabについては前述した「GitLab on docker のバージョンアップをしてみた」を使用しております。

docker pull

先に必要なdockerイメージをpullしておきます。

$ sudo docker pull [REPOSITORY]:[TAG]
$ sudo docker images | grep gitlab-ci-runner
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sameersbn/gitlab-ci-runner   5.2.1               e51ef07f6f1f        12 months ago       350.4 MB

CI時に使用するディレクトリを作成

$ mkdir -p /opt/gitlab-ci-runner

GitLab上にCIを行うためのプロジェクトを作成

今回はシンプルに構成します。
sample.pyはpy.test用に汚いコードとしております。

  • python-ci-sample
    • test
      • sample.py
    • .gitlab-ci.yml
test/sample.py

import os
import sys


class A(object): pass


def func(x, y = 2):
    return x, y

def main():
    l = [1,2, 3, 4, 5]
    d = {'a': 1, 'b': 2}

if __name__ == "__main__":
    main()
.gitlab-ci.yml
job1:
  script: echo "Hello CI!"

job2:
  script: pwd; cat /etc/lsb-release

job3:
  script: pep8 test/sample.py

job4:
  script: py.test --pep8 test/sample.py

CI-Runnerとの連携準備

プロジェクトのSettings => Runnersを押下すると、「Specific runners」という項目が表示されます。
ここのURLとtokenをコピーしておきましょう。

続いて、dockerが起動しているServerにinして、次のようなコマンドを打ちます。
※URL, token, マウント先は適宜書き換えて下さい。

setup.sh
#!/bin/bash

CI_SERVER_URL="上記のURL"
REGISTRATION_TOKEN="上記のtoken"

## SETUP
docker run --name gitlab-ci-runner -it --rm \
 -v /opt/gitlab-ci-runner:/home/gitlab_ci_runner/data \
 --env CI_SERVER_URL=${CI_SERVER_URL} \
 --env REGISTRATION_TOKEN=${REGISTRATION_TOKEN} \
 sameersbn/gitlab-ci-runner:5.2.1 app:setup

これを実行すると、プロジェクトのSettings => Runnersに「Runners activated for this project」が表示されます。これで連携の準備ができました。

CI実行

まずは先ほど設定したrunnnerを起動します。
※runnerには予めpep8やpytestをインストールしています。

run.sh
#!/bin/bash

CI_SERVER_URL="上記のURL"
REGISTRATION_TOKEN="上記のtoken"

## RUN
docker run --name gitlab-ci-runner -it --rm \
 -v /opt/gitlab-ci-runner:/home/gitlab_ci_runner/data \
 --env CI_SERVER_URL=${CI_SERVER_URL} \
 --env REGISTRATION_TOKEN=${REGISTRATION_TOKEN} \
 sameersbn/gitlab-ci-runner:5.2.1

これで.gitlab-ci.yml に記載された内容でCIが走ります。

結果確認

GitLabプロジェクト => Buildsを押下して下さい。

Runningタブに4種類のjobが実行されているはずです。(今回は簡単なものなので、すぐにFinishedタブに移動してしまうと思います。)

下記は参考画像です(jobが異なりますが、上記job4の結果と同じものになります)

gitlab-ci-sample.png

おわりに

GitLab-CIが手軽に使用できるようになりました。まだまだ機能全般を把握できていないので、いろいろ試してみようと思います。できれば既存プロジェクトに使ってみたいな~(遠い目)

参考リンク

GitLab Documentation / docker
GitLab Documentation / quick_start
GitLab Documentation / yaml
GitLab.org / GitLab CI Runner
GitLab.org / omnibus-gitlab-runner
sameersbn/docker-gitlab-ci-runner
pytest で pep8 テストを実行する

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away