# Azure Kubernetes Service (AKS) pipeline with Kustomize
# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service cluster

variables:
  armServiceConnection: testServiceConnection
  azureContainerRegistry: testACR
  containerName: testContainer
  acrRg: testACRRG
  clusterRg: testRG
  clusterName: testCluster
  kustomizePath: kustomize/overlays/production
  namespace: testNamespace
  tag: "$(Build.BuildId)"
  vmImageName: "ubuntu-latest"

trigger:
  - main

name: testPipeline

stages:
  - stage: BuildAndPush
    displayName: Build stage
    jobs:
      - job: BuildAndPush
        displayName: Build and push image
        pool:
          vmImage: $(vmImageName)
        steps:
          - task: AzureCLI@2
            displayName: Build and push image to Azure Container Registry
            inputs:
              azureSubscription: $(armServiceConnection)
              scriptType: "bash"
              scriptLocation: "inlineScript"
              inlineScript: |
                az acr build --image $1.azurecr.io/$2:$3 --registry $1 -g $4 .
              arguments: "$(azureContainerRegistry) $(containerName) $(tag) $(acrRg)"

  - stage: Deploy
    displayName: Deploy stage
    dependsOn: BuildAndPush
    jobs:
      - job: Deploy
        displayName: Deploy to AKS using Kustomize
        pool:
          vmImage: $(vmImageName)
        steps:
          - task: KubernetesManifest@1
            displayName: Bake Kustomize manifests
            inputs:
              action: 'bake'
              kustomizationPath: $(kustomizePath)
              renderType: 'kustomize'
            name: 'bake'

          - task: KubernetesManifest@1
            displayName: Deploy baked manifests to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'azureResourceManager'
              azureSubscriptionConnection: $(armServiceConnection)
              azureResourceGroup: $(clusterRg)
              kubernetesCluster: $(clusterName)
              namespace: $(namespace)
              manifests: $(bake.manifestsBundle)
              containers: |
                $(azureContainerRegistry).azurecr.io/$(containerName):$(tag)
