landing/deploy/.gitlab-ci.yml
2024-04-30 19:08:15 +02:00

103 lines
2.7 KiB
YAML
Executable File

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