stages: - test - build - deploy test: stage: test image: python:3.11 before_script: - pip install -r requirements.txt script: - PYTHONPATH=. pytest --cov=. --cov-report=term-missing build_docker_image: stage: build image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] script: - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - /kaniko/executor --context "$CI_PROJECT_DIR" --dockerfile "$CI_PROJECT_DIR/Dockerfile" --destination "$CI_REGISTRY_IMAGE:latest" --destination "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" deploy_stage: stage: deploy tags: - manifests-runner image: name: bitnami/kubectl:latest entrypoint: [""] before_script: - mkdir -p ~/.kube - echo "$KUBECONFIGCONTENT" > ~/.kube/config - chmod 600 ~/.kube/config script: - kubectl apply -f manifests/stage/ - kubectl set image deployment/flask-app flask-app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n stage - kubectl rollout status deployment/flask-app -n stage environment: name: stage rules: - if: '$CI_COMMIT_BRANCH == "main"' deploy_production: stage: deploy tags: - manifests-runner image: name: bitnami/kubectl:latest entrypoint: [""] before_script: - mkdir -p ~/.kube - echo "$KUBECONFIGCONTENT" > ~/.kube/config - chmod 600 ~/.kube/config script: - kubectl apply -f manifests/prod/ - kubectl set image deployment/flask-app flask-app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n prod - kubectl rollout status deployment/flask-app -n prod environment: name: production rules: - if: '$CI_COMMIT_BRANCH == "main"' when: manual