Skip to content

Commit dfbd416

Browse files
committed
add helm chart
1 parent 9b0c1c7 commit dfbd416

12 files changed

Lines changed: 514 additions & 112 deletions

.github/workflows/staging.yml

Lines changed: 108 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,109 @@
11
---
2-
name: stating
3-
4-
on:
5-
push:
6-
branches:
7-
- develop
8-
9-
workflow_dispatch:
10-
11-
jobs:
12-
build:
13-
outputs:
14-
image: ${{ steps.export.outputs.image }}
15-
tag: ${{ steps.export.outputs.tag }}
16-
17-
runs-on: ubuntu-latest
18-
env:
19-
image: cranecloud/monitoring-api
20-
21-
steps:
22-
- name: Checkout
23-
uses: actions/checkout@v2
24-
25-
- name: Install (Buildx)
26-
uses: docker/setup-buildx-action@v1
27-
28-
- name: Login to Docker Hub
29-
uses: docker/login-action@v2
30-
with:
31-
username: ${{ secrets.DOCKERHUB_USERNAME }}
32-
password: ${{ secrets.DOCKERHUB_TOKEN }}
33-
34-
- id: meta
35-
name: Tag
36-
uses: docker/metadata-action@v3
37-
with:
38-
flavor: |
39-
latest=true
40-
images: ${{ env.image }}
41-
tags: |
42-
type=ref,event=branch
43-
type=ref,event=pr
44-
type=sha
45-
46-
- name: Build
47-
uses: docker/build-push-action@v2
48-
with:
49-
cache-from: type=gha
50-
cache-to: type=gha,mode=max
51-
context: .
52-
labels: ${{ steps.meta.outputs.labels }}
53-
push: true
54-
tags: ${{ steps.meta.outputs.tags }}
55-
56-
- id: export
57-
name: Export
58-
uses: actions/github-script@v5
59-
with:
60-
script: |
61-
const metadata = JSON.parse(`${{ steps.meta.outputs.json }}`)
62-
const fullUrl = metadata.tags.find((t) => t.includes(':sha-'))
63-
if (fullUrl == null) {
64-
core.error('Unable to find sha tag of image')
65-
} else {
66-
const tag = fullUrl.split(':')[1]
67-
core.setOutput('image', fullUrl)
68-
core.setOutput('tag', tag)
69-
}
70-
71-
Microservice:
72-
name: Deploy (Microservice)
73-
74-
needs:
75-
- Build
76-
77-
runs-on: ubuntu-latest
78-
env:
79-
namespace: cranecloud-microservice
80-
image: cranecloud/monitoring-api
81-
82-
steps:
83-
- name: Checkout code
84-
uses: actions/checkout@v2
85-
86-
- uses: azure/k8s-set-context@v1
87-
with:
88-
kubeconfig: ${{ secrets.RENU_KUBECONFIG}}
89-
90-
- name: Helm Release
91-
run: |
92-
helm upgrade --install --create-namespace \
93-
monitoring-api ./helm/chart \
94-
--values helm/values.micro.yaml \
95-
--namespace $namespace \
96-
--set image.tag="${{ needs.build.outputs.tag }}" \
97-
--set environment.ADMIN_MYSQL_PASSWORD="${{ secrets.STAGING_ADMIN_MYSQL_PASSWORD }}" \
98-
--set environment.ADMIN_PSQL_PASSWORD="${{ secrets.STAGING_ADMIN_PSQL_PASSWORD }}" \
99-
--set environment.APP_MAIL_PASSWORD="${{ secrets.STAGING_APP_MAIL_PASSWORD }}" \
100-
--set environment.DATABASE_URI="${{ secrets.MICROSERVICE_DATABASE_URI }}" \
101-
--set environment.MONGO_URI="${{ secrets.STAGING_MONGO_URI }}" \
102-
--set environment.FLASK_APP_SALT="${{ secrets.STAGING_FLASK_APP_SALT }}" \
103-
--set environment.FLASK_APP_SECRET="${{ secrets.STAGING_FLASK_APP_SECRET }}" \
104-
--set environment.GITHUB_CLIENT_SECRET="${{ secrets.STAGING_GITHUB_CLIENT_SECRET }}" \
105-
--set environment.NEW_RELIC_LICENSE_KEY="${{ secrets.STAGING_NEW_RELIC_LICENSE_KEY }}" \
106-
--set environment.KUBE_SERVICE_PORT="${{ secrets.STAGING_KUBE_SERVICE_PORT }}" \
107-
--set environment.LOGGER_APP_URL="${{ secrets.MICROSERVICE_LOGGER_APP_URL }}" \
108-
--timeout=300s
109-
110-
- name: Monitor Rollout
111-
run: |
112-
kubectl rollout status deployment/cranecloud-backend --timeout=300s --namespace $namespace
113-
2+
name: stating
3+
4+
on:
5+
push:
6+
branches:
7+
- develop
8+
- deploy/app
9+
10+
workflow_dispatch:
11+
12+
jobs:
13+
build:
14+
outputs:
15+
image: ${{ steps.export.outputs.image }}
16+
tag: ${{ steps.export.outputs.tag }}
17+
18+
runs-on: ubuntu-latest
19+
env:
20+
image: cranecloud/monitoring-api
21+
22+
steps:
23+
- name: Checkout
24+
uses: actions/checkout@v2
25+
26+
- name: Install (Buildx)
27+
uses: docker/setup-buildx-action@v1
28+
29+
- name: Login to Docker Hub
30+
uses: docker/login-action@v2
31+
with:
32+
username: ${{ secrets.DOCKERHUB_USERNAME }}
33+
password: ${{ secrets.DOCKERHUB_TOKEN }}
34+
35+
- id: meta
36+
name: Tag
37+
uses: docker/metadata-action@v3
38+
with:
39+
flavor: |
40+
latest=true
41+
images: ${{ env.image }}
42+
tags: |
43+
type=ref,event=branch
44+
type=ref,event=pr
45+
type=sha
46+
47+
- name: Build
48+
uses: docker/build-push-action@v2
49+
with:
50+
cache-from: type=gha
51+
cache-to: type=gha,mode=max
52+
context: .
53+
labels: ${{ steps.meta.outputs.labels }}
54+
push: true
55+
tags: ${{ steps.meta.outputs.tags }}
56+
57+
- id: export
58+
name: Export
59+
uses: actions/github-script@v5
60+
with:
61+
script: |
62+
const metadata = JSON.parse(`${{ steps.meta.outputs.json }}`)
63+
const fullUrl = metadata.tags.find((t) => t.includes(':sha-'))
64+
if (fullUrl == null) {
65+
core.error('Unable to find sha tag of image')
66+
} else {
67+
const tag = fullUrl.split(':')[1]
68+
core.setOutput('image', fullUrl)
69+
core.setOutput('tag', tag)
70+
}
71+
72+
Microservice:
73+
name: Deploy (Microservice)
74+
75+
needs:
76+
- Build
77+
78+
runs-on: ubuntu-latest
79+
env:
80+
namespace: cranecloud-microservice
81+
image: cranecloud/monitoring-api
82+
83+
steps:
84+
- name: Checkout code
85+
uses: actions/checkout@v2
86+
87+
- uses: azure/k8s-set-context@v1
88+
with:
89+
kubeconfig: ${{ secrets.RENU_KUBECONFIG}}
90+
91+
- name: Helm Release
92+
run: |
93+
helm upgrade --install --create-namespace \
94+
monitoring-api ./helm/chart \
95+
--values helm/values.micro.yaml \
96+
--namespace $namespace \
97+
--set image.tag="${{ needs.build.outputs.tag }}" \
98+
--set environment.DATABASE_URI="${{ secrets.STAGING_DATABASE_URI }}" \
99+
--set environment.DATABASE_USER="${{ secrets.STAGING_DATABASE_USER }}" \
100+
--set environment.TEST_DATABASE_URL="${{ secrets.STAGING_TEST_DATABASE_URL }}" \
101+
--set environment.FLASK_APP_SALT="${{ secrets.STAGING_FLASK_APP_SALT }}" \
102+
--set environment.FLASK_APP_SECRET="${{ secrets.STAGING_FLASK_APP_SECRET }}" \
103+
--set environment.PRODUCT_BASE_URL="${{ secrets.STAGING_PRODUCT_BASE_URL }}" \
104+
--set environment.LOGGER_APP_URL="${{ secrets.STAGING_LOGGER_APP_URL }}" \
105+
--timeout=300s
106+
107+
- name: Monitor Rollout
108+
run: |
109+
kubectl rollout status deployment/monitoring-api --timeout=300s --namespace $namespace

