This commit is contained in:
Дмитрий Соловьев
2026-05-25 14:23:52 +03:00
parent b3a6012ebb
commit d48ddd2657
1066 changed files with 104601 additions and 3 deletions
+267
View File
@@ -0,0 +1,267 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
BALLISTICS_SERVICE_DIR: "services/pcp-ballistics-service"
# При необходимости переопредели путь к chart через CI/CD variable
BALLISTICS_HELM_CHART_DIR: "helm/pcp-ballistics-service"
# Имя релиза в k8s
BALLISTICS_HELM_RELEASE: "pcp-ballistics-service"
# Полный путь до image во внутреннем registry
BALLISTICS_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-ballistics-service"
# Окружения / namespace
BALLISTICS_K8S_NAMESPACE_DEV: "pcp-dev"
BALLISTICS_K8S_NAMESPACE_MASTER: "pcp-master"
BALLISTICS_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
.ballistics:changes: &ballistics_changes
- services/pcp-ballistics-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-ballistics-service.*
- helm/pcp-ballistics-service/**/*
- deploy/**/*
.ballistics:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *ballistics_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ballistics_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ballistics_changes
- when: never
.ballistics:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *ballistics_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ballistics_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ballistics_changes
- when: never
.ballistics:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ballistics_changes
when: manual
- when: never
.ballistics:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ballistics_changes
when: manual
- when: never
.ballistics:gradle-cache:
cache:
key: "gradle-ballistics-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.ballistics:docker-build:
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:
- docker version
- docker info
.ballistics:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
ballistics:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
services:
- name: repo.nstart.cloud/postgis/postgis:16-3.4
alias: postgres
variables:
POSTGRES_DB: "pcp_ballistics"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
SPRING_DATASOURCE_URL: "jdbc:postgresql://postgres:5432/pcp_ballistics"
SPRING_DATASOURCE_USERNAME: "postgres"
SPRING_DATASOURCE_PASSWORD: "password"
extends:
- .ballistics:rules:test
- .ballistics:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-ballistics-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-ballistics-service/build/test-results/test/*.xml
paths:
- services/pcp-ballistics-service/build/reports/tests/
expire_in: 7 days
ballistics:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .ballistics:rules:build-and-image
- .ballistics:gradle-cache
needs:
- job: ballistics:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-ballistics-service:bootJar
artifacts:
when: always
paths:
- services/pcp-ballistics-service/build/libs/*.jar
expire_in: 7 days
ballistics:package:
stage: package
extends:
- .ballistics:rules:build-and-image
- .ballistics:docker-build
needs:
- job: ballistics:build
artifacts: true
script:
- 'echo "BALLISTICS_IMAGE_REPOSITORY=$BALLISTICS_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$BALLISTICS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$BALLISTICS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$BALLISTICS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$BALLISTICS_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$BALLISTICS_IMAGE_REPOSITORY:$BALLISTICS_IMAGE_TAG" docker-context
- docker push "$BALLISTICS_IMAGE_REPOSITORY:$BALLISTICS_IMAGE_TAG"
- printf "BALLISTICS_IMAGE=%s\n" "$BALLISTICS_IMAGE_REPOSITORY:$BALLISTICS_IMAGE_TAG" > ballistics-image.env
artifacts:
reports:
dotenv: ballistics-image.env
expire_in: 7 days
ballistics:deploy:dev:
stage: deploy
extends:
- .ballistics:rules:deploy-dev
- .ballistics:helm-deploy
needs:
- job: ballistics:package
artifacts: true
environment:
name: dev/pcp-ballistics-service
resource_group: pcp-ballistics-service-dev
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${BALLISTICS_IMAGE%:*}"'
- 'export IMAGE_TAG="${BALLISTICS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$BALLISTICS_HELM_RELEASE"
"$BALLISTICS_HELM_CHART_DIR"
--namespace "$BALLISTICS_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$BALLISTICS_HELM_CHART_DIR/values.yaml"
-f "$BALLISTICS_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
ballistics:deploy:master:
stage: deploy
extends:
- .ballistics:rules:deploy-master
- .ballistics:helm-deploy
needs:
- job: ballistics:package
artifacts: true
environment:
name: master/pcp-ballistics-service
resource_group: pcp-ballistics-service-master
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${BALLISTICS_IMAGE%:*}"'
- 'export IMAGE_TAG="${BALLISTICS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$BALLISTICS_HELM_RELEASE"
"$BALLISTICS_HELM_CHART_DIR"
--namespace "$BALLISTICS_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$BALLISTICS_HELM_CHART_DIR/values.yaml"
-f "$BALLISTICS_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
@@ -0,0 +1,471 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
COMPLEX_MISSION_SERVICE_DIR: "services/pcp-complex-mission-service"
COMPLEX_MISSION_SERVICE_HELM_CHART_DIR: "helm/pcp-complex-mission-service"
COMPLEX_MISSION_SERVICE_HELM_RELEASE: "pcp-complex-mission-service"
COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-complex-mission-service"
COMPLEX_MISSION_SERVICE_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
COMPLEX_MISSION_SERVICE_K8S_NAMESPACE_DEV: "pcp-dev"
COMPLEX_MISSION_SERVICE_K8S_NAMESPACE_MASTER: "pcp-master"
TLE_MONITORING_SERVICE_DIR: "services/tle-monitoring-service"
TLE_MONITORING_HELM_CHART_DIR: "helm/tle-monitoring-service"
TLE_MONITORING_HELM_RELEASE: "tle-monitoring-service"
TLE_MONITORING_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/tle-monitoring-service"
TLE_MONITORING_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
TLE_MONITORING_K8S_NAMESPACE_DEV: "pcp-dev"
TLE_MONITORING_K8S_NAMESPACE_MASTER: "pcp-master"
.complex_mission_service_changes: &complex_mission_service_changes
- services/pcp-complex-mission-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-complex-mission-service-tle.yml
- helm/pcp-complex-mission-service/**/*
- deploy/**/*
.tle_monitoring_changes: &tle_monitoring_changes
- services/tle-monitoring-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-complex-mission-service-tle.yml
- helm/tle-monitoring-service/**/*
- deploy/**/*
.complex-mission-service:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *complex_mission_service_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *complex_mission_service_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *complex_mission_service_changes
- when: never
.complex-mission-service:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *complex_mission_service_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *complex_mission_service_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *complex_mission_service_changes
- when: never
.complex-mission-service:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *complex_mission_service_changes
when: manual
- when: never
.complex-mission-service:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *complex_mission_service_changes
when: manual
- when: never
.tle-monitoring:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *tle_monitoring_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tle_monitoring_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tle_monitoring_changes
- when: never
.tle-monitoring:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *tle_monitoring_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tle_monitoring_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tle_monitoring_changes
- when: never
.tle-monitoring:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tle_monitoring_changes
when: manual
- when: never
.tle-monitoring:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tle_monitoring_changes
when: manual
- when: never
.pcp-gradle-cache:
cache:
key: "gradle-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.pcp-docker-build:
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:
- docker version
- docker info
.pcp-helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube ~/.kube
- helm version
after_script:
- rm -f /root/.kube/config ~/.kube/config
complex-mission-service:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .complex-mission-service:rules:test
- .pcp-gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-complex-mission-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-complex-mission-service/build/test-results/test/*.xml
paths:
- services/pcp-complex-mission-service/build/reports/tests/
expire_in: 7 days
complex-mission-service:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .complex-mission-service:rules:build-and-image
- .pcp-gradle-cache
needs:
- job: complex-mission-service:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-complex-mission-service:bootJar
artifacts:
when: always
paths:
- services/pcp-complex-mission-service/build/libs/*.jar
expire_in: 7 days
complex-mission-service:package:
stage: package
extends:
- .complex-mission-service:rules:build-and-image
- .pcp-docker-build
needs:
- job: complex-mission-service:build
artifacts: true
script:
- 'echo "COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY=$COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$COMPLEX_MISSION_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$COMPLEX_MISSION_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$COMPLEX_MISSION_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$COMPLEX_MISSION_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY:$COMPLEX_MISSION_SERVICE_IMAGE_TAG" docker-context
- docker push "$COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY:$COMPLEX_MISSION_SERVICE_IMAGE_TAG"
- printf "COMPLEX_MISSION_SERVICE_IMAGE=%s\n" "$COMPLEX_MISSION_SERVICE_IMAGE_REPOSITORY:$COMPLEX_MISSION_SERVICE_IMAGE_TAG" > complex-mission-service-image.env
artifacts:
reports:
dotenv: complex-mission-service-image.env
expire_in: 7 days
complex-mission-service:deploy:dev:
stage: deploy
extends:
- .complex-mission-service:rules:deploy-dev
- .pcp-helm-deploy
needs:
- job: complex-mission-service:package
artifacts: true
environment:
name: dev/pcp-complex-mission-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${COMPLEX_MISSION_SERVICE_IMAGE%:*}"'
- 'export IMAGE_TAG="${COMPLEX_MISSION_SERVICE_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$COMPLEX_MISSION_SERVICE_HELM_RELEASE"
"$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR"
--namespace "$COMPLEX_MISSION_SERVICE_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR/values.yaml"
-f "$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
complex-mission-service:deploy:master:
stage: deploy
extends:
- .complex-mission-service:rules:deploy-master
- .pcp-helm-deploy
needs:
- job: complex-mission-service:package
artifacts: true
environment:
name: master/pcp-complex-mission-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${COMPLEX_MISSION_SERVICE_IMAGE%:*}"'
- 'export IMAGE_TAG="${COMPLEX_MISSION_SERVICE_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$COMPLEX_MISSION_SERVICE_HELM_RELEASE"
"$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR"
--namespace "$COMPLEX_MISSION_SERVICE_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR/values.yaml"
-f "$COMPLEX_MISSION_SERVICE_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
tle-monitoring:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
services:
- name: repo.nstart.cloud/postgis/postgis:16-3.4
alias: postgres
variables:
POSTGRES_DB: "pcp_tle"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
SPRING_DATASOURCE_URL: "jdbc:postgresql://postgres:5432/pcp_tle"
SPRING_DATASOURCE_USERNAME: "postgres"
SPRING_DATASOURCE_PASSWORD: "password"
SPRING_TASK_SCHEDULING_ENABLED: "false"
extends:
- .tle-monitoring:rules:test
- .pcp-gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:tle-monitoring-service:test
artifacts:
when: always
reports:
junit:
- services/tle-monitoring-service/build/test-results/test/*.xml
paths:
- services/tle-monitoring-service/build/reports/tests/
expire_in: 7 days
tle-monitoring:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .tle-monitoring:rules:build-and-image
- .pcp-gradle-cache
needs:
- job: tle-monitoring:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:tle-monitoring-service:bootJar
artifacts:
when: always
paths:
- services/tle-monitoring-service/build/libs/*.jar
expire_in: 7 days
tle-monitoring:package:
stage: package
extends:
- .tle-monitoring:rules:build-and-image
- .pcp-docker-build
needs:
- job: tle-monitoring:build
artifacts: true
script:
- 'echo "TLE_MONITORING_IMAGE_REPOSITORY=$TLE_MONITORING_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$TLE_MONITORING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$TLE_MONITORING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$TLE_MONITORING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$TLE_MONITORING_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$TLE_MONITORING_IMAGE_REPOSITORY:$TLE_MONITORING_IMAGE_TAG" docker-context
- docker push "$TLE_MONITORING_IMAGE_REPOSITORY:$TLE_MONITORING_IMAGE_TAG"
- printf "TLE_MONITORING_IMAGE=%s\n" "$TLE_MONITORING_IMAGE_REPOSITORY:$TLE_MONITORING_IMAGE_TAG" > tle-monitoring-image.env
artifacts:
reports:
dotenv: tle-monitoring-image.env
expire_in: 7 days
tle-monitoring:deploy:dev:
stage: deploy
extends:
- .tle-monitoring:rules:deploy-dev
- .pcp-helm-deploy
needs:
- job: tle-monitoring:package
artifacts: true
environment:
name: dev/tle-monitoring-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${TLE_MONITORING_IMAGE%:*}"'
- 'export IMAGE_TAG="${TLE_MONITORING_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$TLE_MONITORING_HELM_RELEASE"
"$TLE_MONITORING_HELM_CHART_DIR"
--namespace "$TLE_MONITORING_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 15m
-f "$TLE_MONITORING_HELM_CHART_DIR/values.yaml"
-f "$TLE_MONITORING_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
tle-monitoring:deploy:master:
stage: deploy
extends:
- .tle-monitoring:rules:deploy-master
- .pcp-helm-deploy
needs:
- job: tle-monitoring:package
artifacts: true
environment:
name: master/tle-monitoring-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${TLE_MONITORING_IMAGE%:*}"'
- 'export IMAGE_TAG="${TLE_MONITORING_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$TLE_MONITORING_HELM_RELEASE"
"$TLE_MONITORING_HELM_CHART_DIR"
--namespace "$TLE_MONITORING_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 15m
-f "$TLE_MONITORING_HELM_CHART_DIR/values.yaml"
-f "$TLE_MONITORING_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+244
View File
@@ -0,0 +1,244 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
COVERAGE_SCHEME_SERVICE_DIR: "services/pcp-coverage-scheme-service"
COVERAGE_SCHEME_HELM_CHART_DIR: "helm/pcp-coverage-scheme-service"
COVERAGE_SCHEME_HELM_RELEASE: "pcp-coverage-scheme-service"
COVERAGE_SCHEME_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-coverage-scheme-service"
COVERAGE_SCHEME_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
COVERAGE_SCHEME_K8S_NAMESPACE_DEV: "pcp-dev"
COVERAGE_SCHEME_K8S_NAMESPACE_MASTER: "pcp-master"
.coverage_scheme_changes: &coverage_scheme_changes
- services/pcp-coverage-scheme-service/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- gradle.properties
- .gitlab/ci/pcp-coverage-scheme-service.yml
- helm/pcp-coverage-scheme-service/**/*
- deploy/**/*
.coverage_scheme:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *coverage_scheme_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *coverage_scheme_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *coverage_scheme_changes
- when: never
.coverage_scheme:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *coverage_scheme_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *coverage_scheme_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *coverage_scheme_changes
- when: never
.coverage_scheme:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *coverage_scheme_changes
when: manual
- when: never
.coverage_scheme:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *coverage_scheme_changes
when: manual
- when: never
.coverage_scheme:gradle-cache:
cache:
key: "gradle-coverage-scheme-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.coverage_scheme:docker-build:
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:
- docker version
- docker info
.coverage_scheme:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
coverage-scheme:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .coverage_scheme:rules:test
- .coverage_scheme:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-coverage-scheme-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-coverage-scheme-service/build/test-results/test/*.xml
paths:
- services/pcp-coverage-scheme-service/build/reports/tests/
expire_in: 7 days
coverage-scheme:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .coverage_scheme:rules:build-and-image
- .coverage_scheme:gradle-cache
needs:
- job: coverage-scheme:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-coverage-scheme-service:bootJar
artifacts:
when: always
paths:
- services/pcp-coverage-scheme-service/build/libs/*.jar
expire_in: 7 days
coverage-scheme:package:
stage: package
extends:
- .coverage_scheme:rules:build-and-image
- .coverage_scheme:docker-build
needs:
- job: coverage-scheme:build
artifacts: true
script:
- 'echo "COVERAGE_SCHEME_IMAGE_REPOSITORY=$COVERAGE_SCHEME_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$COVERAGE_SCHEME_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$COVERAGE_SCHEME_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$COVERAGE_SCHEME_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$COVERAGE_SCHEME_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$COVERAGE_SCHEME_IMAGE_REPOSITORY:$COVERAGE_SCHEME_IMAGE_TAG" docker-context
- docker push "$COVERAGE_SCHEME_IMAGE_REPOSITORY:$COVERAGE_SCHEME_IMAGE_TAG"
- printf "COVERAGE_SCHEME_IMAGE=%s\n" "$COVERAGE_SCHEME_IMAGE_REPOSITORY:$COVERAGE_SCHEME_IMAGE_TAG" > coverage-scheme-image.env
artifacts:
reports:
dotenv: coverage-scheme-image.env
expire_in: 7 days
coverage-scheme:deploy:dev:
stage: deploy
extends:
- .coverage_scheme:rules:deploy-dev
- .coverage_scheme:helm-deploy
needs:
- job: coverage-scheme:package
artifacts: true
environment:
name: dev/pcp-coverage-scheme-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${COVERAGE_SCHEME_IMAGE%:*}"'
- 'export IMAGE_TAG="${COVERAGE_SCHEME_IMAGE##*:}"'
- >
helm upgrade --install "$COVERAGE_SCHEME_HELM_RELEASE"
"$COVERAGE_SCHEME_HELM_CHART_DIR"
--namespace "$COVERAGE_SCHEME_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$COVERAGE_SCHEME_HELM_CHART_DIR/values.yaml"
-f "$COVERAGE_SCHEME_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
coverage-scheme:deploy:master:
stage: deploy
extends:
- .coverage_scheme:rules:deploy-master
- .coverage_scheme:helm-deploy
needs:
- job: coverage-scheme:package
artifacts: true
environment:
name: master/pcp-coverage-scheme-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${COVERAGE_SCHEME_IMAGE%:*}"'
- 'export IMAGE_TAG="${COVERAGE_SCHEME_IMAGE##*:}"'
- >
helm upgrade --install "$COVERAGE_SCHEME_HELM_RELEASE"
"$COVERAGE_SCHEME_HELM_CHART_DIR"
--namespace "$COVERAGE_SCHEME_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$COVERAGE_SCHEME_HELM_CHART_DIR/values.yaml"
-f "$COVERAGE_SCHEME_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+247
View File
@@ -0,0 +1,247 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
DYNAMIC_PLAN_SERVICE_DIR: "services/pcp-dynamic-plan-service"
DYNAMIC_PLAN_HELM_CHART_DIR: "helm/pcp-dynamic-plan-service"
DYNAMIC_PLAN_HELM_RELEASE: "pcp-dynamic-plan-service"
DYNAMIC_PLAN_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-dynamic-plan-service"
DYNAMIC_PLAN_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
DYNAMIC_PLAN_K8S_NAMESPACE_DEV: "pcp-dev"
DYNAMIC_PLAN_K8S_NAMESPACE_MASTER: "pcp-master"
.dynamic_plan_changes: &dynamic_plan_changes
- services/pcp-dynamic-plan-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- gradle.properties
- .gitlab/ci/pcp-dynamic-plan-service.yml
- helm/pcp-dynamic-plan-service/**/*
- deploy/**/*
.dynamic_plan:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *dynamic_plan_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *dynamic_plan_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *dynamic_plan_changes
- when: never
.dynamic_plan:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *dynamic_plan_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *dynamic_plan_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *dynamic_plan_changes
- when: never
.dynamic_plan:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *dynamic_plan_changes
when: manual
- when: never
.dynamic_plan:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *dynamic_plan_changes
when: manual
- when: never
.dynamic_plan:gradle-cache:
cache:
key: "gradle-dynamic-plan-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.dynamic_plan:docker-build:
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:
- docker version
- docker info
.dynamic_plan:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
dynamic-plan:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .dynamic_plan:rules:test
- .dynamic_plan:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-dynamic-plan-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-dynamic-plan-service/build/test-results/test/*.xml
paths:
- services/pcp-dynamic-plan-service/build/reports/tests/
expire_in: 7 days
dynamic-plan:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .dynamic_plan:rules:build-and-image
- .dynamic_plan:gradle-cache
needs:
- job: dynamic-plan:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-dynamic-plan-service:bootJar
artifacts:
when: always
paths:
- services/pcp-dynamic-plan-service/build/libs/*.jar
expire_in: 7 days
dynamic-plan:package:
stage: package
extends:
- .dynamic_plan:rules:build-and-image
- .dynamic_plan:docker-build
needs:
- job: dynamic-plan:build
artifacts: true
script:
- 'echo "DYNAMIC_PLAN_IMAGE_REPOSITORY=$DYNAMIC_PLAN_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$DYNAMIC_PLAN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$DYNAMIC_PLAN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$DYNAMIC_PLAN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$DYNAMIC_PLAN_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$DYNAMIC_PLAN_IMAGE_REPOSITORY:$DYNAMIC_PLAN_IMAGE_TAG" docker-context
- docker push "$DYNAMIC_PLAN_IMAGE_REPOSITORY:$DYNAMIC_PLAN_IMAGE_TAG"
- printf "DYNAMIC_PLAN_IMAGE=%s\n" "$DYNAMIC_PLAN_IMAGE_REPOSITORY:$DYNAMIC_PLAN_IMAGE_TAG" > dynamic-plan-image.env
artifacts:
reports:
dotenv: dynamic-plan-image.env
expire_in: 7 days
dynamic-plan:deploy:dev:
stage: deploy
extends:
- .dynamic_plan:rules:deploy-dev
- .dynamic_plan:helm-deploy
needs:
- job: dynamic-plan:package
artifacts: true
environment:
name: dev/pcp-dynamic-plan-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${DYNAMIC_PLAN_IMAGE%:*}"'
- 'export IMAGE_TAG="${DYNAMIC_PLAN_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$DYNAMIC_PLAN_HELM_RELEASE"
"$DYNAMIC_PLAN_HELM_CHART_DIR"
--namespace "$DYNAMIC_PLAN_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$DYNAMIC_PLAN_HELM_CHART_DIR/values.yaml"
-f "$DYNAMIC_PLAN_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
dynamic-plan:deploy:master:
stage: deploy
extends:
- .dynamic_plan:rules:deploy-master
- .dynamic_plan:helm-deploy
needs:
- job: dynamic-plan:package
artifacts: true
environment:
name: master/pcp-dynamic-plan-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${DYNAMIC_PLAN_IMAGE%:*}"'
- 'export IMAGE_TAG="${DYNAMIC_PLAN_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$DYNAMIC_PLAN_HELM_RELEASE"
"$DYNAMIC_PLAN_HELM_CHART_DIR"
--namespace "$DYNAMIC_PLAN_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$DYNAMIC_PLAN_HELM_CHART_DIR/values.yaml"
-f "$DYNAMIC_PLAN_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+246
View File
@@ -0,0 +1,246 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
MISSION_PLANING_SERVICE_DIR: "services/pcp-mission-planing-service"
MISSION_PLANING_HELM_CHART_DIR: "helm/pcp-mission-planing-service"
MISSION_PLANING_HELM_RELEASE: "pcp-mission-planing-service"
MISSION_PLANING_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-mission-planing-service"
MISSION_PLANING_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
MISSION_PLANING_K8S_NAMESPACE_DEV: "pcp-dev"
MISSION_PLANING_K8S_NAMESPACE_MASTER: "pcp-master"
.mission_planing_changes: &mission_planing_changes
- services/pcp-mission-planing-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-mission-planing-service.yml
- helm/pcp-mission-planing-service/**/*
- deploy/**/*
.mission-planing:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *mission_planing_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *mission_planing_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *mission_planing_changes
- when: never
.mission-planing:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *mission_planing_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *mission_planing_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *mission_planing_changes
- when: never
.mission-planing:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *mission_planing_changes
when: manual
- when: never
.mission-planing:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *mission_planing_changes
when: manual
- when: never
.mission-planing:gradle-cache:
cache:
key: "gradle-mission-planing-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.mission-planing:docker-build:
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:
- docker version
- docker info
.mission-planing:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
mission-planing:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .mission-planing:rules:test
- .mission-planing:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-mission-planing-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-mission-planing-service/build/test-results/test/*.xml
paths:
- services/pcp-mission-planing-service/build/reports/tests/
expire_in: 7 days
mission-planing:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .mission-planing:rules:build-and-image
- .mission-planing:gradle-cache
needs:
- job: mission-planing:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-mission-planing-service:bootJar
artifacts:
when: always
paths:
- services/pcp-mission-planing-service/build/libs/*.jar
expire_in: 7 days
mission-planing:package:
stage: package
extends:
- .mission-planing:rules:build-and-image
- .mission-planing:docker-build
needs:
- job: mission-planing:build
artifacts: true
script:
- 'echo "MISSION_PLANING_IMAGE_REPOSITORY=$MISSION_PLANING_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$MISSION_PLANING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$MISSION_PLANING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$MISSION_PLANING_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$MISSION_PLANING_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$MISSION_PLANING_IMAGE_REPOSITORY:$MISSION_PLANING_IMAGE_TAG" docker-context
- docker push "$MISSION_PLANING_IMAGE_REPOSITORY:$MISSION_PLANING_IMAGE_TAG"
- printf "MISSION_PLANING_IMAGE=%s\n" "$MISSION_PLANING_IMAGE_REPOSITORY:$MISSION_PLANING_IMAGE_TAG" > mission-planing-image.env
artifacts:
reports:
dotenv: mission-planing-image.env
expire_in: 7 days
mission-planing:deploy:dev:
stage: deploy
extends:
- .mission-planing:rules:deploy-dev
- .mission-planing:helm-deploy
needs:
- job: mission-planing:package
artifacts: true
environment:
name: dev/pcp-mission-planing-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${MISSION_PLANING_IMAGE%:*}"'
- 'export IMAGE_TAG="${MISSION_PLANING_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$MISSION_PLANING_HELM_RELEASE"
"$MISSION_PLANING_HELM_CHART_DIR"
--namespace "$MISSION_PLANING_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$MISSION_PLANING_HELM_CHART_DIR/values.yaml"
-f "$MISSION_PLANING_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
mission-planing:deploy:master:
stage: deploy
extends:
- .mission-planing:rules:deploy-master
- .mission-planing:helm-deploy
needs:
- job: mission-planing:package
artifacts: true
environment:
name: master/pcp-mission-planing-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${MISSION_PLANING_IMAGE%:*}"'
- 'export IMAGE_TAG="${MISSION_PLANING_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$MISSION_PLANING_HELM_RELEASE"
"$MISSION_PLANING_HELM_CHART_DIR"
--namespace "$MISSION_PLANING_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$MISSION_PLANING_HELM_CHART_DIR/values.yaml"
-f "$MISSION_PLANING_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+245
View File
@@ -0,0 +1,245 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
REQUEST_SERVICE_DIR: "services/pcp-request-service"
REQUEST_HELM_CHART_DIR: "helm/pcp-request-service"
REQUEST_HELM_RELEASE: "pcp-request-service"
REQUEST_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-request-service"
REQUEST_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
REQUEST_K8S_NAMESPACE_DEV: "pcp-dev"
REQUEST_K8S_NAMESPACE_MASTER: "pcp-master"
.request_changes: &request_changes
- services/pcp-request-service/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-request-service.yml
- helm/pcp-request-service/**/*
- deploy/**/*
.request:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *request_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *request_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *request_changes
- when: never
.request:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *request_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *request_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *request_changes
- when: never
.request:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *request_changes
when: manual
- when: never
.request:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *request_changes
when: manual
- when: never
.request:gradle-cache:
cache:
key: "gradle-request-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.request:docker-build:
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:
- docker version
- docker info
.request:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
request:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .request:rules:test
- .request:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-request-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-request-service/build/test-results/test/*.xml
paths:
- services/pcp-request-service/build/reports/tests/
expire_in: 7 days
request:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .request:rules:build-and-image
- .request:gradle-cache
needs:
- job: request:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-request-service:bootJar
artifacts:
when: always
paths:
- services/pcp-request-service/build/libs/*.jar
expire_in: 7 days
request:package:
stage: package
extends:
- .request:rules:build-and-image
- .request:docker-build
needs:
- job: request:build
artifacts: true
script:
- 'echo "REQUEST_IMAGE_REPOSITORY=$REQUEST_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$REQUEST_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$REQUEST_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$REQUEST_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$REQUEST_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$REQUEST_IMAGE_REPOSITORY:$REQUEST_IMAGE_TAG" docker-context
- docker push "$REQUEST_IMAGE_REPOSITORY:$REQUEST_IMAGE_TAG"
- printf "REQUEST_IMAGE=%s\n" "$REQUEST_IMAGE_REPOSITORY:$REQUEST_IMAGE_TAG" > request-image.env
artifacts:
reports:
dotenv: request-image.env
expire_in: 7 days
request:deploy:dev:
stage: deploy
extends:
- .request:rules:deploy-dev
- .request:helm-deploy
needs:
- job: request:package
artifacts: true
environment:
name: dev/pcp-request-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${REQUEST_IMAGE%:*}"'
- 'export IMAGE_TAG="${REQUEST_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$REQUEST_HELM_RELEASE"
"$REQUEST_HELM_CHART_DIR"
--namespace "$REQUEST_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 15m
-f "$REQUEST_HELM_CHART_DIR/values.yaml"
-f "$REQUEST_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
request:deploy:master:
stage: deploy
extends:
- .request:rules:deploy-master
- .request:helm-deploy
needs:
- job: request:package
artifacts: true
environment:
name: master/pcp-request-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${REQUEST_IMAGE%:*}"'
- 'export IMAGE_TAG="${REQUEST_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$REQUEST_HELM_RELEASE"
"$REQUEST_HELM_CHART_DIR"
--namespace "$REQUEST_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 15m
-f "$REQUEST_HELM_CHART_DIR/values.yaml"
-f "$REQUEST_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
@@ -0,0 +1,245 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
SATELLITE_CATALOG_SERVICE_DIR: "services/pcp-satellite-catalog-service"
SATELLITE_CATALOG_HELM_CHART_DIR: "helm/pcp-satellite-catalog-service"
SATELLITE_CATALOG_HELM_RELEASE: "pcp-satellite-catalog-service"
SATELLITE_CATALOG_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-satellite-catalog-service"
SATELLITE_CATALOG_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
SATELLITE_CATALOG_K8S_NAMESPACE_DEV: "pcp-dev"
SATELLITE_CATALOG_K8S_NAMESPACE_MASTER: "pcp-master"
.satellite_catalog_changes: &satellite_catalog_changes
- services/pcp-satellite-catalog-service/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-satellite-catalog-service.*
- helm/pcp-satellite-catalog-service/**/*
- deploy/**/*
.satellite-catalog:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *satellite_catalog_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *satellite_catalog_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *satellite_catalog_changes
- when: never
.satellite-catalog:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *satellite_catalog_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *satellite_catalog_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *satellite_catalog_changes
- when: never
.satellite-catalog:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *satellite_catalog_changes
when: manual
- when: never
.satellite-catalog:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *satellite_catalog_changes
when: manual
- when: never
.satellite-catalog:gradle-cache:
cache:
key: "gradle-satellite-catalog-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.satellite-catalog:docker-build:
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:
- docker version
- docker info
.satellite-catalog:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
satellite-catalog:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .satellite-catalog:rules:test
- .satellite-catalog:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-satellite-catalog-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-satellite-catalog-service/build/test-results/test/*.xml
paths:
- services/pcp-satellite-catalog-service/build/reports/tests/
expire_in: 7 days
satellite-catalog:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .satellite-catalog:rules:build-and-image
- .satellite-catalog:gradle-cache
needs:
- job: satellite-catalog:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-satellite-catalog-service:bootJar
artifacts:
when: always
paths:
- services/pcp-satellite-catalog-service/build/libs/*.jar
expire_in: 7 days
satellite-catalog:package:
stage: package
extends:
- .satellite-catalog:rules:build-and-image
- .satellite-catalog:docker-build
needs:
- job: satellite-catalog:build
artifacts: true
script:
- 'echo "SATELLITE_CATALOG_IMAGE_REPOSITORY=$SATELLITE_CATALOG_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$SATELLITE_CATALOG_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$SATELLITE_CATALOG_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$SATELLITE_CATALOG_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$SATELLITE_CATALOG_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$SATELLITE_CATALOG_IMAGE_REPOSITORY:$SATELLITE_CATALOG_IMAGE_TAG" docker-context
- docker push "$SATELLITE_CATALOG_IMAGE_REPOSITORY:$SATELLITE_CATALOG_IMAGE_TAG"
- printf "SATELLITE_CATALOG_IMAGE=%s\n" "$SATELLITE_CATALOG_IMAGE_REPOSITORY:$SATELLITE_CATALOG_IMAGE_TAG" > satellite-catalog-image.env
artifacts:
reports:
dotenv: satellite-catalog-image.env
expire_in: 7 days
satellite-catalog:deploy:dev:
stage: deploy
extends:
- .satellite-catalog:rules:deploy-dev
- .satellite-catalog:helm-deploy
needs:
- job: satellite-catalog:package
artifacts: true
environment:
name: dev/pcp-satellite-catalog-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${SATELLITE_CATALOG_IMAGE%:*}"'
- 'export IMAGE_TAG="${SATELLITE_CATALOG_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$SATELLITE_CATALOG_HELM_RELEASE"
"$SATELLITE_CATALOG_HELM_CHART_DIR"
--namespace "$SATELLITE_CATALOG_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$SATELLITE_CATALOG_HELM_CHART_DIR/values.yaml"
-f "$SATELLITE_CATALOG_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
satellite-catalog:deploy:master:
stage: deploy
extends:
- .satellite-catalog:rules:deploy-master
- .satellite-catalog:helm-deploy
needs:
- job: satellite-catalog:package
artifacts: true
environment:
name: master/pcp-satellite-catalog-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${SATELLITE_CATALOG_IMAGE%:*}"'
- 'export IMAGE_TAG="${SATELLITE_CATALOG_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$SATELLITE_CATALOG_HELM_RELEASE"
"$SATELLITE_CATALOG_HELM_CHART_DIR"
--namespace "$SATELLITE_CATALOG_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$SATELLITE_CATALOG_HELM_CHART_DIR/values.yaml"
-f "$SATELLITE_CATALOG_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+191
View File
@@ -0,0 +1,191 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
SPRING_BOOT_ADMIN_SERVICE_DIR: "services/pcp-srpring-boot-admin-server"
SPRING_BOOT_ADMIN_HELM_CHART_DIR: "helm/pcp-spring-boot-admin-server"
SPRING_BOOT_ADMIN_HELM_RELEASE: "pcp-spring-boot-admin-server"
SPRING_BOOT_ADMIN_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-spring-boot-admin-server"
SPRING_BOOT_ADMIN_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
SPRING_BOOT_ADMIN_K8S_NAMESPACE_DEV: "pcp-dev"
.spring_boot_admin_changes: &spring_boot_admin_changes
- services/pcp-srpring-boot-admin-server/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-spring-boot-admin-server.yml
- helm/pcp-spring-boot-admin-server/**/*
- deploy/**/*
.spring-boot-admin:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *spring_boot_admin_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *spring_boot_admin_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *spring_boot_admin_changes
- when: never
.spring-boot-admin:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *spring_boot_admin_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *spring_boot_admin_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *spring_boot_admin_changes
- when: never
.spring-boot-admin:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *spring_boot_admin_changes
when: manual
- when: never
.spring-boot-admin:gradle-cache:
cache:
key: "gradle-spring-boot-admin-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.spring-boot-admin:docker-build:
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:
- docker version
- docker info
.spring-boot-admin:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
spring-boot-admin:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .spring-boot-admin:rules:test
- .spring-boot-admin:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-srpring-boot-admin-server:test
artifacts:
when: always
reports:
junit:
- services/pcp-srpring-boot-admin-server/build/test-results/test/*.xml
paths:
- services/pcp-srpring-boot-admin-server/build/reports/tests/
expire_in: 7 days
spring-boot-admin:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .spring-boot-admin:rules:build-and-image
- .spring-boot-admin:gradle-cache
needs:
- job: spring-boot-admin:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-srpring-boot-admin-server:bootJar
artifacts:
when: always
paths:
- services/pcp-srpring-boot-admin-server/build/libs/*.jar
expire_in: 7 days
spring-boot-admin:package:
stage: package
extends:
- .spring-boot-admin:rules:build-and-image
- .spring-boot-admin:docker-build
needs:
- job: spring-boot-admin:build
artifacts: true
script:
- 'echo "SPRING_BOOT_ADMIN_IMAGE_REPOSITORY=$SPRING_BOOT_ADMIN_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$SPRING_BOOT_ADMIN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$SPRING_BOOT_ADMIN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$SPRING_BOOT_ADMIN_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$SPRING_BOOT_ADMIN_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$SPRING_BOOT_ADMIN_IMAGE_REPOSITORY:$SPRING_BOOT_ADMIN_IMAGE_TAG" docker-context
- docker push "$SPRING_BOOT_ADMIN_IMAGE_REPOSITORY:$SPRING_BOOT_ADMIN_IMAGE_TAG"
- printf "SPRING_BOOT_ADMIN_IMAGE=%s\n" "$SPRING_BOOT_ADMIN_IMAGE_REPOSITORY:$SPRING_BOOT_ADMIN_IMAGE_TAG" > spring-boot-admin-image.env
artifacts:
reports:
dotenv: spring-boot-admin-image.env
expire_in: 7 days
spring-boot-admin:deploy:dev:
stage: deploy
extends:
- .spring-boot-admin:rules:deploy-dev
- .spring-boot-admin:helm-deploy
needs:
- job: spring-boot-admin:package
artifacts: true
environment:
name: dev/pcp-spring-boot-admin-server
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${SPRING_BOOT_ADMIN_IMAGE%:*}"'
- 'export IMAGE_TAG="${SPRING_BOOT_ADMIN_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$SPRING_BOOT_ADMIN_HELM_RELEASE"
"$SPRING_BOOT_ADMIN_HELM_CHART_DIR"
--namespace "$SPRING_BOOT_ADMIN_K8S_NAMESPACE_DEV"
--create-namespace
--values "$SPRING_BOOT_ADMIN_HELM_CHART_DIR/values.yaml"
--values "$SPRING_BOOT_ADMIN_HELM_CHART_DIR/values-dev.yaml"
--set-string image.repository="$IMAGE_REPOSITORY"
--set-string image.tag="$IMAGE_TAG"
--set-string app.profile=dev
--set-string app.configLabel=dev
--atomic
--wait
--timeout 15m
+245
View File
@@ -0,0 +1,245 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
STATIONS_SERVICE_DIR: "services/pcp-stations-service"
STATIONS_HELM_CHART_DIR: "helm/pcp-stations-service"
STATIONS_HELM_RELEASE: "pcp-stations-service"
STATIONS_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-stations-service"
STATIONS_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
STATIONS_K8S_NAMESPACE_DEV: "pcp-dev"
STATIONS_K8S_NAMESPACE_MASTER: "pcp-master"
.stations_changes: &stations_changes
- services/pcp-stations-service/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-stations-service.*
- helm/pcp-stations-service/**/*
- deploy/**/*
.stations:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *stations_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *stations_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *stations_changes
- when: never
.stations:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *stations_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *stations_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *stations_changes
- when: never
.stations:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *stations_changes
when: manual
- when: never
.stations:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *stations_changes
when: manual
- when: never
.stations:gradle-cache:
cache:
key: "gradle-stations-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.stations:docker-build:
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:
- docker version
- docker info
.stations:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
stations:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .stations:rules:test
- .stations:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-stations-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-stations-service/build/test-results/test/*.xml
paths:
- services/pcp-stations-service/build/reports/tests/
expire_in: 7 days
stations:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .stations:rules:build-and-image
- .stations:gradle-cache
needs:
- job: stations:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-stations-service:bootJar
artifacts:
when: always
paths:
- services/pcp-stations-service/build/libs/*.jar
expire_in: 7 days
stations:package:
stage: package
extends:
- .stations:rules:build-and-image
- .stations:docker-build
needs:
- job: stations:build
artifacts: true
script:
- 'echo "STATIONS_IMAGE_REPOSITORY=$STATIONS_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$STATIONS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$STATIONS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$STATIONS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$STATIONS_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$STATIONS_IMAGE_REPOSITORY:$STATIONS_IMAGE_TAG" docker-context
- docker push "$STATIONS_IMAGE_REPOSITORY:$STATIONS_IMAGE_TAG"
- printf "STATIONS_IMAGE=%s\n" "$STATIONS_IMAGE_REPOSITORY:$STATIONS_IMAGE_TAG" > stations-image.env
artifacts:
reports:
dotenv: stations-image.env
expire_in: 7 days
stations:deploy:dev:
stage: deploy
extends:
- .stations:rules:deploy-dev
- .stations:helm-deploy
needs:
- job: stations:package
artifacts: true
environment:
name: dev/pcp-stations-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${STATIONS_IMAGE%:*}"'
- 'export IMAGE_TAG="${STATIONS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$STATIONS_HELM_RELEASE"
"$STATIONS_HELM_CHART_DIR"
--namespace "$STATIONS_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$STATIONS_HELM_CHART_DIR/values.yaml"
-f "$STATIONS_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
stations:deploy:master:
stage: deploy
extends:
- .stations:rules:deploy-master
- .stations:helm-deploy
needs:
- job: stations:package
artifacts: true
environment:
name: master/pcp-stations-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${STATIONS_IMAGE%:*}"'
- 'export IMAGE_TAG="${STATIONS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$STATIONS_HELM_RELEASE"
"$STATIONS_HELM_CHART_DIR"
--namespace "$STATIONS_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$STATIONS_HELM_CHART_DIR/values.yaml"
-f "$STATIONS_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+203
View File
@@ -0,0 +1,203 @@
variables:
TGU_SERVICE_DIR: "services/pcp-tgu-service"
TGU_HELM_CHART_DIR: "helm/pcp-tgu-service"
TGU_HELM_RELEASE: "pcp-tgu-service"
TGU_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-tgu-service"
TGU_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
TGU_K8S_NAMESPACE_DEV: "pcp-dev"
TGU_K8S_NAMESPACE_MASTER: "pcp-master"
.tgu_changes: &tgu_changes
- services/pcp-tgu-service/**/*
# - libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-tgu-service.yml
- helm/pcp-tgu-service/**/*
- deploy/**/*
.tgu:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *tgu_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tgu_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tgu_changes
- when: never
.tgu:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *tgu_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tgu_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tgu_changes
- when: never
.tgu:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *tgu_changes
when: manual
- when: never
.tgu:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *tgu_changes
when: manual
- when: never
.tgu:gradle-cache:
cache:
key: "gradle-tgu-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.tgu:docker-build:
image: docker:26
services:
- name: 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:
- docker version
- docker info
.tgu:helm-deploy:
image:
name: alpine/helm:3.16.4
entrypoint: [""]
before_script:
- mkdir -p ~/.kube
- helm version
tgu:test:
stage: test
image: eclipse-temurin:21-jdk
extends:
- .tgu:rules:test
- .tgu:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-tgu-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-tgu-service/build/test-results/test/*.xml
paths:
- services/pcp-tgu-service/build/reports/tests/
expire_in: 7 days
tgu:build:
stage: build
image: eclipse-temurin:21-jdk
extends:
- .tgu:rules:build-and-image
- .tgu:gradle-cache
needs:
- job: tgu:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-tgu-service:bootJar
artifacts:
when: always
paths:
- services/pcp-tgu-service/build/libs/*.jar
expire_in: 7 days
tgu:package:
stage: package
extends:
- .tgu:rules:build-and-image
- .tgu:docker-build
needs:
- job: tgu:build
artifacts: true
script:
- 'echo "TGU_IMAGE_REPOSITORY=$TGU_IMAGE_REPOSITORY"'
- mkdir -p docker-context/build/libs
- cp "$TGU_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$TGU_SERVICE_DIR"/build/libs/*.jar docker-context/build/libs/
- docker build --file docker-context/Dockerfile --tag "$TGU_IMAGE_REPOSITORY:$TGU_IMAGE_TAG" docker-context
- docker push "$TGU_IMAGE_REPOSITORY:$TGU_IMAGE_TAG"
- printf "TGU_IMAGE=%s\n" "$TGU_IMAGE_REPOSITORY:$TGU_IMAGE_TAG" > tgu-image.env
artifacts:
reports:
dotenv: tgu-image.env
expire_in: 7 days
tgu:deploy:dev:
stage: deploy
extends:
- .tgu:rules:deploy-dev
- .tgu:helm-deploy
needs:
- job: tgu:package
artifacts: true
environment:
name: dev/pcp-tgu-service
script:
- 'echo "$KUBE_CONFIG_DEV_B64" | base64 -d > ~/.kube/config'
- chmod 600 ~/.kube/config
- 'export IMAGE_REPOSITORY="${TGU_IMAGE%:*}"'
- 'export IMAGE_TAG="${TGU_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$TGU_HELM_RELEASE"
"$TGU_HELM_CHART_DIR"
--namespace "$TGU_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$TGU_HELM_CHART_DIR/values.yaml"
-f "$TGU_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
tgu:deploy:master:
stage: deploy
extends:
- .tgu:rules:deploy-master
- .tgu:helm-deploy
needs:
- job: tgu:package
artifacts: true
environment:
name: master/pcp-tgu-service
script:
- 'echo "$KUBE_CONFIG_MASTER_B64" | base64 -d > ~/.kube/config'
- chmod 600 ~/.kube/config
- 'export IMAGE_REPOSITORY="${TGU_IMAGE%:*}"'
- 'export IMAGE_TAG="${TGU_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$TGU_HELM_RELEASE"
"$TGU_HELM_CHART_DIR"
--namespace "$TGU_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$TGU_HELM_CHART_DIR/values.yaml"
-f "$TGU_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+246
View File
@@ -0,0 +1,246 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
UI_SERVICE_DIR: "services/pcp-ui-service"
UI_HELM_CHART_DIR: "helm/pcp-ui-service"
UI_HELM_RELEASE: "pcp-ui-service"
UI_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-ui-service"
UI_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
UI_K8S_NAMESPACE_DEV: "pcp-dev"
UI_K8S_NAMESPACE_MASTER: "pcp-master"
.ui_changes: &ui_changes
- services/pcp-ui-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/pcp-ui-service.yml
- helm/pcp-ui-service/**/*
- deploy/**/*
.ui:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *ui_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ui_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ui_changes
- when: never
.ui:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *ui_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ui_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ui_changes
- when: never
.ui:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *ui_changes
when: manual
- when: never
.ui:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *ui_changes
when: manual
- when: never
.ui:gradle-cache:
cache:
key: "gradle-ui-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.ui:docker-build:
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:
- docker version
- docker info
.ui:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
ui:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .ui:rules:test
- .ui:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-ui-service:test
artifacts:
when: always
reports:
junit:
- services/pcp-ui-service/build/test-results/test/*.xml
paths:
- services/pcp-ui-service/build/reports/tests/
expire_in: 7 days
ui:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .ui:rules:build-and-image
- .ui:gradle-cache
needs:
- job: ui:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:pcp-ui-service:bootJar
artifacts:
when: always
paths:
- services/pcp-ui-service/build/libs/*.jar
expire_in: 7 days
ui:package:
stage: package
extends:
- .ui:rules:build-and-image
- .ui:docker-build
needs:
- job: ui:build
artifacts: true
script:
- 'echo "UI_IMAGE_REPOSITORY=$UI_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$UI_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$UI_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$UI_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$UI_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$UI_IMAGE_REPOSITORY:$UI_IMAGE_TAG" docker-context
- docker push "$UI_IMAGE_REPOSITORY:$UI_IMAGE_TAG"
- printf "UI_IMAGE=%s\n" "$UI_IMAGE_REPOSITORY:$UI_IMAGE_TAG" > ui-image.env
artifacts:
reports:
dotenv: ui-image.env
expire_in: 7 days
ui:deploy:dev:
stage: deploy
extends:
- .ui:rules:deploy-dev
- .ui:helm-deploy
needs:
- job: ui:package
artifacts: true
environment:
name: dev/pcp-ui-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${UI_IMAGE%:*}"'
- 'export IMAGE_TAG="${UI_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$UI_HELM_RELEASE"
"$UI_HELM_CHART_DIR"
--namespace "$UI_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$UI_HELM_CHART_DIR/values.yaml"
-f "$UI_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
ui:deploy:master:
stage: deploy
extends:
- .ui:rules:deploy-master
- .ui:helm-deploy
needs:
- job: ui:package
artifacts: true
environment:
name: master/pcp-ui-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${UI_IMAGE%:*}"'
- 'export IMAGE_TAG="${UI_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$UI_HELM_RELEASE"
"$UI_HELM_CHART_DIR"
--namespace "$UI_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 10m
-f "$UI_HELM_CHART_DIR/values.yaml"
-f "$UI_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+256
View File
@@ -0,0 +1,256 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
SLOTS_SERVICE_DIR: "services/slots-service"
SLOTS_HELM_CHART_DIR: "helm/slots-service"
SLOTS_HELM_RELEASE: "slots-service"
SLOTS_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/slots-service"
SLOTS_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
SLOTS_K8S_NAMESPACE_DEV: "pcp-dev"
SLOTS_K8S_NAMESPACE_MASTER: "pcp-master"
.slots_changes: &slots_changes
- services/slots-service/**/*
- libs/ballistics-lib/**/*
- libs/pcp-types-lib/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/slots-service.yml
- helm/slots-service/**/*
- deploy/**/*
.slots:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *slots_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *slots_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *slots_changes
- when: never
.slots:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *slots_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *slots_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *slots_changes
- when: never
.slots:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *slots_changes
when: manual
- when: never
.slots:rules:deploy-master:
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *slots_changes
when: manual
- when: never
.slots:gradle-cache:
cache:
key: "gradle-slots-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.slots:docker-build:
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:
- docker version
- docker info
.slots:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
slots:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
services:
- name: repo.nstart.cloud/postgis/postgis:16-3.4
alias: postgres
variables:
POSTGRES_DB: "pcp_slots"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
SPRING_DATASOURCE_URL: "jdbc:postgresql://postgres:5432/pcp_slots"
SPRING_DATASOURCE_USERNAME: "postgres"
SPRING_DATASOURCE_PASSWORD: "password"
extends:
- .slots:rules:test
- .slots:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:slots-service:test
artifacts:
when: always
reports:
junit:
- services/slots-service/build/test-results/test/*.xml
paths:
- services/slots-service/build/reports/tests/
expire_in: 7 days
slots:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .slots:rules:build-and-image
- .slots:gradle-cache
needs:
- job: slots:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:slots-service:bootJar
artifacts:
when: always
paths:
- services/slots-service/build/libs/*.jar
expire_in: 7 days
slots:package:
stage: package
extends:
- .slots:rules:build-and-image
- .slots:docker-build
needs:
- job: slots:build
artifacts: true
script:
- 'echo "SLOTS_IMAGE_REPOSITORY=$SLOTS_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$SLOTS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$SLOTS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$SLOTS_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$SLOTS_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$SLOTS_IMAGE_REPOSITORY:$SLOTS_IMAGE_TAG" docker-context
- docker push "$SLOTS_IMAGE_REPOSITORY:$SLOTS_IMAGE_TAG"
- printf "SLOTS_IMAGE=%s\n" "$SLOTS_IMAGE_REPOSITORY:$SLOTS_IMAGE_TAG" > slots-image.env
artifacts:
reports:
dotenv: slots-image.env
expire_in: 7 days
slots:deploy:dev:
stage: deploy
extends:
- .slots:rules:deploy-dev
- .slots:helm-deploy
needs:
- job: slots:package
artifacts: true
environment:
name: dev/pcp-slots-service
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${SLOTS_IMAGE%:*}"'
- 'export IMAGE_TAG="${SLOTS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$SLOTS_HELM_RELEASE"
"$SLOTS_HELM_CHART_DIR"
--namespace "$SLOTS_K8S_NAMESPACE_DEV"
--create-namespace
--wait
--atomic
--timeout 30m
-f "$SLOTS_HELM_CHART_DIR/values.yaml"
-f "$SLOTS_HELM_CHART_DIR/values-dev.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=dev
--set app.configLabel=dev
slots:deploy:master:
stage: deploy
extends:
- .slots:rules:deploy-master
- .slots:helm-deploy
needs:
- job: slots:package
artifacts: true
environment:
name: master/pcp-slots-service
script:
- |
if [ -n "${KUBE_CONFIG_MASTER:-}" ]; then
printf '%s' "$KUBE_CONFIG_MASTER" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_MASTER_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_MASTER_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_MASTER_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_MASTER_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_MASTER_B64 is not valid base64. Set KUBE_CONFIG_MASTER to raw kubeconfig or KUBE_CONFIG_MASTER_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_MASTER or KUBE_CONFIG_MASTER_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- 'export IMAGE_REPOSITORY="${SLOTS_IMAGE%:*}"'
- 'export IMAGE_TAG="${SLOTS_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$SLOTS_HELM_RELEASE"
"$SLOTS_HELM_CHART_DIR"
--namespace "$SLOTS_K8S_NAMESPACE_MASTER"
--create-namespace
--wait
--atomic
--timeout 30m
-f "$SLOTS_HELM_CHART_DIR/values.yaml"
-f "$SLOTS_HELM_CHART_DIR/values-master.yaml"
--set image.repository="$IMAGE_REPOSITORY"
--set image.tag="$IMAGE_TAG"
--set app.profile=master
--set app.configLabel=master
+214
View File
@@ -0,0 +1,214 @@
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
CONFIG_SERVER_SERVICE_DIR: "services/spring-cloud-config-server"
CONFIG_SERVER_HELM_CHART_DIR: "helm/spring-cloud-config-server"
CONFIG_SERVER_HELM_RELEASE: "spring-cloud-config-server"
CONFIG_SERVER_IMAGE_REPOSITORY: "$INTERNAL_REGISTRY/pcp-cloud-config-server"
CONFIG_SERVER_IMAGE_TAG: "$CI_COMMIT_SHORT_SHA"
CONFIG_SERVER_K8S_NAMESPACE_DEV: "pcp-dev"
CONFIG_SERVER_GIT_SECRET_NAME: "spring-cloud-config-server-git"
CONFIG_GIT_URI: "https://git.nstart.cloud/emelianov.an/pcp.git"
CONFIG_GIT_USERNAME: "gitlab+deploy-token-1"
CONFIG_GIT_DEFAULT_LABEL: "master"
CONFIG_GIT_SEARCH_PATHS: "config-repo"
CONFIG_GIT_SKIP_SSL_VALIDATION: "true"
.config_server_changes: &config_server_changes
- services/spring-cloud-config-server/**/*
- build.gradle.kts
- settings.gradle.kts
- .gitlab/ci/spring-cloud-config-server.yml
- helm/spring-cloud-config-server/**/*
- deploy/**/*
.config-server:rules:build-and-image:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *config_server_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *config_server_changes
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *config_server_changes
- when: never
.config-server:rules:test:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *config_server_changes
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *config_server_changes
when: manual
- if: '$CI_COMMIT_BRANCH == "master"'
changes: *config_server_changes
- when: never
.config-server:rules:deploy-dev:
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
changes: *config_server_changes
when: manual
- when: never
.config-server:gradle-cache:
cache:
key: "gradle-config-server-$CI_DEFAULT_BRANCH"
paths:
- .gradle/wrapper
- .gradle/caches
policy: pull-push
.config-server:docker-build:
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:
- docker version
- docker info
.config-server:helm-deploy:
image: repo.nstart.cloud/dtzar/helm-kubectl:3.14.0
before_script:
- mkdir -p /root/.kube
- helm version
after_script:
- rm -f /root/.kube/config
config-server:test:
stage: test
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .config-server:rules:test
- .config-server:gradle-cache
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:spring-cloud-config-server:test
artifacts:
when: always
reports:
junit:
- services/spring-cloud-config-server/build/test-results/test/*.xml
paths:
- services/spring-cloud-config-server/build/reports/tests/
expire_in: 7 days
config-server:build:
stage: build
image: repo.nstart.cloud/library/gradle:jdk17-ubi10
extends:
- .config-server:rules:build-and-image
- .config-server:gradle-cache
needs:
- job: config-server:test
artifacts: true
before_script:
- chmod +x gradlew
script:
- ./gradlew --no-daemon :services:spring-cloud-config-server:bootJar
artifacts:
when: always
paths:
- services/spring-cloud-config-server/build/libs/*.jar
expire_in: 7 days
config-server:package:
stage: package
extends:
- .config-server:rules:build-and-image
- .config-server:docker-build
needs:
- job: config-server:build
artifacts: true
script:
- 'echo "CONFIG_SERVER_IMAGE_REPOSITORY=$CONFIG_SERVER_IMAGE_REPOSITORY"'
- |
JAR_COUNT="$(find "$CONFIG_SERVER_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | wc -l)"
if [ "$JAR_COUNT" -ne 1 ]; then
echo "Expected exactly one executable jar, found: $JAR_COUNT"
find "$CONFIG_SERVER_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' -print || true
exit 1
fi
JAR_FILE="$(find "$CONFIG_SERVER_SERVICE_DIR/build/libs" -maxdepth 1 -type f -name '*.jar' ! -name '*-plain.jar' | head -n 1)"
- rm -rf docker-context
- mkdir -p docker-context/build/libs
- cp "$CONFIG_SERVER_SERVICE_DIR/Dockerfile" docker-context/Dockerfile
- cp "$JAR_FILE" docker-context/build/libs/app.jar
- find docker-context -maxdepth 4 -type f -print -exec ls -la {} \;
- docker build --file docker-context/Dockerfile --tag "$CONFIG_SERVER_IMAGE_REPOSITORY:$CONFIG_SERVER_IMAGE_TAG" docker-context
- docker push "$CONFIG_SERVER_IMAGE_REPOSITORY:$CONFIG_SERVER_IMAGE_TAG"
- printf "CONFIG_SERVER_IMAGE=%s\n" "$CONFIG_SERVER_IMAGE_REPOSITORY:$CONFIG_SERVER_IMAGE_TAG" > config-server-image.env
artifacts:
reports:
dotenv: config-server-image.env
expire_in: 7 days
config-server:deploy:dev:
stage: deploy
extends:
- .config-server:rules:deploy-dev
- .config-server:helm-deploy
needs:
- job: config-server:package
artifacts: true
environment:
name: dev/spring-cloud-config-server
script:
- |
if [ -n "${KUBE_CONFIG_DEV:-}" ]; then
printf '%s' "$KUBE_CONFIG_DEV" > /root/.kube/config
elif [ -n "${KUBE_CONFIG_DEV_B64:-}" ]; then
if printf '%s' "$KUBE_CONFIG_DEV_B64" | grep -qE '(^apiVersion:|^kind: Config|^clusters:)'; then
printf '%s' "$KUBE_CONFIG_DEV_B64" > /root/.kube/config
elif ! printf '%s' "$KUBE_CONFIG_DEV_B64" | base64 -d > /root/.kube/config; then
echo "KUBE_CONFIG_DEV_B64 is not valid base64. Set KUBE_CONFIG_DEV to raw kubeconfig or KUBE_CONFIG_DEV_B64 to base64 kubeconfig."
exit 1
fi
else
echo "KUBE_CONFIG_DEV or KUBE_CONFIG_DEV_B64 must be set."
exit 1
fi
- chmod 600 /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- |
if [ -z "${CONFIG_GIT_TOKEN:-}" ]; then
echo "CONFIG_GIT_TOKEN must be set as a GitLab CI/CD variable."
exit 1
fi
- kubectl create namespace "$CONFIG_SERVER_K8S_NAMESPACE_DEV" --dry-run=client -o yaml | kubectl apply -f -
- >
kubectl create secret generic "$CONFIG_SERVER_GIT_SECRET_NAME"
--namespace "$CONFIG_SERVER_K8S_NAMESPACE_DEV"
--from-literal=token="$CONFIG_GIT_TOKEN"
--dry-run=client
-o yaml
| kubectl apply -f -
- 'export IMAGE_REPOSITORY="${CONFIG_SERVER_IMAGE%:*}"'
- 'export IMAGE_TAG="${CONFIG_SERVER_IMAGE##*:}"'
- 'echo "Deploy image: $IMAGE_REPOSITORY:$IMAGE_TAG"'
- >
helm upgrade --install "$CONFIG_SERVER_HELM_RELEASE"
"$CONFIG_SERVER_HELM_CHART_DIR"
--namespace "$CONFIG_SERVER_K8S_NAMESPACE_DEV"
--create-namespace
--values "$CONFIG_SERVER_HELM_CHART_DIR/values.yaml"
--values "$CONFIG_SERVER_HELM_CHART_DIR/values-dev.yaml"
--set-string image.repository="$IMAGE_REPOSITORY"
--set-string image.tag="$IMAGE_TAG"
--set-string app.configGitUri="$CONFIG_GIT_URI"
--set-string app.configGitUsername="$CONFIG_GIT_USERNAME"
--set-string app.configGitDefaultLabel="$CONFIG_GIT_DEFAULT_LABEL"
--set-string app.configGitSearchPaths="$CONFIG_GIT_SEARCH_PATHS"
--set-string app.configGitSkipSslValidation="$CONFIG_GIT_SKIP_SSL_VALIDATION"
--set-string gitTokenSecret.name="$CONFIG_SERVER_GIT_SECRET_NAME"
--atomic
--wait
--timeout 15m