146 lines
4.2 KiB
YAML
146 lines
4.2 KiB
YAML
# Deploy to Azure Kubernetes Service
|
|
# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service
|
|
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
|
|
|
|
trigger:
|
|
# tags:
|
|
# include:
|
|
# - v*.*
|
|
|
|
# branches:
|
|
# include:
|
|
# - releases/*
|
|
|
|
# branches:
|
|
# include:
|
|
# - master
|
|
# paths:
|
|
# include:
|
|
# - docs/*
|
|
# exclude:
|
|
# - README.md
|
|
# - azure*.yml
|
|
- master
|
|
|
|
resources:
|
|
- repo: self
|
|
|
|
variables:
|
|
- group: common-value
|
|
# containerRegistry: 'event.azurecr.io'
|
|
# containerRegistryDockerConnection: 'acr'
|
|
# environment: 'aks.default'
|
|
- name: imageRepository
|
|
value: 'ui'
|
|
- name: dockerfilePath
|
|
value: '**/DockerfileAutoBuild'
|
|
- name: tag
|
|
value: '$(Build.BuildId)'
|
|
# Agent VM image name
|
|
- name: vmImageName
|
|
value: 'ubuntu-latest'
|
|
|
|
stages:
|
|
- stage: Build
|
|
displayName: Build stage
|
|
jobs:
|
|
- job: Build
|
|
displayName: Build
|
|
pool:
|
|
vmImage: $(vmImageName)
|
|
steps:
|
|
- task: Docker@2
|
|
inputs:
|
|
containerRegistry: $(containerRegistryDockerConnection)
|
|
repository: $(imageRepository)
|
|
command: 'buildAndPush'
|
|
Dockerfile: $(dockerfilePath)
|
|
tags: |
|
|
$(tag)
|
|
|
|
- stage: Deploy
|
|
displayName: Deploy stage
|
|
# dependsOn: Build
|
|
|
|
jobs:
|
|
- deployment: Deploy
|
|
# condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
|
|
displayName: Deploy
|
|
pool:
|
|
vmImage: $(vmImageName)
|
|
environment: $(environment)
|
|
strategy:
|
|
runOnce:
|
|
deploy:
|
|
steps:
|
|
- task: Kubernetes@1
|
|
displayName: 'Get gatewayIp'
|
|
name: 'gatewayip'
|
|
continueOnError: true
|
|
inputs:
|
|
connectionType: 'Kubernetes Service Connection'
|
|
namespace: 'default'
|
|
command: 'get'
|
|
arguments: "svc gateway --ignore-not-found"
|
|
secretType: 'dockerRegistry'
|
|
containerRegistryType: 'Azure Container Registry'
|
|
outputFormat: "jsonpath='{.status.loadBalancer.ingress[0].ip}'"
|
|
- task: Kubernetes@1
|
|
inputs:
|
|
connectionType: 'Kubernetes Service Connection'
|
|
namespace: 'default'
|
|
command: 'apply'
|
|
useConfigurationFile: true
|
|
configurationType: 'inline'
|
|
inline: |
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: $(imageRepository)
|
|
labels:
|
|
app: $(imageRepository)
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: $(imageRepository)
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: $(imageRepository)
|
|
spec:
|
|
containers:
|
|
- name: $(imageRepository)
|
|
image: $(containerRegistry)/$(imageRepository):$(tag)
|
|
ports:
|
|
- containerPort: 8080
|
|
env:
|
|
- name: VUE_APP_API_HOST
|
|
value: http://${gatewayip.KubectlOutput}:8080
|
|
secretType: 'dockerRegistry'
|
|
containerRegistryType: 'Azure Container Registry'
|
|
- task: Kubernetes@1
|
|
inputs:
|
|
connectionType: 'Kubernetes Service Connection'
|
|
namespace: 'default'
|
|
command: 'apply'
|
|
useConfigurationFile: true
|
|
configurationType: 'inline'
|
|
inline: |
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: $(imageRepository)
|
|
labels:
|
|
app: $(imageRepository)
|
|
spec:
|
|
ports:
|
|
- port: 8080
|
|
targetPort: 8080
|
|
selector:
|
|
app: $(imageRepository)
|
|
type:
|
|
LoadBalancer
|
|
secretType: 'dockerRegistry'
|
|
containerRegistryType: 'Azure Container Registry'
|