diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f5b1fbd2fe47fb9e8f98e390b296bf6e959275b0..953f66de520363c6dd0da6b77764d2fec98ca073 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,7 +15,7 @@ variables: CONTAINER_TAG: '${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}' stages: - # - test + - test - build - release - deploy @@ -28,26 +28,33 @@ stages: - gcloud config set compute/zone ${GCP_COMPUTE_REGION} - gcloud container clusters get-credentials ${GCP_PROJECT_ID}-gke -# run-tests: -# stage: test -# tags: -# - docker-privileged -# image: docker:${DOCKER_VERSION} -# services: -# - name: docker:${DOCKER_VERSION}-dind -# alias: containerhost -# script: -# - docker run -p 27017:27017 -d --name mongo-container --rm mongo:${MONGO_VERSION} -# - docker build -# --tag "${CONTAINER_TAG}-test" -# --target=test -# --build-arg MONGODB_URL_TEST=mongodb://containerhost:27017/todo-app -# --build-arg JWT_SECRET_TEST=my-very-secret-jwt -# "./app" -# after_script: -# - docker stop mongo-container -# - docker images -a | grep "mongo" | awk '{print $3}' | xargs docker rmi --force -# - docker image rm --force "${CONTAINER_TAG}-test" +run-tests: + stage: test + tags: + - docker-privileged + image: docker:${DOCKER_VERSION} + services: + - name: docker:${DOCKER_VERSION}-dind + alias: localhost + script: + - docker run -p 27017:27017 + --detached + --name mongo-container + --rm + --network=host + mongo:${MONGO_VERSION} + - docker build + --tag "${CONTAINER_TAG}-test" + --target=test + --network=host + --build-arg MONGODB_URL_TEST=mongodb://localhost:27017/todo-app + --build-arg JWT_SECRET_TEST=my-very-secret-jwt + --add-host=host.docker.internal:localhost + "./app" + after_script: + - docker stop mongo-container + - docker images -a | grep "mongo" | awk '{print $3}' | xargs docker rmi --force + - docker image rm --force "${CONTAINER_TAG}-test" build-image: stage: build @@ -120,10 +127,12 @@ deploy-image: when: 'always' variables: ENVIRONMENT_NAME: 'staging' + STATIC_IP: 'staging-todoapp-ip' - if: $CI_COMMIT_REF_NAME !~ /main/ when: 'always' variables: ENVIRONMENT_NAME: 'production' + STATIC_IP: 'todoapp-ip' tags: - docker image: google/cloud-sdk:${GOOGLE_CLOUD_SDK_IMAGE_VERSION} @@ -137,7 +146,8 @@ deploy-image: - DEPLOYMENT_MANIFEST=$(sed -e "s,{{image}},${IMAGE},g" ./deployment.yaml.tmpl) - echo "${DEPLOYMENT_MANIFEST}" | kubectl apply --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}" --filename - - kubectl apply -f service.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}" - - kubectl apply -f ingress.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}" + - INGRESS_MANIFEST=$(sed -e "s,{{static-ip-name}},${STATIC_IP},g" ./ingress.yaml.tmpl) + - echo "${INGRESS_MANIFEST}" | kubectl apply --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}" --filename - diff --git a/k8s-manifests/ingress.yaml b/k8s-manifests/ingress.yaml.tmpl similarity index 86% rename from k8s-manifests/ingress.yaml rename to k8s-manifests/ingress.yaml.tmpl index 675762207cbe8609b5b265db97b48d3ce8e356fb..7635067ab99bf8b02bce80d803d08e0d511c327f 100644 --- a/k8s-manifests/ingress.yaml +++ b/k8s-manifests/ingress.yaml.tmpl @@ -5,7 +5,7 @@ metadata: annotations: kubernetes.io/ingress.class: "gce" # an external load-balancer kubernetes.io/ingress.allow-http: "false" # disabling HTTP - kubernetes.io/ingress.global-static-ip-name: todoapp-ip # staging-todoapp-ip for staging + kubernetes.io/ingress.global-static-ip-name: {{static-ip-name}} # staging-todoapp-ip for staging networking.gke.io/managed-certificates: todoapp-managed-cert # defined in the infrastructure repository spec: # rules: