# This workflow will build a docker container, publish it to Azure Container Registry, and deploy it to Azure Kubernetes Service using a helm chart. # # To configure this workflow: # # 1. Set up the following secrets in your workspace: # a. REGISTRY_USERNAME with ACR username # b. REGISTRY_PASSWORD with ACR Password # c. AZURE_CREDENTIALS with the output of `az ad sp create-for-rbac --sdk-auth` # # 2. Change the values for the REGISTRY_NAME, CLUSTER_NAME, CLUSTER_RESOURCE_GROUP and NAMESPACE environment variables (below). on: workflow_dispatch: # Inputs the workflow accepts. inputs: name: # Friendly description to be shown in the UI instead of 'name' description: 'exec name' # Default value if no value is explicitly provided default: 'default execution' # Input has to be provided for the workflow to run required: false # Environment variables available to all jobs and steps in this workflow env: REGISTRY_NAME: ${{ secrets.REGISTRY_NAME }} CLUSTER_NAME: ${{ secrets.CLUSTER_NAME}} CLUSTER_RESOURCE_GROUP: ${{ secrets.CLUSER_RG}} REGISTRY_ENDPOINT: ${{ secrets.REGISTRY_ENDPOINT }} NAMESPACE: default jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@master # Connect to Azure Container registry (ACR) - uses: azure/docker-login@v1 with: login-server: ${{ env.REGISTRY_NAME }}.azurecr.io username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} # Container build and push to a Azure Container registry (ACR) - run: | docker-compose build . -t ${{ secrets.REGISTRY_ENDPOINT }}:linux-dev docker-compose push ${{ secrets.REGISTRY_ENDPOINT }}:linux-dev # Set the target Azure Kubernetes Service (AKS) cluster. - uses: azure/aks-set-context@v1 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' cluster-name: ${{ env.CLUSTER_NAME }} resource-group: ${{ env.CLUSTER_RESOURCE_GROUP }} # Create namespace if doesn't exist - run: | kubectl create namespace ${{ env.NAMESPACE }} --dry-run -o json | kubectl apply -f - # Create imagepullsecret for Azure Container registry (ACR) - uses: azure/k8s-create-secret@v1 with: container-registry-url: ${{ env.REGISTRY_NAME }}.azurecr.io container-registry-username: ${{ secrets.REGISTRY_USERNAME }} container-registry-password: ${{ secrets.REGISTRY_PASSWORD }} secret-name: ${{ env.REGISTRY_NAME }}-registry-connection namespace: ${{ env.NAMESPACE }} # Baking the helm chart to generate the manifests to deploy - uses: azure/k8s-bake@v1 with: renderEngine: 'helm2' helmChart: './deploy/k8s/helm/' helm-version: 'latest' id: bake # Deploy app to AKS - uses: azure/k8s-deploy@v1 with: manifests: ${{ steps.bake.outputs.manifestsBundle }} images: | ${{ secrets.REGISTRY_ENDPOINT }}:linux-dev imagepullsecrets: | ${{ env.REGISTRY_NAME }}-registry-connection namespace: ${{ env.NAMESPACE }}