Files
mdm-ordinis/.gitlab-ci.yml
T
Александр Зимин 26f2207c74 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
2026-05-03 21:45:06 +03:00

157 lines
4.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================
# Ordinis — build & push images.
# Runner mirror'ит Docker Hub (DOCKER_AUTH_CONFIG в runner config),
# поэтому image: repo.nstart.cloud/library/maven:... работает напрямую.
# Internal registry registry.k8s.265.nstart.local — без auth.
# =============================================================
stages:
- test
- build
- publish
- trigger-deploy
variables:
MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
MAVEN_CLI_OPTS: "-B -ntp --batch-mode"
IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
INTERNAL_REGISTRY: registry.k8s.265.nstart.local
EXTERNAL_REGISTRY: repo.nstart.cloud
IMAGE_REPO: terravault
DOCKER_BUILDKIT: "1"
cache:
key:
files: ["pom.xml"]
paths:
- .m2/repository
# Default retry для всех jobs — runner image pull mirror flaky
default:
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
- script_failure
# ─── TEST ──────────────────────────────────────
maven-test:
stage: test
image: repo.nstart.cloud/library/maven:3.9.9-eclipse-temurin-21
script:
- mvn $MAVEN_CLI_OPTS verify
artifacts:
when: always
reports:
junit: '**/target/surefire-reports/TEST-*.xml'
expire_in: 1 week
# ─── BUILD (Maven jars) ────────────────────────
maven-package:
stage: build
image: repo.nstart.cloud/library/maven:3.9.9-eclipse-temurin-21
script:
- mvn $MAVEN_CLI_OPTS package -DskipTests
artifacts:
paths:
- "**/target/*.jar"
- ordinis-migrations/src/main/resources/db/changelog/**
expire_in: 1 day
# ─── PUBLISH (Docker images) ───────────────────
.docker_base: &docker_base
stage: publish
image: repo.nstart.cloud/library/docker:26
services:
- name: repo.nstart.cloud/library/docker:26-dind
alias: docker
command: ["--tls=false", "--insecure-registry=registry.k8s.265.nstart.local"]
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
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_base
needs: [maven-package]
variables:
SVC: ordinis-app
DOCKERFILE: ordinis-app/Dockerfile
BUILD_CONTEXT: .
script:
- *dual_push_script
docker-read-api:
<<: *docker_base
needs: [maven-package]
variables:
SVC: ordinis-read-api
DOCKERFILE: ordinis-read-api/Dockerfile
BUILD_CONTEXT: .
script:
- *dual_push_script
docker-projection-writer:
<<: *docker_base
needs: [maven-package]
variables:
SVC: ordinis-projection-writer
DOCKERFILE: ordinis-projection-writer/Dockerfile
BUILD_CONTEXT: .
script:
- *dual_push_script
docker-migrations:
<<: *docker_base
needs: [maven-package]
variables:
SVC: ordinis-migrations
DOCKERFILE: ordinis-migrations/Dockerfile
BUILD_CONTEXT: ordinis-migrations/
script:
- *dual_push_script
# ─── TRIGGER DEPLOY (downstream pipeline) ──────
trigger-deploy-staging:
stage: trigger-deploy
trigger:
project: 2-6/2-6-4/terravault/ordinis-infra
branch: main
strategy: depend
variables:
UPSTREAM_IMAGE_TAG: $IMAGE_TAG
DEPLOY_ENV: staging
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
trigger-deploy-prod:
stage: trigger-deploy
trigger:
project: 2-6/2-6-4/terravault/ordinis-infra
branch: main
strategy: depend
variables:
UPSTREAM_IMAGE_TAG: $IMAGE_TAG
DEPLOY_ENV: prod
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$/'
when: manual