Gitlab
docker-composeを使用して構築する
- sshポートを変更する
sudo nano /etc/ssh/sshd_config
Port = 2424
sudo systemctl restart ssh
-
volume(ディレクトリ作成)
sudo mkdir -p /srv/gitlab
-
環境変数設定
export GITLAB_HOME=/srv/gitlab
- docker-compose.yml作成
- 設定例は下記。
- GitlabのバージョンはDocker Hubで確認。
version: '3.6' services: gitlab: image: gitlab/gitlab-ee:17.1.6-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2424 ports: - '8929:8929' - '443:443' - '2424:22' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'
- 設定例は下記。
docker compose up -d
- rootパスワードファイルを取得する。24時間後の最初の再設定実行時に自動的に削除される。
sudo docker cp ${container_id} cp:/etc/gitlab/initial_root_password .
- http://localhost:8929/
参考
CI/CDを動かす場合
Gitlab本体と別に、Runner(ビルドを実行する環境)が必要。
Java + Mavenを例にとって記載。
コンテナ作成
hostname
はURLを求められたときに参照するので、把握しておく。
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ee:17.1.6-ee.0
container_name: gitlab
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- '8929:8929'
- '443:443'
- '2424:22'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
gitlab-runner:
build:
context: .
dockerfile: Dockerfile_runner
volumes:
- '/srv/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
env_file:
- runner.env
depends_on:
- gitlab
# Use the GitLab Enterprise Edition base image
# FROM gitlab/gitlab-ee:17.1.6-ee.0
FROM gitlab/gitlab-runner:latest
# Install dependencies
RUN apt-get update && \
apt-get install -y wget gnupg2 openjdk-17-jdk sudo
# Install Maven
WORKDIR /tmp
ARG MAVEN_VERSION="3.9.9"
RUN wget https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz && \
tar -xzvf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C /opt && \
ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/apache-maven
# Set environment variables
# ENV JAVA_HOME=/usr/lib/jvm/adoptopenjdk-17-hotspot
# Runnerはrootで登録するが、ビルドはgitlab-runnerユーザで実行される。
# ${HOME}/.profileがないので、${HOME}/.bashrcに記載しても呼び出されない。
COPY runner.env /home/gitlab-runner/.profile
RUN chown gitlab-runner:gitlab-runner /home/gitlab-runner/.profile
# Verify installations
# RUN java -version && mvn -version
# ENTRYPOINT ["/usr/bin/dumb-init" "/entrypoint"]
# CMD ["run" "--user=gitlab-runner" "--working-directory=/home/gitlab-runner"]
runner.env
export MAVEN_HOME=/opt/apache-maven
export MVN_HOME=/opt/apache-maven
export PATH=$PATH:$MVN_HOME/bin
Runner登録
docker compose exec -it gitlab-runner /bin/bash
# ユーザがroot担っていることを確認した上で、
gitlab-runner register
# URL : http://gitlab.example.com:8929/
# Token
# プロジェクト -> 設定 -> CI/CD -> Runner -> プロジェクトRunnerのハンバーガーメニュー -> 登録トークン
# タグ:.gitlab-ci.ymlのtagsと比較される。
# Maven, development
# 等、カンマ区切りで指定する。
# description
# 任意の説明文
CI/CD(.gitlab-ci.yml)
stages:
- build
- test
- package
build:
stage: build
tags:
- Maven
- development
script:
- echo $USER
- mvn clean compile
test:
stage: test
tags:
- Maven
- development
script:
- mvn test
package:
stage: package
tags:
- Maven
- development
script:
- mvn package
artifacts:
paths:
- target/*.jar
コミット時の表示時刻をJSTにする
- /etc/gitlab/gitlab.rbを修正する
修正前
# gitlab_rails['time_zone'] = 'UTC'
修正後
gitlab_rails['time_zone'] = 'Asia/Tokyo'
- 下記を実行する
gitlab-ctl reconfigure
バックアップ例
Dockerで起動したGitlabのバックアップ例。
関係ファイルは/srv/gitlab
配下にある想定。
sudo
をつけて実行すること。(つけない場合、/srv/gitlab
にアクセスできない。)
#!/bin/bash
tmpdir=$(mktemp -d)
cp -r /srv/gitlab/config $tmpdir
cp -r /srv/gitlab/data $tmpdir
now=`date '+%Y%m%d_%H%M%S'`
zip -r gitlab-$now.zip $tmpdir