Light module deployment
Your light module project must contain a light-modules folder containing one or more light modules.
Light module structure example
custom-lightmodule
|-- README.md
|-- .gitlab-ci.yml
|-- light-modules
|-- custom-lightmodule
|-- README.md
|-- decorations
|-- dialogs
| |-- components
| |-- pages
| |-- custom-page.yaml
|-- i18n
| |-- custom-lightmodule-messages_en.properties
|-- includes
| |-- README.txt
|-- templates
| |-- components
| |-- pages
| |-- custom-page.ftl
| |-- custom-page.yaml
|-- webresources
The .gitlab-ci.yml file
Configure .gitlab-ci.yml so light-development changes are picked up and deployed.
stages:
- deploy <1>
.deploy:
image: devspacesh/devspace:6
stage: deploy
before_script:
- export KUBECONFIG=$KUBE_CONFIG <2>
deploy:base:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=base <3>
- 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 <4>
when: manual <5>
deploy:dev:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=dev <3>
- 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 <4>
when: manual <5>
deploy:uat:sync:
extends: .deploy
script:
- export KUBECTL_NAMESPACE=uat <3>
- 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 <4>
when: manual <5>
The deploy stage collects pods running author or public instances and uses the DevSpace tool to rsync light module files to the running pods.
The KUBE_CONFIG CI/CD variable should be defined as type File and hold the KubeConfig of the target cluster. The same variable can be defined in different environment scopes.
The namespace must be the same namespace the corresponding Magnolia deployment is running in.
The environment name corresponds to the environment scope (dev or prod) defined in Deployments. In different environments the same variable names can be used.
The deployment must be triggered manually.
For the Java webapp deploy path (Helm + values.yml), see Webapp deployment. For a PaaS-oriented light-modules intro, see Develop: Light modules.