ただの作業記録です。他のContaner Registryでも大差ないと思います。GCP使うならCloud Buildのほうが良いかもです。
- GitLab CIのShared Runnerはprivilegedで動作しているので、build可能
- ここではdind serviceを採用したが、image: docker:latestでもbuildできるはず
- dindの場合、DOCKER_TLS等に関わる環境変数が必要
- Google Cloud Container Registryへのdocker loginはservice account keyを利用し、GitLabのSettings > CI/CD > VariablesにFileとして保存する。GCP上の権限は適宜付与する。
- GCLOUD_PROJECT_IDも環境変数として利用できるようにGitLabのSettings > CI/CD > Variablesに保存
gitlab-ci.yaml
build:
stage: build
when: manual
image: alpinelinux/docker-cli
services:
- docker:20.10.7-dind
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: /certs
DOCKER_TLS_VERIFY: 1
DOCKER_CERT_PATH: ${DOCKER_TLS_CERTDIR}/client
before_script:
docker login -u _json_key --password-stdin https://us.gcr.io < ${GOOGLE_APPLICATION_CREDENTIALS}
echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin
script:
- docker build --tag=${CI_REGISTRY_IMAGE}/image-name --tag=us.gcr.io/${FIREBASE_PROJECT_ID}/image-name .
- docker push us.gcr.io/${GCLOUD_PROJECT_ID}/image-name
- docker push ${CI_REGISTRY_IMAGE}/image-name
after_script:
- docker logout