Files
pezkuwi-telemetry/.gitlab-ci.yml
T
2024-02-08 19:49:20 +04:00

214 lines
7.3 KiB
YAML

# Gitlab-CI Workflow
# stages:
# build:
# - Runs on commits on master or tags that match the pattern "v[0-9]+\.[0-9]+.*$". (e.g. 1.0, v2.1rc1)
# deploy-staging:
# - Runs on commits on master or tags that match the pattern v1.0, v2.1rc1 (continues deployment)
# deploy-production:
# - Runs on tags that match the pattern v1.0, v2.1rc1 (manual deployment)
variables:
# Build Variables (Mandatory)
CONTAINER_REPO: ""
DOCKERFILE_DIRECTORY: ""
# Manual Variables (Optional)
## Could be used in the webconsole when triggering the pipeline manually
## DO NOT SET THEM IN THIS FILE!! They've been mentioned here only for documentation purposes!
FORCE_DEPLOY: "" # boolean: true or false - triggers the deploy-production stage
FORCE_DOCKER_TAG: "" # choose an existing docker tag to be deployed (e.g. v1.2.3)
BUILDAH_IMAGE: "quay.io/buildah/stable:v1.29"
BUILDAH_COMMAND: "buildah --storage-driver overlay2"
default:
before_script:
- |-
echo defining DOCKER_IMAGE_TAG variable
if [[ $FORCE_DOCKER_TAG ]]; then
export DOCKER_IMAGE_TAG="${FORCE_DOCKER_TAG}"
elif [[ $CI_COMMIT_TAG =~ ^v[0-9]+\.[0-9]+.*$ ]]; then
export DOCKER_IMAGE_TAG="${CI_COMMIT_TAG}"
export BUILD_LATEST_IMAGE="true"
else
export DOCKER_IMAGE_TAG="${CI_COMMIT_SHORT_SHA}-beta"
fi
retry:
max: 2
when:
- runner_system_failure
- unknown_failure
- api_failure
stages:
- build
- deploy-commit-to-staging
- deploy-master-to-staging
- deploy-production
# Pipeline Job Templates:
.dockerize: &dockerize
stage: build
image: $BUILDAH_IMAGE
script:
- |-
echo building "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
if [[ $BUILD_LATEST_IMAGE ]]; then
$BUILDAH_COMMAND build \
--format=docker \
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" \
--tag "$CONTAINER_REPO:latest" "$DOCKERFILE_DIRECTORY"
else
$BUILDAH_COMMAND build \
--format=docker \
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" "$DOCKERFILE_DIRECTORY"
fi
- echo ${DOCKER_PASSWORD} |
buildah login --username ${DOCKER_USERNAME} --password-stdin docker.io
- |-
echo pushing "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
if [[ $BUILD_LATEST_IMAGE ]]; then
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:latest"
else
$BUILDAH_COMMAND push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
fi
rules:
- if: '$FORCE_DOCKER_TAG'
when: never
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
when: always
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: always
tags:
- kubernetes-parity-build
.publish-docker-image-description:
stage: build
image: paritytech/dockerhub-description
before_script:
- echo
variables:
DOCKERHUB_REPOSITORY: parity/substrate-telemetry-$PRODUCT
DOCKER_USERNAME: $Docker_Hub_User_Parity
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
README_FILEPATH: $CI_PROJECT_DIR/$PRODUCT/Dockerfile.README.md
rules:
- if: $CI_COMMIT_REF_NAME == "master"
changes:
- $PRODUCT/Dockerfile.README.md
script:
- cd / && sh entrypoint.sh
tags:
- kubernetes-parity-build
.deploy: &deploy
image: quay.io/argoproj/argocd:v2.7.9
variables:
ARGOCD_OPTS: --grpc-web --grpc-web-root-path /$ENVIRONMENT
APP: substrate-telemetry
environment:
name: $ENVIRONMENT
script:
- argocd app list
- argocd app set $APP
--helm-set substrate-telemetry.image.backend.repository="${CONTAINER_REPO_BACKEND}"
--helm-set substrate-telemetry.image.backend.tag="${DOCKER_IMAGE_TAG}"
--helm-set substrate-telemetry.image.frontend.repository="${CONTAINER_REPO_FRONTEND}"
--helm-set substrate-telemetry.image.frontend.tag="${DOCKER_IMAGE_TAG}"
- argocd app sync $APP
- argocd app wait $APP --timeout 180
tags:
- kubernetes-parity-build
# Pipeline Jobs:
build-backend:
variables:
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-backend"
DOCKERFILE_DIRECTORY: "./backend/"
DOCKER_USERNAME: $Docker_Hub_User_Parity
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
<<: *dockerize
build-frontend:
variables:
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-frontend"
DOCKERFILE_DIRECTORY: "./frontend/"
DOCKER_USERNAME: $Docker_Hub_User_Parity
DOCKER_PASSWORD: $Docker_Hub_Pass_Parity
<<: *dockerize
publish-backend-docker-image-description:
extends: .publish-docker-image-description
variables:
PRODUCT: backend
SHORT_DESCRIPTION: "substrate-backend Docker Image."
publish-frontend-docker-image-description:
extends: .publish-docker-image-description
variables:
PRODUCT: frontend
SHORT_DESCRIPTION: "substrate-frontend Docker Image."
# Manually build the docker images and deploy some commit to staging.
build-backend-manual:
variables:
CONTAINER_REPO: "docker.io/paritypr/substrate-telemetry-backend"
DOCKERFILE_DIRECTORY: "./backend/"
DOCKER_USERNAME: $PARITYPR_USER
DOCKER_PASSWORD: $PARITYPR_PASS
<<: *dockerize
rules:
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
when: manual
build-frontend-manual:
variables:
CONTAINER_REPO: "docker.io/paritypr/substrate-telemetry-frontend"
DOCKERFILE_DIRECTORY: "./frontend/"
DOCKER_USERNAME: $PARITYPR_USER
DOCKER_PASSWORD: $PARITYPR_PASS
<<: *dockerize
rules:
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
when: manual
deploy-commit-to-staging:
variables:
CONTAINER_REPO_BACKEND: "docker.io/paritypr/substrate-telemetry-backend"
CONTAINER_REPO_FRONTEND: "docker.io/paritypr/substrate-telemetry-frontend"
ENVIRONMENT: "parity-stg"
stage: deploy-commit-to-staging
extends: .deploy
rules:
- if: '$CI_COMMIT_BRANCH =~ /^[0-9]+/'
when: manual
# Automatically deploy `master` branch or tag like `v1.0` to staging
deploy-master-to-staging:
variables:
CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
ENVIRONMENT: "parity-stg"
stage: deploy-master-to-staging
extends: .deploy
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
# Manually deploy a tag like `v1.0` to production
deploy-production:
variables:
CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
ENVIRONMENT: "parity-prod"
stage: deploy-production
extends: .deploy
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
when: manual
- if: '$FORCE_DEPLOY == "true"'
when: manual