103 lines
2.7 KiB
YAML
Executable File
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 |