Goals- Learn how to set up the light-module project
- Know the PaaS light project structure
- Learn how to create a gitlab-ci per each environment
Code structure
- The light module project must contain a '
light-modules'
folder. - The light module project must contain a '
.gitlab-ci.yml'
file.
training-light-modules
├── .gitlab-ci.yml
└── light-modules
└── example-module
├── README.md
├── apps
├── contentTypes
├── decorations
├── dialogs
├── i18n
├── includes
├── templates
└── webresources
gitlab-ci
stages:
- deploy
.deploy:
image: devspacesh/devspace:6
stage: deploy
before_script:
- export KUBECONFIG=$KUBE_CONFIG
deploy:<environment>:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=<environment>
- export LIGHT_MODULES_CONTAINER_PATH=/mgnl-home/modules
- kubectl -n $KUBECTL_NAMESPACE get pods -l "release=$KUBECTL_NAMESPACE,tier=app" -o name | sed 's/^pod\///' > pods.txt
- cat pods.txt
- >
for pod in `cat pods.txt`; do
devspace sync --path light-modules/:$LIGHT_MODULES_CONTAINER_PATH -n $KUBECTL_NAMESPACE --pod $pod -c $KUBECTL_NAMESPACE --initial-sync mirrorLocal --no-watch --upload-only
done
environment:
name:dev
when: manual
Stages (deploy)
- Phase in the CI/CD process
- It's possible to add more phases
.deploy
- Reusable job definition that contains common configurations for deployment jobs
- You can extend and customise it for each deployment environment without duplicating code
- Set the Kubernetes context
.deploy:
image: devspacesh/devspace:6
stage: deploy
before_script:
- export KUBECONFIG=$KUBE_CONFIG
deploy:<environment>:sync
- deploy jobs for different environments
- Each of them extends the .deploy job
- Synchronise the modules in the application pods in the corresponding environment.
'When'
is set to "manual
", so must be started manually.
deploy:<environment>:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=<environment>
- export LIGHT_MODULES_CONTAINER_PATH=/mgnl-home/modules
- kubectl -n $KUBECTL_NAMESPACE get pods -l "release=$KUBECTL_NAMESPACE,tier=app" -o name | sed 's/^pod\///' > pods.txt
- cat pods.txt
- >
for pod in `cat pods.txt`; do
devspace sync --path light-modules/:$LIGHT_MODULES_CONTAINER_PATH -n $KUBECTL_NAMESPACE --pod $pod -c $KUBECTL_NAMESPACE --initial-sync mirrorLocal --no-watch --upload-only
done
environment:
name:<environment>
when: manual
Example gitla-ci for different environments
stages:
- deploy
.deploy:
image: devspacesh/devspace:6
stage: deploy
before_script:
- export KUBECONFIG=$KUBE_CONFIG
deploy:base:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=base
- export LIGHT_MODULES_CONTAINER_PATH=/mgnl-home/modules
- kubectl -n $KUBECTL_NAMESPACE get pods -l "release=$KUBECTL_NAMESPACE,tier=app" -o name | sed 's/^pod\///' > pods.txt
- cat pods.txt
- >
for pod in `cat pods.txt`; do
devspace sync --path light-modules/:$LIGHT_MODULES_CONTAINER_PATH -n $KUBECTL_NAMESPACE --pod $pod -c $KUBECTL_NAMESPACE --initial-sync mirrorLocal --no-watch --upload-only
done
environment:
name: dev
when: manual
deploy:dev:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=dev
- export LIGHT_MODULES_CONTAINER_PATH=/mgnl-home/modules
- kubectl -n $KUBECTL_NAMESPACE get pods -l "release=$KUBECTL_NAMESPACE,tier=app" -o name | sed 's/^pod\///' > pods.txt
- cat pods.txt
- >
for pod in `cat pods.txt`; do
devspace sync --path light-modules/:$LIGHT_MODULES_CONTAINER_PATH -n $KUBECTL_NAMESPACE --pod $pod -c $KUBECTL_NAMESPACE --initial-sync mirrorLocal --no-watch --upload-only
done
environment:
name: dev
when: manual
deploy:uat:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=uat
- export LIGHT_MODULES_CONTAINER_PATH=/mgnl-home/modules
- kubectl -n $KUBECTL_NAMESPACE get pods -l "release=$KUBECTL_NAMESPACE,tier=app" -o name | sed 's/^pod\///' > pods.txt
- cat pods.txt
- >
for pod in `cat pods.txt`; do
devspace sync --path light-modules/:$LIGHT_MODULES_CONTAINER_PATH -n $KUBECTL_NAMESPACE --pod $pod -c $KUBECTL_NAMESPACE --initial-sync mirrorLocal --no-watch --upload-only
done
environment:
name: dev
when: manual