1
2

More than 3 years have passed since last update.

Gitlab CI + Gitlab Runner + Java のCI/CD環境をDockerで作ってみた

Last updated at Posted at 2020-12-12
1 / 15

Gitlab CI/Runner + Java のCI/CD環境をDockerで作ってみた

Gitlab CI 環境をJavaで構築してみたくて試してみました
今回はできるだけ簡単に作りたくて、ローカルのWindowsのDocker上に全部建てしました


動作環境

  • OS: Windows10 Home
  • ソフトウェア:
    • DockerToolBox
    • VirtualBox

Gitlab CIとは

Gitlabに統合されているCI/CDの仕組み
動作させるためには、ビルドアプリケーションであるGitlab-Runnerを別サーバにインストールして、
GitlabとAPI連携させる必要があります。
テストを実行するためには、少なくとも、 1つの GitLabサーバー と1つの GitLab Runner が必要です。

image.png

引用:GitLabの継続的インテグレーション(CI)と継続的デリバリー(CD)


概要図

1つのDocker-Machineに、GitlabもGitlabRunnerも載せて作成していきます

image.png


構築手順


Docker-Machineの作成

Gitlab/Gitlab Runnerを入れるための仮想マシンを作成していきます。


# 現在のDocker-Machineの状態を確認
docker-machine ls
# Docker-Machine生成 メモリとCPUをデフォルトより多めにとっておく
docker-machine create gitlab-ci-vm \
    --virtualbox-cpu-count "2" \
    --virtualbox-memory "3072"
# 作成したDocker-Machineが存在することを確認
docker-machine ls
# 作成したDocker-MachineのIPアドレスを取得して、控えておく
docker-machine ip gitlab-ci-vm

# 作成したDocker-MachineをActiveにしておきます(任意)
## Activeにしておけば、Docker-MachineにSSHで入らなくてもActiveなMachine上でDockerコマンドが扱えます。お好みで
eval $(docker-machine env gitlab-ci-vm)
# 作成したDocker-MachineがActiveであることを確認
docker-machine ls

Gitlabコンテナの立ち上げ

# Docker-MachineにSSH接続
docker-machine ssh gitlab-ci-vm

# Gitlabコンテナでマウントするディレクトリを作成しておく
sudo mkdir /srv
sudo mkdir /srv/gitlab
sudo mkdir /srv/gitlab/config
sudo mkdir /srv/gitlab/logs
sudo mkdir /srv/gitlab/data

# ディレクトリが作成されていることを確認
ls -lR /srv

# Gitlabコンテナの立ち上げ(Hostネットワークで起動します)
## 控えていたIPアドレスを設定する
docker run --detach \
    --network host \
    --hostname xxx.xxx.xxx.xxx \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

# ここでしばらく待ちます.... 5分くらい?

  • 完全に立ち上がったら、ローカルのブラウザで接続確認
    • http://xxx.xxx.xxx.xxx ※起動しているDocker-MachineのIPアドレスを指定
    • 完全に立ち上がる前にアクセスした場合、接続できない、またはGitlab上で502エラー画面が出ます

image.png


Gitlab root初期パスワードを設定してログイン

image.png

  • rootアカウントでログインします

image.png

  • ログインができました

image.png


Gitlab 任意のプロジェクトを作成、Tokenを取得

  • 任意のプロジェクトを作成しておきます

image.png

  • 作成したプロジェクトトップ画面から、Settings>CI/CD>Runners>Specific Runnersを開きトークンを控えます

image.png


Gitlab-Runnerをインストール/セットアップ

# Binaryダウンロード
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm"
# ダウンロードしたモジュールをインストール
sudo rpm -i gitlab-runner_amd64.rpm

# セットアップ
sudo gitlab-runner register
> prompt
url : http://xxx.xxx.xxx.xxx/
token: ※Gitlabで控えたTOKEN
description : test
tag : test
runner : docker
image : openjdk:latest

Gitlab-Runnerをバックグラウンドで起動しておく

sudo gitlab-runner run &

Gitlab CI設定

  • ActivateされたRunnerが存在することを確認

image.png

  • ✐マークを押下して、Runnerの編集を行う
    • Run untagged jobs:Indicates whether this runner can pick jobs without tags にチェックをつけて保存

image.png


シンプルなJavaプロジェクトをプッシュ!

  • 今回はシンプルなGradleプロジェクトを作成して、.gitlab-ci.ymlを追加しプッシュします

  • Javaプロジェクトのサンプルはこちらを参照して下さい。

    • cloneだとremoteとつながってしまうのでZipでダウンロードして試していただければと思います。
    • gitlab-ci-java-sample
  • .gitlab-ci.ymlstagesを一般的な構成に区切ってみます

    • gradleはWrapperを使用します。実行権限がないため明示的にbashで起動しています。
    • 単体テスト(unit_test),結合テスト(integration_test)でgradleからテストを起動しています。
    • build,deployは空回しにしてます
.gitlab-ci.yml
image: openjdk:latest

variables:
  # if you should define env variables
  ENVIRONMENT: DEFAULT

cache:
  # if you should shared file across jobs

stages:
  - unit_test
  - integration_test
  - build
  - deploy

unittest:
    stage: unit_test
    script:
        - bash gradlew test

integrate_test:
    stage: integration_test
    script:
        - bash gradlew test
    services:
    variables:
        ENDPOINT_URL: http://localhost

build:
    stage: build
    script:
        - bash gradlew jar
    artifacts:
        paths:
            - build/libs/test-project.jar

deploy_dev:
    stage: deploy
    script:
        # you should write any code to deploy develop environment.
        - echo dummy script
    only:
        - develop
    environment:
        name: develop

deploy_prd:
    stage: deploy
    script:
        # you should write any code to deploy production environment.
        - echo dummy script
    only:
        - master
    when: manual
    environment:
        name: production


JavaプロジェクトをGitlab環境にPushしてみます


# Javaプロジェクト配置ディレクトリに移動しておきます
cd # Javaプロジェクト配置ディレクトリ
pwd

# gitlabにpushします
git add .
git commit -m "initial commit"
git push


Gitlabコンソール確認

  • 実行中

image.png

image.png

image.png

※初回はopenjdkのDockerイメージをpullする時間がかかります。

  • うまく流れています!

image.png

  • deploy_prdのみ手動実行にしているため待ちになっています。

まとめ

  • これでGitlabのCI/CDのテスト実行が完了しました!

実際に運用する際は、Dockerイメージではない場合が多いのかなと思います。
また、アカウント登録用のメール設定など他にもすべきことがありますが、
いったんはパイプラインが無事流せたということで、、勉強になりました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2