From 5a946549a4bbcddeb1ed7d825025d62330772bc3 Mon Sep 17 00:00:00 2001 From: saeid_01 Date: Wed, 25 Oct 2023 22:06:40 +0330 Subject: [PATCH] feat: add cicd config --- .drone.yml | 128 ++++++++++++++++++++++++++++++++++ .values.yaml | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 29 ++++++++ nginx.conf | 30 ++++++++ 4 files changed, 376 insertions(+) create mode 100644 .drone.yml create mode 100644 .values.yaml create mode 100644 Dockerfile create mode 100644 nginx.conf diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..9f779c9 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,128 @@ +kind: pipeline +type: kubernetes +name: Cssd Front cicd + + +clone: + disable: true + +# npm config set _auth token add command +steps: + - name: clone + image: docker-proxy.willaspace.com/alpine/git + commands: + - git clone $DRONE_GIT_HTTP_URL . + - git checkout $DRONE_COMMIT + + - name: Build docker image + image: docker-proxy.willaspace.com/plugins/docker:latest + environment: + REGISTRY_TOKEN: + from_secret: registry_token + REGISTRY_PROXY: + from_secret: registry_npm_proxy + settings: + tags: + - latest + - v.${DRONE_BUILD_NUMBER} + dockerfile: Dockerfile + registry: docker.willaspace.com + repo: docker.willaspace.com/repository/docker-hosted/cssd/cssd-front + build_args_from_env: + - REGISTRY_TOKEN + - REGISTRY_PROXY + username: + from_secret: registry_username + password: + from_secret: registry_password + when: + branch: + - master + event: + - pull_request + - push + +# # Define deploy step using Helm chart + - name: deploy + image: docker-proxy.willaspace.com/pelotech/drone-helm3:latest + environment: + USERNAME: + from_secret: registry_username + PASSWORD: + from_secret: registry_password + settings: + mode: upgrade + kube_api_server: + from_secret: kubernates_api + kube_token: + from_secret: kubernates_token + skip_tls_verify: true + chart: willaspace/application-front + debug: true + release: cssd-front + namespace: cssd + add_repos: + - willaspace=https://$USERNAME:$PASSWORD@repo.willaspace.com/repository/willaspace-charts/ + values_files: + - .values.yaml + values: + - deployment.image.tag=v.$DRONE_BUILD_NUMBER + timeout: 3000 + when: + branch: + - master + event: + - pull_request + - push + +image_pull_secrets: + - regcred + +--- +kind: secret +name: regcred +get: + path: regcred + name: .dockerconfigjson + +--- +kind: secret +name: registry_npm_proxy +get: + path: global-variables-drone-secrets + name: registry_npm_proxy + +--- +kind: secret +name: registry_token +get: + path: global-variables-drone-secrets + name: registry_token + +--- +kind: secret +name: registry_username +get: + path: global-variables-drone-secrets + name: registry_username + +--- +kind: secret +name: registry_password +get: + path: global-variables-drone-secrets + name: registry_password + +--- +kind: secret +name: kubernates_api +get: + path: global-variables-drone-secrets + name: kubernates_api + +--- +kind: secret +name: kubernates_token +get: + path: global-variables-drone-secrets + name: kubernates_token \ No newline at end of file diff --git a/.values.yaml b/.values.yaml new file mode 100644 index 0000000..3d1db7f --- /dev/null +++ b/.values.yaml @@ -0,0 +1,189 @@ +# -- Same as nameOverride but for the namespace. +namespaceOverride: "cssd" + +# -- Same as nameOverride but for the component. +componentOverride: "" + +# -- Same as nameOverride but for the partOf. +partOfOverride: "" + +########################################################## +# Name of the application. +########################################################## +applicationName: "cssd-front" + +########################################################## +# Deployment +########################################################## +deployment: + + enabled: true + # By default deploymentStrategy is set to rollingUpdate with maxSurge of 25% and maxUnavailable of 25% + # You can change type to `Recreate` or can uncomment `rollingUpdate` specification and adjust them to your usage. + strategy: + type: RollingUpdate + # rollingUpdate: + # maxSurge: 25% + # maxUnavailable: 25% + + # Additional labels for Deployment + additionalLabels: + # key: value + + + # Annotations on deployments + annotations: + + + # Replicas to be created + replicas: 1 + + revisionHistoryLimit: 5 + + imagePullSecrets: "regcred" + + # If want to mount Envs from configmap or secret + envFrom: + # production-cm: + # type: configmap + # nameSuffix: my-configmap + # logging-config: + # type: configmap + # nameSuffix: your-configmap + # postgres-config: + # type: secret + # nameSuffix: postgres + + # Environment variables to be passed to the app container + env: + # ENVIRONMENT: + # value: "dev" + # FREQUENCY: + # valueFrom: + # configMapKeyRef: + # name: config + # key: frequency + + + # Image of the app container + image: + repository: docker.willaspace.com/repository/docker-hosted/cssd/cssd-front + tag: 'latest' + digest: '' # if set to a non empty value, digest takes precedence on the tag + pullPolicy: IfNotPresent + + + # Resources to be defined for pod + resources: + limits: + memory: 256Mi + cpu: 0.5 + requests: + memory: 128Mi + cpu: 0.1 + + +########################################################## +# Service object for servicing pods +########################################################## +service: + enabled: true + additionalLabels: + # expose: "true" + + annotations: + # config.xposer.stakater.com/Domain: stakater.com + # config.xposer.stakater.com/IngressNameTemplate: '{{ "{{.Service}}-{{.Namespace}}" }}' + # config.xposer.stakater.com/IngressURLPath: / + # config.xposer.stakater.com/IngressURLTemplate: '{{ "{{.Service}}.{{.Namespace}}.{{.Domain}}" }}' + # service.alpha.openshift.io/serving-cert-secret-name: | + # '{{ template "application.name" . }}-tls' + # xposer.stakater.com/annotations: |- + # kubernetes.io/ingress.class: external-ingress + # ingress.kubernetes.io/rewrite-target: / + # ingress.kubernetes.io/force-ssl-redirect: true + + ports: + - port: 80 + name: http + protocol: TCP + targetPort: 80 + type: LoadBalancer + +########################################################## +# Pod disruption budget - PDB +########################################################## +pdb: + enabled: false + minAvailable: 1 +# maxUnavailable: 1 + +########################################################## +# Ingress object for exposing services +########################################################## +ingress: + enabled: true + + # Name of the ingress class + ingressClassName: 'nginx' + + # Port of the service that serves pods + servicePort: http + + #Set pathType: default is ImplementationSpecific; Options: Exact, Prefix + pathType: ImplementationSpecific + + # List of host addresses to be exposed by this Ingress + hosts: + - host: app.cssd-doc.com + # paths: + # - path: / + # pathType: '' + # serviceName: '' + # servicePort: '' + # Additional labels for this Ingress + additionalLabels: + + # Add annotations to this Ingress + annotations: + # kubernetes.io/ingress.class: external-ingress + # ingress.kubernetes.io/rewrite-target: / + # ingress.kubernetes.io/force-ssl-redirect: true + + # TLS details for this Ingress + tls: + # Secrets must be manually created in the namespace. + - secretName: cssd-doc-com-certificate + hosts: + - app.cssd.com + +########################################################## +# HPA - Horizontal Pod Autoscaling +########################################################## +autoscaling: + # enabled is a boolean flag for enabling or disabling autoscaling + enabled: false + # additionalLabels defines additional labels + additionalLabels: + # key: value + # annotations defines annotations in key value pair + annotations: + # key: value + # minReplicas sets the minimum number of replicas + minReplicas: 1 + # maxReplicas sets the maximum number of replicas + maxReplicas: 10 + # metrics is the list of metrics used for hpa + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 60 + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: 60 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..87d4ac1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Build Stage +FROM docker.willaspace.com/repository/docker-hosted/node:14 as build-stage + +ARG REGISTRY_TOKEN + +ARG REGISTRY_PROXY + +WORKDIR /app + +COPY package*.json ./ + +RUN npm config set registry=$REGISTRY_PROXY + +RUN npm config set //repo.willaspace.com/repository/npm-proxy/:_auth=$REGISTRY_TOKEN + +RUN npm install + +COPY ./ . + +RUN npm run build + +# production stage +FROM docker.willaspace.com/repository/docker-hosted/nginx as production-stage + +RUN mkdir /app + +COPY --from=build-stage /app/dist /app + +COPY nginx.conf /etc/nginx/nginx.conf \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..385df25 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,30 @@ +user nginx; +worker_processes 1; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; +events { + worker_connections 1024; +} +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + server { + listen 80; + server_name localhost; + location / { + root /app; + index index.html; + try_files $uri $uri/ /index.html; + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + } +} \ No newline at end of file