環境
さくら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のプロジェクトID -
GCLOUD_SERVICE_KEY
- JSONキーファイルの中身を貼り付ける
.gitlab-ci.yml
下記のように設置する。例では gcr.io/<GCP project ID>/<repository group name>/<repository name>
でイメージが push されます。
1 | image: tilfin/gitlab-ci-to-gcr |
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/
1 | FROM docker:stable |
総括
もともと Registry 機能自体も GitLab にありストレージだけ GCPを利用することもできます。しかし、マルチドメインでの運用でうまくいかない場合があったのと、可用性の面で直接 GCPの Registry を参照する方がいいため、このようにして使っています。