Initial setup of environment service

This commit is contained in:
2024-01-13 21:20:09 -05:00
parent bacc7c1c67
commit b5f2a6b535
22 changed files with 892 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
name: $(Rev:r)
pr: none
trigger:
batch: 'true'
branches:
include:
- master
paths:
include:
- Environment/Service
stages:
- stage: Build
jobs:
- job: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Docker@0
displayName: 'Build an image'
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryConnection: 'Docker Hub'
dockerFile: 'Environment/Service/Dockerfile'
imageName: 'ckaczor/home-monitor-environment-service:$(Build.BuildNumber)'
includeLatestTag: true
- task: Docker@0
displayName: 'Push an image'
inputs:
containerregistrytype: 'Container Registry'
dockerRegistryConnection: 'Docker Hub'
action: 'Push an image'
imageName: 'ckaczor/home-monitor-environment-service:$(Build.BuildNumber)'
includeLatestTag: true
- task: Bash@3
inputs:
targetType: 'inline'
script: 'sed -i s/#BUILD_BUILDNUMBER#/$BUILD_BUILDNUMBER/ Environment/Service/deploy/manifest.yaml'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'Environment/Service/deploy/manifest.yaml'
ArtifactName: 'Manifest'
publishLocation: 'Container'
- stage: Deploy
jobs:
- job: Deploy
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadBuildArtifacts@0
inputs:
artifactName: 'Manifest'
buildType: 'current'
downloadType: 'single'
downloadPath: '$(System.ArtifactsDirectory)'
- task: Kubernetes@1
inputs:
connectionType: 'Kubernetes Service Connection'
kubernetesServiceEndpoint: 'Kubernetes'
namespace: 'home-monitor'
command: 'apply'
useConfigurationFile: true
configuration: '$(System.ArtifactsDirectory)/Manifest/manifest.yaml'
secretType: 'dockerRegistry'
containerRegistryType: 'Container Registry'

View File

@@ -0,0 +1,158 @@
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: environment-database
namespace: home-monitor
labels:
app: environment-database
spec:
replicas: 1
selector:
matchLabels:
app: environment-database
serviceName: environment-database
template:
metadata:
labels:
app: environment-database
spec:
containers:
- name: environment-database
image: mcr.microsoft.com/mssql/server
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
env:
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: environment-database-credentials
key: password
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_PID
value: Express
- name: TZ
value: America/New_York
volumeMounts:
- name: data
mountPath: /var/opt/mssql
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/hostname: kubernetes
schedulerName: default-scheduler
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: local-path
resources:
requests:
storage: 4Gi
---
kind: Service
apiVersion: v1
metadata:
name: environment-database
spec:
ports:
- name: client
port: 1433
selector:
app: environment-database
type: LoadBalancer
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: environment-service
namespace: home-monitor
labels:
app: environment-service
spec:
replicas: 1
selector:
matchLabels:
app: environment-service
template:
metadata:
labels:
app: environment-service
spec:
containers:
- name: environment-service
image: ckaczor/home-monitor-environment-service:#BUILD_BUILDNUMBER#
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: File
imagePullPolicy: Always
securityContext:
privileged: true
env:
- name: Environment__Database__Host
value: environment-database
- name: Environment__Database__User
valueFrom:
secretKeyRef:
name: environment-database-credentials
key: username
- name: Environment__Database__Password
valueFrom:
secretKeyRef:
name: environment-database-credentials
key: password
- name: Hub__Environment
value: http://hub-service/environment
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/hostname: kubernetes
schedulerName: default-scheduler
---
kind: Service
apiVersion: v1
metadata:
name: environment-service
spec:
ports:
- name: client
port: 80
selector:
app: environment-service
type: ClusterIP
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
annotations:
kubernetes.io/ingress.class: traefik
creationTimestamp: null
name: environment
namespace: home-monitor
spec:
routes:
- kind: Rule
match: PathPrefix(`/api/environment`)
middlewares:
- name: api-environment
namespace: home-monitor
services:
- kind: Service
name: environment-service
namespace: home-monitor
port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
creationTimestamp: null
name: api-environment
namespace: home-monitor
spec:
stripPrefix:
prefixes:
- /api/environment