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
.gitlab-ci.yml
stages:
  - deploy 


.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 
  • No labels