adding dual deployment gitlab-ci (#402)

* adding dual deployment gitlab-ci

* adding the vault tempalte to the build stages

* fix typo

Co-authored-by: James Wilson <james@jsdw.me>

* fix typo

Co-authored-by: James Wilson <james@jsdw.me>

* adding variables to deploy-production stage

* fix

Co-authored-by: James Wilson <james@jsdw.me>
This commit is contained in:
arshamparity
2021-09-21 11:45:37 +03:00
committed by GitHub
parent e0ad18a5ad
commit 0bf1968fa3
+137 -45
View File
@@ -1,17 +1,60 @@
# 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: variables:
BACKEND_CONTAINER_REPO: "docker.io/parity/substrate-telemetry-backend" # Build Variables (Mandatory)
FRONTEND_CONTAINER_REPO: "docker.io/parity/substrate-telemetry-frontend" CONTAINER_REPO: ""
BACKEND_IMAGE_FULL_NAME: "${BACKEND_CONTAINER_REPO}:${CI_COMMIT_SHORT_SHA}-beta" DOCKERFILE_DIRECTORY: ""
FRONTEND_IMAGE_FULL_NAME: "${FRONTEND_CONTAINER_REPO}:${CI_COMMIT_SHORT_SHA}-beta"
KUBE_NAMESPACE: "substrate-telemetry" # Deploy Variables (Mandatory)
HELM_NAMESPACE: "substrate-telemetry"
HELM_RELEASE_NAME: "substrate-telemetry"
HELM_CHART: "parity/substrate-telemetry"
# Deploy Variables (Optional)
HELM_REPO_NAME: "parity"
HELM_REPO_URL: "https://paritytech.github.io/helm-charts/"
HELM_CONFIGMAP_NAME: "helm-custom-values"
HELM_CONFIGMAP_KEYNAME: "values-parity.yaml"
# 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)
# Vault variables (Optional)
VAULT_SERVER_URL: "https://vault.parity-mgmt-vault.parity.io" VAULT_SERVER_URL: "https://vault.parity-mgmt-vault.parity.io"
VAULT_AUTH_PATH: "gitlab-parity-io-jwt" VAULT_AUTH_PATH: "gitlab-parity-io-jwt"
VAULT_AUTH_ROLE: "cicd_gitlab_parity_${CI_PROJECT_NAME}" VAULT_AUTH_ROLE: "cicd_gitlab_parity_${CI_PROJECT_NAME}"
stages:
- dockerize
- staging
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
stages:
- build
- deploy-staging
- deploy-production
# Pipeline Job Templates:
.vault-secrets: &vault-secrets .vault-secrets: &vault-secrets
secrets: secrets:
DOCKER_HUB_USER: DOCKER_HUB_USER:
@@ -22,65 +65,114 @@ stages:
file: false file: false
.dockerize: &dockerize .dockerize: &dockerize
stage: dockerize stage: build
image: quay.io/buildah/stable image: quay.io/buildah/stable
script:
- |-
echo building "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
if [[ $BUILD_LATEST_IMAGE ]]; then
buildah bud \
--format=docker \
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" \
--tag "$CONTAINER_REPO:latest" "$DOCKERFILE_DIRECTORY"
else
buildah bud \
--format=docker \
--tag "$CONTAINER_REPO:$DOCKER_IMAGE_TAG" "$DOCKERFILE_DIRECTORY"
fi
- echo ${DOCKER_HUB_PASS} |
buildah login --username ${DOCKER_HUB_USER} --password-stdin docker.io
- |-
echo pushing "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
if [[ $BUILD_LATEST_IMAGE ]]; then
buildah push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
buildah push --format=v2s2 "$CONTAINER_REPO:latest"
else
buildah push --format=v2s2 "$CONTAINER_REPO:$DOCKER_IMAGE_TAG"
fi
rules: rules:
- if: '$CI_COMMIT_BRANCH == "master"' - 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 when: always
tags: tags:
- kubernetes-parity-build - kubernetes-parity-build
.deploy-k8s: &deploy-k8s .deploy: &deploy
image: paritytech/kubetools:3.5.3 image: paritytech/kubetools:3.5.3
script: script:
- |- - |-
helm repo add parity https://paritytech.github.io/helm-charts/ echo generating an empty custom-values.yaml file
touch custom-values.yaml
- |-
echo fetching the custom values file from the configmap if HELM_CONFIGMAP_NAME is specified
if [[ $HELM_CONFIGMAP_NAME ]]; then
# escape dot characters
HELM_CONFIGMAP_KEYNAME=`echo $HELM_CONFIGMAP_KEYNAME | sed 's/\./\\./g'`
kubectl get cm $HELM_CONFIGMAP_NAME -n $HELM_NAMESPACE -o jsonpath="{.data.$HELM_CONFIGMAP_KEYNAME}" \
> custom-values.yaml
fi
- |-
echo adding the helm repository if HELM_REPO_URL is specified
if [[ $HELM_REPO_URL ]]; then
helm repo add $HELM_REPO_NAME $HELM_REPO_URL
helm repo update helm repo update
kubectl get cm helm-custom-values -n $KUBE_NAMESPACE -o jsonpath='{.data.values-parity\.yaml}' > values-parity.yaml fi
- echo installing the helm chart
- helm upgrade - helm upgrade
--install --install
--atomic --atomic
--timeout 120s --timeout 120s
--create-namespace --namespace $HELM_NAMESPACE
--namespace $KUBE_NAMESPACE --values custom-values.yaml
--set image.backend.repository="${BACKEND_CONTAINER_REPO}" --set image.backend.repository="${CONTAINER_REPO_BACKEND}"
--set image.backend.tag="${CI_COMMIT_SHORT_SHA}-beta" --set image.backend.tag="${DOCKER_IMAGE_TAG}"
--set image.frontend.repository="${FRONTEND_CONTAINER_REPO}" --set image.frontend.repository="${CONTAINER_REPO_FRONTEND}"
--set image.frontend.tag="${CI_COMMIT_SHORT_SHA}-beta" --set image.frontend.tag="${DOCKER_IMAGE_TAG}"
--values values-parity.yaml ${HELM_RELEASE_NAME} ${HELM_CHART}
$KUBE_NAMESPACE parity/substrate-telemetry
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: on_success
tags: tags:
- kubernetes-parity-build - kubernetes-parity-build
dockerize-backend:
# Pipeline Jobs:
build-backend:
variables:
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-backend"
DOCKERFILE_DIRECTORY: "./backend/"
<<: *dockerize <<: *dockerize
<<: *vault-secrets <<: *vault-secrets
script:
- echo "Building image $BACKEND_IMAGE_FULL_NAME"
- buildah bud
--format=docker
--tag "$BACKEND_IMAGE_FULL_NAME" ./backend/
- echo ${DOCKER_HUB_PASS} |
buildah login --username ${DOCKER_HUB_USER} --password-stdin docker.io
- buildah push --format=v2s2 "$BACKEND_IMAGE_FULL_NAME"
dockerize-frontend: build-frontend:
variables:
CONTAINER_REPO: "docker.io/parity/substrate-telemetry-frontend"
DOCKERFILE_DIRECTORY: "./frontend/"
<<: *dockerize <<: *dockerize
<<: *vault-secrets <<: *vault-secrets
script:
- echo "Building image $FRONTEND_IMAGE_FULL_NAME"
- buildah bud
--format=docker
--tag "$FRONTEND_IMAGE_FULL_NAME" ./frontend/
- echo ${DOCKER_HUB_PASS} |
buildah login --username ${DOCKER_HUB_USER} --password-stdin docker.io
- buildah push --format=v2s2 "$FRONTEND_IMAGE_FULL_NAME"
deploy-parity-stg: deploy-staging:
stage: staging variables:
<<: *deploy-k8s CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
stage: deploy-staging
<<: *deploy
environment: environment:
name: parity-stg name: parity-stg
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
#deploy-production:
# variables:
# CONTAINER_REPO_BACKEND: "docker.io/parity/substrate-telemetry-backend"
# CONTAINER_REPO_FRONTEND: "docker.io/parity/substrate-telemetry-frontend"
# stage: deploy-production
# <<: *deploy
# environment:
# name: parity-prod
# rules:
# - if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+.*$/' # i.e. v1.0, v2.1rc1
# when: manual
# - if: '$FORCE_DEPLOY == "true"'
# when: manual