Add feature branch deployment pipeline

- Add deploy_feature job for ephemeral dev environments
- Use unique identifier (feat-{short_sha}) for K8s resource isolation
- Dynamic hostnames for ingress (orchard-{sha}.common.global.bsf.tools)
- Add cleanup_feature job with on_stop for automatic cleanup on merge
- Add values-dev.yaml with lighter resources for ephemeral deployments
- Refactor deploy_stage to use dynamic image tag from CI
This commit is contained in:
Mondo Diaz
2026-01-13 16:18:08 +00:00
parent d8352fde7c
commit 96477db51f
3 changed files with 243 additions and 20 deletions

View File

@@ -66,25 +66,78 @@ python_tests:
kubernetes:
agent: $AGENT
deploy_helm_chart:
# Deploy to stage (main branch)
deploy_stage:
stage: deploy
parallel:
matrix:
# - ENV: dev
# NAMESPACE: dev
# CHART: ./charts/chart-a
# AGENT: dev-agent
- ENV: stage
NAMESPACE: orch-stage-namespace
VALUES_FILE: "helm/orchard/values-stage.yaml"
AGENT: orchard-stage
IMAGE: git.linux-amd64-81458b3bcb5ace97109ba4c16f4afa6e55b1b8bd
# rules:
# # - if: '$CI_COMMIT_TAG && $CI_JOB_NAME == "deploy (production)"'
# # when: always
# # - if: '$CI_COMMIT_BRANCH == "main" && $CI_JOB_NAME == "deploy (stage)" && $CI_COMMIT_TAG == null'
# # when: always
# - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main" && $ENV == "dev" && $CI_COMMIT_TAG == null'
# when: always
# - when: never
variables:
ENV: stage
NAMESPACE: orch-stage-namespace
VALUES_FILE: "helm/orchard/values-stage.yaml"
AGENT: orchard-stage
IMAGE: $CI_COMMIT_SHA
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: always
<<: *deploy_template
# Deploy feature branch to dev namespace
deploy_feature:
stage: deploy
variables:
FEATURE_ID: feat-$CI_COMMIT_SHORT_SHA
ENV: feat-$CI_COMMIT_SHORT_SHA
NAMESPACE: orch-dev-namespace
VALUES_FILE: "helm/orchard/values-dev.yaml"
AGENT: orchard-dev
IMAGE: $CI_COMMIT_SHA
FEATURE_HOST: orchard-$CI_COMMIT_SHORT_SHA.common.global.bsf.tools
MINIO_HOST: minio-$CI_COMMIT_SHORT_SHA.common.global.bsf.tools
before_script:
- helm version
- helm repo add stable https://charts.helm.sh/stable
- helm repo add bitnami https://charts.bitnami.com/bitnami
- cd helm/orchard
- helm dependency update
- helm repo update
script:
- echo "Deploying feature branch to $ENV environment"
- |
helm upgrade --install orchard-$FEATURE_ID ./helm/orchard \
--namespace $NAMESPACE \
-f $VALUES_FILE \
--set image.tag=$IMAGE \
--set ingress.hosts[0].host=$FEATURE_HOST \
--set ingress.tls[0].hosts[0]=$FEATURE_HOST \
--set ingress.tls[0].secretName=orchard-$FEATURE_ID-tls \
--set minioIngress.host=$MINIO_HOST \
--set minioIngress.tls.secretName=minio-$FEATURE_ID-tls
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://orchard-$CI_COMMIT_SHORT_SHA.common.global.bsf.tools
on_stop: cleanup_feature
kubernetes:
agent: $AGENT
rules:
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'
when: always
# Cleanup feature branch deployment
cleanup_feature:
stage: deploy
variables:
FEATURE_ID: feat-$CI_COMMIT_SHORT_SHA
NAMESPACE: orch-dev-namespace
AGENT: orchard-dev
image: deps.global.bsf.tools/registry-1.docker.io/alpine/k8s:1.29.12
script:
- echo "Cleaning up feature deployment orchard-$FEATURE_ID"
- helm uninstall orchard-$FEATURE_ID --namespace $NAMESPACE || true
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stop
kubernetes:
agent: $AGENT
rules:
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "main"'
when: manual
allow_failure: true