How to replace fields value of angular config.json using environment variable in kubernetes and nginx in CI &CD VSTS How to replace fields value of angular config.json using environment variable in kubernetes and nginx in CI &CD VSTS kubernetes kubernetes

How to replace fields value of angular config.json using environment variable in kubernetes and nginx in CI &CD VSTS


Use a init container to modify your config.json when the pod starts.

Updated your Deployment.yaml

    # Source: sample-web/templates/deployment.yaml    apiVersion: apps/v1    kind: Deployment    metadata:      name: cloying-rattlesnake-sample-web      labels:        app.kubernetes.io/name: sample-web        helm.sh/chart: sample-web-0.1.0        app.kubernetes.io/instance: cloying-rattlesnake        app.kubernetes.io/managed-by: Tiller    spec:      replicas: 1      selector:        matchLabels:          app.kubernetes.io/name: sample-web          app.kubernetes.io/instance: cloying-rattlesnake      template:        metadata:          labels:            app.kubernetes.io/name: sample-web            app.kubernetes.io/instance: cloying-rattlesnake        spec:          initContainers:            - name: init-myconfig              image: busybox:1.28              command: ['sh', '-c', 'cat /usr/share/nginx/html/config.json | sed -e "s#\$authenticationEndpoint#$authenticationEndpoint#g" > /tmp/config.json && cp /tmp/config.json /usr/share/nginx/html/config.json']              env:                - name: authenticationEndpoint                  value: "http://localhost:8080/security/auth"          containers:            - name: sample-web              image: "sample-web:stable"              imagePullPolicy: IfNotPresent              ports:                - name: http                  containerPort: 80                  protocol: TCP              livenessProbe:                httpGet:                  path: /                  port: http              readinessProbe:                httpGet:                  path: /                  port: http              env:                - name: authenticationEndpoint                  value: "http://localhost:8080/security/auth"              volumeMounts:                - mountPath: /usr/share/nginx/html/config.json                  name: config-volume          volumes:            - name: config-volume              hostPath:                path: /mnt/data.json # Create this file in the host where the pod starts. Content below.                type: File

Create /mnt/data.json file in the host where the pod starts

{      "authenticationEndpoint": "$authenticationEndpoint",      "authenticationClientId": "my-project",      "baseApiUrl": "http://localhost:8080/",      "homeUrl": "http://localhost:4300/"}


I have found simple solution. using shell script I am applying same command to replace the content of the config.json then start Nginx for running application. It works....

Config.json

{  "authenticationEndpoint": "$AUTHENTICATION_ENDPOINT",  "authenticationClientId": "$AUTHENTICATION_CLIENT_ID",  "baseApiUrl": "http://localhost:8080/",  "homeUrl": "http://localhost:4300/"}

setup.sh

sed -i -e 's#$AUTHENTICATION_ENDPOINT#'"$AUTHENTICATION_ENDPOINT"'#g' usr/share/nginx/html/config.jsonsed -i -e 's#$AUTHENTICATION_CLIENT_ID#'"$AUTHENTICATION_CLIENT_ID"'#g' /usr/share/nginx/html/config.jsonnginx -g 'daemon off;'