Build & deploy - verisoftCZ/verisoft-framework GitHub Wiki
Build probíhá v Azure Devops a to pomocí automatických build pipelines Každá servisa má CI build pro validaci a Docker build pro vytvoření kontejneru, který se následně nahraje do docker registry odkud si ho může následně stáhnout cluster dle nastavení deployment.yaml (viz níže)
CI build (Verisoft.DemoApi.CI.yml) Součástí CI buildu musí být spuštění TEST projektů Součástí CI buildů musí být kontrola na Warnings a musí být brány jako chyby
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- src/Verisoft.DemoApi
pool:
vmImage: 'ubuntu-latest'
name: 'VerisoftHosted'
variables:
solution: 'src/Verisoft.DemoApi.sln'
buildConfiguration: 'Release'
netCoreSdkVersion: '8.x'
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK $(netCoreSdkVersion)'
inputs:
version: $(netCoreSdkVersion)
- task: NuGetToolInstaller@1
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '$(solution)'
feedsToUse: 'select'
vstsFeed: '5e1c1cd0-6e9d-43e0-a570-faca2b5ac27c'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '$(solution)'
arguments: '-c $(buildConfiguration) /warnaserror'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '$(solution)'
Docker build (Verisoft.DemoApi.Docker.yml)
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- src/Verisoft.DemoApi
pool:
vmImage: 'ubuntu-latest'
name: 'VerisoftHosted'
variables:
tag: '$(Build.BuildId)'
imageName: 'verisoft/fmw/demoapi'
backendDirectory: 'src/Verisoft.DemoApi/Verisoft.DemoApi.Host'
steps:
- task: Docker@2
inputs:
containerRegistry: 'verisoft'
repository: $(imageName)
command: 'buildAndPush'
Dockerfile: '$(backendDirectory)/Dockerfile'
buildContext: 'src'
tags: |
$(Build.BuildId)
latest
Release probíha v Azure Devops a to pomocí automatických release pipelines Pro každou mikroservisu, kterou chceme nasadit na cluster je nutné vytvořit deploy.yaml a service.yaml Deploy: Slouží pro nasazení na cluster !!Pro každou mikroservisu musí být nastaveny resources!! Aby nedošlo k vyčerpání zdrojů clusterů a nějaká služba neměla dostupné neomezené zdroje.
apiVersion: apps/v1
kind: Deployment
metadata:
name: verisoft-fmw-demoapi
namespace: dev
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: verisoft-fmw-demoapi
template:
metadata:
labels:
app: verisoft-fmw-demoapi
spec:
containers:
- name: verisoft-fmw-demoapi
image: verisoft.azurecr.io/verisoft/fmw/demoapi:1 ##ZDE nutné změnit dle container registry
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: "ASPNETCORE_ENVIRONMENT"
value: "DEV"
resources:
requests:
memory: "200Mi"
cpu: "100m"
limits:
memory: "300Mi"
Service: Slouží pro registraci Service (zjednodušeně routing)
apiVersion: v1
kind: Service
metadata:
name: verisoft-fmw-demoapi
namespace: dev
spec:
selector:
app: verisoft-fmw-demoapi
ports:
- protocol: TCP
port: 80
targetPort: 80
Container registry Container registry je vytvořen v Azure jako služba a nahráváme do něj containers pomocí build pipelines. Cluster pak používá tento container registry aby si jednotlivé container stáhnul dle čísla buildu, případně pomocí tagu latest. Číslo buildu se do release pipeline předává automaticky pomocí artefaktu.