helm/chart/.helmignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/

helm/chart/Chart.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: v2
2+
name: cranecloud
3+
description: A Helm chart for cranecloud applications
4+
5+
# A chart can be either an 'application' or a 'library' chart.
6+
#
7+
# Application charts are a collection of templates that can be packaged into versioned archives
8+
# to be deployed.
9+
#
10+
# Library charts provide useful utilities or functions for the chart developer. They're included as
11+
# a dependency of application charts to inject those utilities and functions into the rendering
12+
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
13+
type: application
14+
15+
# This is the chart version. This version number should be incremented each time you make changes
16+
# to the chart and its templates, including the app version.
17+
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18+
version: 0.1.4
19+
20+
# This is the version number of the application being deployed. This version number should be
21+
# incremented each time you make changes to the application. Versions are not expected to
22+
# follow Semantic Versioning. They should reflect the version the application is using.
23+
appVersion: 1.16.0

helm/chart/templates/_helpers.tpl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
5+
{{- define "cranecloud.name" -}}
6+
{{- default .Release.Name .Values.nameOverride .Chart.Name | trunc 63 | trimSuffix "-" }}
7+
{{- end }}
8+
9+
10+
{{/*
11+
Create chart name and version as used by the chart label.
12+
*/}}
13+
{{- define "cranecloud.chart" -}}
14+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
15+
{{- end }}
16+
17+
{{/*
18+
Common labels
19+
*/}}
20+
{{- define "cranecloud.labels" -}}
21+
helm.sh/chart: {{ include "cranecloud.chart" . }}
22+
{{ include "cranecloud.selectorLabels" . }}
23+
{{- if .Chart.AppVersion }}
24+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
25+
{{- end }}
26+
app.kubernetes.io/managed-by: {{ .Release.Service }}
27+
{{- end }}
28+
29+
{{/*
30+
Selector labels
31+
*/}}
32+
{{- define "cranecloud.selectorLabels" -}}
33+
app: {{ include "cranecloud.name" . }}
34+
app.kubernetes.io/name: {{ include "cranecloud.name" . }}
35+
app.kubernetes.io/instance: {{ .Release.Name }}
36+
{{- end }}
37+
38+
{{/*
39+
Create the name of the service account to use
40+
*/}}
41+
{{- define "cranecloud.serviceAccountName" -}}
42+
{{- if .Values.serviceAccount.create }}
43+
{{- default (include "cranecloud.name" .) .Values.serviceAccount.name }}
44+
{{- else }}
45+
{{- default "default" .Values.serviceAccount.name }}
46+
{{- end }}
47+
{{- end }}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{{- if .Values.celery.create -}}
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: {{ include "cranecloud.name" . }}-celery
6+
labels:
7+
{{- include "cranecloud.labels" . | nindent 4 }}
8+
spec:
9+
replicas: {{ .Values.celery.replicaCount }}
10+
selector:
11+
matchLabels:
12+
{{- include "cranecloud.selectorLabels" . | nindent 6 }}
13+
strategy:
14+
rollingUpdate:
15+
maxSurge: 1
16+
maxUnavailable: 25%
17+
type: RollingUpdate
18+
template:
19+
metadata:
20+
{{- with .Values.podAnnotations }}
21+
annotations:
22+
{{- toYaml . | nindent 8 }}
23+
{{- end }}
24+
labels:
25+
{{- include "cranecloud.selectorLabels" . | nindent 8 }}
26+
spec:
27+
{{- with .Values.imagePullSecrets }}
28+
imagePullSecrets:
29+
{{- toYaml . | nindent 8 }}
30+
{{- end }}
31+
serviceAccountName: {{ include "cranecloud.serviceAccountName" . }}
32+
securityContext:
33+
{{- toYaml .Values.podSecurityContext | nindent 8 }}
34+
containers:
35+
- name: {{ include "cranecloud.name" . }}-celery
36+
securityContext:
37+
{{- toYaml .Values.securityContext | nindent 12 }}
38+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
39+
imagePullPolicy: {{ .Values.image.pullPolicy }}
40+
command: {{ .Values.celery.command | toYaml | nindent 12}}
41+
env:
42+
- name: test
43+
value: test
44+
{{- range $key, $value := .Values.environment }}
45+
- name: {{ $key }}
46+
value: {{ $value | quote }}
47+
{{- end }}
48+
ports:
49+
- name: celery-worker
50+
containerPort: {{ .Values.celery.port }}
51+
protocol: TCP
52+
resources:
53+
{{- toYaml .Values.resources | nindent 12 }}
54+
{{- end }}

0 commit comments

Comments
 (0)