ci: dual-push images to repo.nstart.cloud (corp Harbor)

Prod cluster (192.168.100.142) cannot reach the local staging registry
registry.k8s.265.nstart.local. The corp Harbor at repo.nstart.cloud is
the shared image source — push there in addition to the staging-internal
registry so both clusters can pull.

- Added EXTERNAL_REGISTRY=repo.nstart.cloud
- before_script does docker login $EXTERNAL_REGISTRY (REGISTRY_USER /
  REGISTRY_PASSWORD already set as group-level CI variables)
- Refactored 4 nearly identical docker-* jobs into a shared
  .dual_push_script anchor; per-job vars (SVC, DOCKERFILE, BUILD_CONTEXT)
- Build once with both registry tags, push to both
This commit is contained in:
Александр Зимин
2026-05-03 21:45:06 +03:00
parent 82dd48ba52
commit 26f2207c74
+38 -20
View File
@@ -16,6 +16,7 @@ variables:
MAVEN_CLI_OPTS: "-B -ntp --batch-mode" MAVEN_CLI_OPTS: "-B -ntp --batch-mode"
IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
INTERNAL_REGISTRY: registry.k8s.265.nstart.local INTERNAL_REGISTRY: registry.k8s.265.nstart.local
EXTERNAL_REGISTRY: repo.nstart.cloud
IMAGE_REPO: terravault IMAGE_REPO: terravault
DOCKER_BUILDKIT: "1" DOCKER_BUILDKIT: "1"
@@ -70,46 +71,63 @@ maven-package:
DOCKER_HOST: tcp://docker:2375 DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: "" DOCKER_TLS_CERTDIR: ""
DOCKER_BUILDKIT: "1" DOCKER_BUILDKIT: "1"
before_script:
- echo "$REGISTRY_PASSWORD" | docker login "$EXTERNAL_REGISTRY" -u "$REGISTRY_USER" --password-stdin
# Helper для dual-push: build один раз с двумя registry-тэгами, push в оба.
# Internal registry — без auth (insecure), external — с docker login (см. before_script).
.dual_push_script: &dual_push_script |
IMG_INT="$INTERNAL_REGISTRY/$IMAGE_REPO/$SVC"
IMG_EXT="$EXTERNAL_REGISTRY/$IMAGE_REPO/$SVC"
docker build -f "$DOCKERFILE" \
-t "$IMG_INT:$IMAGE_TAG" -t "$IMG_INT:latest" -t "$IMG_INT:$CI_COMMIT_REF_SLUG" \
-t "$IMG_EXT:$IMAGE_TAG" -t "$IMG_EXT:latest" -t "$IMG_EXT:$CI_COMMIT_REF_SLUG" \
--build-arg BUILDKIT_INLINE_CACHE=1 \
"$BUILD_CONTEXT"
for TAG in "$IMAGE_TAG" latest "$CI_COMMIT_REF_SLUG"; do
docker push "$IMG_INT:$TAG"
docker push "$IMG_EXT:$TAG"
done
docker-app: docker-app:
<<: *docker_base <<: *docker_base
needs: [maven-package] needs: [maven-package]
variables:
SVC: ordinis-app
DOCKERFILE: ordinis-app/Dockerfile
BUILD_CONTEXT: .
script: script:
- IMG=$INTERNAL_REGISTRY/$IMAGE_REPO/ordinis-app - *dual_push_script
- docker build -f ordinis-app/Dockerfile -t $IMG:$IMAGE_TAG -t $IMG:latest -t $IMG:$CI_COMMIT_REF_SLUG --build-arg BUILDKIT_INLINE_CACHE=1 .
- docker push $IMG:$IMAGE_TAG
- docker push $IMG:latest
- docker push $IMG:$CI_COMMIT_REF_SLUG
docker-read-api: docker-read-api:
<<: *docker_base <<: *docker_base
needs: [maven-package] needs: [maven-package]
variables:
SVC: ordinis-read-api
DOCKERFILE: ordinis-read-api/Dockerfile
BUILD_CONTEXT: .
script: script:
- IMG=$INTERNAL_REGISTRY/$IMAGE_REPO/ordinis-read-api - *dual_push_script
- docker build -f ordinis-read-api/Dockerfile -t $IMG:$IMAGE_TAG -t $IMG:latest -t $IMG:$CI_COMMIT_REF_SLUG --build-arg BUILDKIT_INLINE_CACHE=1 .
- docker push $IMG:$IMAGE_TAG
- docker push $IMG:latest
- docker push $IMG:$CI_COMMIT_REF_SLUG
docker-projection-writer: docker-projection-writer:
<<: *docker_base <<: *docker_base
needs: [maven-package] needs: [maven-package]
variables:
SVC: ordinis-projection-writer
DOCKERFILE: ordinis-projection-writer/Dockerfile
BUILD_CONTEXT: .
script: script:
- IMG=$INTERNAL_REGISTRY/$IMAGE_REPO/ordinis-projection-writer - *dual_push_script
- docker build -f ordinis-projection-writer/Dockerfile -t $IMG:$IMAGE_TAG -t $IMG:latest -t $IMG:$CI_COMMIT_REF_SLUG --build-arg BUILDKIT_INLINE_CACHE=1 .
- docker push $IMG:$IMAGE_TAG
- docker push $IMG:latest
- docker push $IMG:$CI_COMMIT_REF_SLUG
docker-migrations: docker-migrations:
<<: *docker_base <<: *docker_base
needs: [maven-package] needs: [maven-package]
variables:
SVC: ordinis-migrations
DOCKERFILE: ordinis-migrations/Dockerfile
BUILD_CONTEXT: ordinis-migrations/
script: script:
- IMG=$INTERNAL_REGISTRY/$IMAGE_REPO/ordinis-migrations - *dual_push_script
- docker build -f ordinis-migrations/Dockerfile -t $IMG:$IMAGE_TAG -t $IMG:latest -t $IMG:$CI_COMMIT_REF_SLUG ordinis-migrations/
- docker push $IMG:$IMAGE_TAG
- docker push $IMG:latest
- docker push $IMG:$CI_COMMIT_REF_SLUG
# ─── TRIGGER DEPLOY (downstream pipeline) ────── # ─── TRIGGER DEPLOY (downstream pipeline) ──────
trigger-deploy-staging: trigger-deploy-staging: