stages: - "Install Dependencies" - "Lint Code" - "Build Docker Image" - "Publish Docker Image" - "Deploy" "Install node_modules": image: node:16 stage: "Install Dependencies" script: - yarn --frozen-lockfile artifacts: paths: - node_modules/ "Lint JS": image: node:16 stage: "Lint Code" dependencies: - "Install node_modules" script: - yarn lint --no-fix "Build docker image": image: docker:stable stage: "Build Docker Image" tags: - docker - hawkeye dependencies: - "Install node_modules" - "Lint JS" script: # Add make support - 'apk add --no-cache make' # Build the image - 'make build-container DOCKER_REPOSITORY=$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME DOCKER_TAG=$CI_COMMIT_SHA' rules: - if: '$REGISTRY_BASE_URL != null && $DOCKER_IMAGE_NAME != null' "Publish Docker Image": image: docker:stable stage: "Publish Docker Image" tags: - docker - hawkeye dependencies: - "Build docker image" script: # Log in to the registry - 'docker login -u=$REGISTRY_USER -p=$REGISTRY_PASSWORD $REGISTRY_BASE_URL' # Push the registry images - 'docker image push $REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHA' # Clean local image - 'docker image rm $REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHA' rules: - if: '$REGISTRY_BASE_URL != null && $DOCKER_IMAGE_NAME != null' "Deploy to Production": image: bitnami/kubectl:1.23 stage: "Deploy" when: manual allow_failure: true dependencies: - "Publish Docker Image" script: - 'kubectl --kubeconfig=$K8S_CONFIG -n $K8S_NAMESPACE set image $K8S_DEPLOYMENT_TARGET $K8S_DEPLOYMENT_CONTAINER=$REGISTRY_BASE_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_SHA' rules: - if: '$K8S_CONFIG != null && $K8S_NAMESPACE != null && $K8S_DEPLOYMENT_TARGET != null && $K8S_DEPLOYMENT_CONTAINER != null && $REGISTRY_BASE_URL != null && $DOCKER_IMAGE_NAME != null'