Refactor Azure deployment workflow to streamline AKS context setup an… #22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Infrastructure To Azure | |
| on: | |
| push: | |
| branches: | |
| - 'apply/**' | |
| jobs: | |
| terraform: | |
| runs-on: ubuntu-latest | |
| if: contains(fromJson('["devsocket"]'), github.actor) | |
| env: | |
| TF_VAR_db_admin_password: ${{ secrets.DB_ADMIN_PASSWORD }} | |
| ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| ARM_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} | |
| ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v3 | |
| - name: Parse environment from branch | |
| id: env | |
| run: | | |
| BRANCH_NAME="${GITHUB_REF#refs/heads/}" | |
| ENV_NAME="${BRANCH_NAME#apply/}" | |
| echo "env_name=$ENV_NAME" >> "$GITHUB_OUTPUT" | |
| - name: Azure Login | |
| uses: azure/login@v1 | |
| with: | |
| creds: ${{ secrets.AZURE_CREDENTIALS }} | |
| - name: Show current subscription | |
| run: az account show --output json | |
| - name: Register Microsoft.Storage provider | |
| run: az provider register --namespace Microsoft.Storage | |
| - name: Provision backend resources | |
| run: | | |
| az group create --name "ecommerce-qa-rg" --location "centralus" || true | |
| az storage account create --name "qatfstateaccount" --resource-group "ecommerce-qa-rg" --location "centralus" --sku Standard_LRS || true | |
| az storage container create --name "qatfstate" --account-name "qatfstateaccount" || true | |
| - name: Setup Terraform | |
| uses: hashicorp/setup-terraform@v2 | |
| - name: Terraform Init | |
| run: terraform init -reconfigure | |
| working-directory: terraform/environments/${{ steps.env.outputs.env_name }} | |
| - name: Terraform Plan | |
| run: terraform plan -var-file="terraform.tfvars" | |
| working-directory: terraform/environments/${{ steps.env.outputs.env_name }} | |
| - name: Terraform Apply | |
| run: terraform apply -auto-approve -var-file="terraform.tfvars" | |
| working-directory: terraform/environments/${{ steps.env.outputs.env_name }} | |
| - name: Extract AKS info from Terraform outputs | |
| id: aks | |
| run: | | |
| echo "cluster_name=$(terraform output -raw cluster_name)" >> $GITHUB_OUTPUT | |
| echo "resource_group=$(terraform output -raw resource_group_name)" >> $GITHUB_OUTPUT | |
| working-directory: terraform/environments/${{ steps.env.outputs.env_name }} | |
| - name: Set AKS context | |
| uses: azure/aks-set-context@v3 | |
| with: | |
| resource-group: ${{ steps.aks.outputs.resource_group }} | |
| cluster-name: ${{ steps.aks.outputs.cluster_name }} | |
| - name: Create GHCR image pull secret | |
| run: | | |
| kubectl get secret ghcr-secret --namespace=default || \ | |
| kubectl create secret docker-registry ghcr-secret \ | |
| --docker-server=ghcr.io \ | |
| --docker-username=${{ secrets.GHCR_USERNAME }} \ | |
| --docker-password=${{ secrets.AKS_GHCR_PAT }} \ | |
| --docker-email=venkatasudheerkumar.kondeti@gmail.com \ | |
| --namespace=default | |
| - name: Delete apply branch | |
| if: startsWith(github.ref, 'refs/heads/apply/') | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| BRANCH_NAME="${GITHUB_REF#refs/heads/}" | |
| echo "Deleting branch: $BRANCH_NAME" | |
| gh api \ | |
| -X DELETE \ | |
| /repos/${{ github.repository }}/git/refs/heads/$BRANCH_NAME |