Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4.84 KiB
workflow:
  rules:
    - if: >-
        $CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: always
    - when: never

variables:
  DOCKER_VERSION: '20.10.17'
  MONGO_VERSION: '4.4'
  K8S_NAMESPACE: 'todoapp-devops'
  GOOGLE_CLOUD_SDK_IMAGE_VERSION: '400.0.0'
  GCP_COMPUTE_REGION: 'europe-west4a'
  CONTAINER_TAG: '${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}'

stages:
  - test
  - build
  - release
  - deploy

.gke-initialization:
    before_script:
    - echo $BASE64_GOOGLE_CREDENTIALS | base64 -d > ~/service_account.json
    - gcloud auth activate-service-account --key-file ~/service_account.json
    - gcloud config set project ${GCP_PROJECT_ID}
    - gcloud config set compute/zone ${GCP_COMPUTE_REGION}
    - gcloud container clusters get-credentials ${GCP_PROJECT_ID}-gke

run-tests:
  stage: test
  tags:
    # - docker-privileged
    - docker
  # image: docker:${DOCKER_VERSION}
  image:  node:16.17.0-alpine
  # services:
  #   - name: docker:${DOCKER_VERSION}-dind
  script:
    - docker run -p 27017:27017 -d --name mongo-container --rm --add-host=host.docker.internal:host-gateway mongo:${MONGO_VERSION}
    - docker build
      --tag "${CONTAINER_TAG}-test"
      --target=test
      "./app"
    # - echo ‘http://dl-cdn.alpinelinux.org/alpine/v3.6/main’ >> /etc/apk/repositories
    # - echo ‘http://dl-cdn.alpinelinux.org/alpine/v3.6/community’ >> /etc/apk/repositories
    # - apk update
    # - apk add mongodb mongodb-tools
    # - mkdir -p /data/db/
    # - mongod --config "./app/server/dev.mongo.conf"
    # - cd "./app/client"
    # - npm ci --no-audit --no-fund
    # - npm run test
    # - cd "../server"
    # - npm ci --no-audit --no-fund
    # - MONGODB_URL=mongodb://localhost:27017/todo-app JWT_SECRET=a-big-secret npm run test
    # - jest --ci
  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
  needs:
    - 'run-tests'
  tags:
    - docker-privileged
  image: docker:${DOCKER_VERSION}
  services: