環境
さくらVPS に Ubuntu 18.04 をOSカスタムインストールしていて、GitLab CE をインストールします。GitLab CI Runner も同ホストで動かします。 CI で Docker イメージをビルドして、Google Cloud Platform (GCP) の Container Registry にプッシュします。
GitLab のインストール
下記のページの通りです。EEとCEの差はライセンスを適用するかどうかで変わりますが、絶対にCEのままというならインストールスクリプトのURLを変えるとそちらでインストールされます。
GitLab CI 機能の設定
Docker CE をインストール
単に apt からインストールもできますが、バージョンが古いと嵌りやすいので最新の Docker CE をインストールします。
GitLab Runner のインストール
こちらは、Dockerへのインストールではなく、リポジトリからインストールしました。GitLab Runner はほぼ CI Runner のコマンド管理ツールで、実際ジョブ処理する Runner (ないし Executor) は次でインストールという認識です。
実際の GitLab Runner(Executor) として動作するDockerコンテナを登録
下記の Building Docker images with GitLab CI/CD ページ内の Use docker-in-docker executor* を実行します。 https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-executor
各リポジトリの CI 設定
GCPにストレージ管理者権限を持つサービスアカウントを作成し、JSONキーファイルを取得します。 https://cloud.google.com/container-registry/docs/advanced-authentication#json_key_file
Settings -> CI / CD -> Variables
GCLOUD_PROJECT_ID- GCPのプロジェクトIDGCLOUD_SERVICE_KEY- JSONキーファイルの中身を貼り付ける
.gitlab-ci.yml
下記のように設置する。例では gcr.io/<GCP project ID>/<repository group name>/<repository name> でイメージが push されます。
|
|
dindは Docker IN Docker の略です。overlayストレージ・ドライバは Ubuntu 18.04 であれば利用できます。Docker 入れ子でもストレージは透過的にホストにアクセスすることでスピードが下がらないようにします。
補足) tilfin/gitlab-ci-to-gcr
tilfin/gitlab-ci-to-gcr イメージは、私が公式 Docker Hub にプッシュしてる docker:stable に Google Cloud SDK と gcloud コマンドをインストールしたものです。
https://hub.docker.com/r/tilfin/gitlab-ci-to-gcr/
FROM docker:stable
ARG CLOUD_SDK_VERSION=224.0.0
ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
ENV PATH /google-cloud-sdk/bin:$PATH
RUN apk --no-cache add \
curl \
python \
py-crcmod \
bash \
libc6-compat \
openssh-client \
git \
gnupg \
&& curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
ln -s /lib /lib64 && \
gcloud components install kubectl && \
gcloud config set core/disable_usage_reporting true && \
gcloud config set component_manager/disable_update_check true && \
gcloud config set metrics/environment github_docker_image && \
gcloud --version
VOLUME ["/root/.config"]
総括
もともと Registry 機能自体も GitLab にありストレージだけ GCPを利用することもできます。しかし、マルチドメインでの運用でうまくいかない場合があったのと、可用性の面で直接 GCPの Registry を参照する方がいいため、このようにして使っています。