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;'