stages: - dependencies - build - dockerize - deploy variables: NAMESPACE: sites APP_NAME: tomcode VERSION: latest MOUNT_PATH: /data STORAGE_SIZE: 128Mi URL: tomcode.io 📚 Dependencies: stage: dependencies image: node:latest cache: - key: files: - package-lock.json paths: - .npm/ - node_modules/ policy: pull-push script: - echo "Downloading dependencies..." - npm ci --cache .npm --prefer-offline - echo "Dependencies downloaded successfully." only: - main 🔨 Build: stage: build image: node:12-alpine cache: - key: files: - package-lock.json paths: - .npm/ - node_modules/ policy: pull - key: "$APP_NAME:$CI_COMMIT_REF_SLUG" paths: - build/ policy: pull-push script: - echo "Compiling the code..." - npm run build --cache .npm --prefer-offline - echo "Compile complete." 🐳 Dockerize: stage: dockerize image: docker:stable services: - docker:stable-dind variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client" cache: - key: "$APP_NAME:$CI_COMMIT_REF_SLUG" paths: - build/ policy: pull-push before_script: - echo "Logging into docker..." - docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} - echo "Login successful." script: - echo "Building docker image..." - docker build -t $DOCKER_USERNAME/$APP_NAME:latest -f ./deploy/Dockerfile . - echo "Docker image built, pushing to repository..." - docker push $DOCKER_USERNAME/$APP_NAME:latest - echo "Image successfully pushed." 🚀 Deploy: stage: deploy image: bitnami/kubectl before_script: - echo $KUBE_CONFIG | base64 -d > config - mv config ~/.kube/ - echo "Preparing deployment.yaml..." - cd deploy - sed -i "s|{{NAMESPACE}}|$NAMESPACE|g" ./deployment.yaml - sed -i "s|{{APP_NAME}}|$APP_NAME|g" ./deployment.yaml - sed -i "s|{{VERSION}}|$VERSION|g" ./deployment.yaml - sed -i "s|{{MOUNT_PATH}}|$MOUNT_PATH|g" ./deployment.yaml - sed -i "s|{{STORAGE_SIZE}}|$STORAGE_SIZE|g" ./deployment.yaml - sed -i "s|{{DOCKER_USERNAME}}|${DOCKER_USERNAME}|g" ./deployment.yaml - sed -i "s|{{URL}}|$URL|g" ./deployment.yaml - cat ./deployment.yaml - echo "Deployment prepared." script: - echo "Deploying application..." - kubectl config set-context --current --namespace=$NAMESPACE - kubectl apply -f ./deployment.yaml - kubectl rollout restart deploy $APP_NAME --namespace $NAMESPACE - echo "Application successfully deployed." only: - main