From a074ccc342f69fcb7e0ba023d1fdf902ceaf4bb2 Mon Sep 17 00:00:00 2001 From: Ella Bronson <111298136+ebronson68@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:17:07 -0500 Subject: [PATCH] [DEVOPS-535] Install jq requirement in Azure Function Deploy workflow (#150)
DEVOPS-535
Summary Recurly Notification Manager deployment failed
Type Bug Bug
Status In Development Env
Points N/A
Labels -
--- ## Description - Install jq requirement in Azure Function Deploy workflow ## Related Links - Jira Issue: DEVOPS-535 --- .github/workflows/azfunction-deploy.yaml | 116 +++++++++++------------ 1 file changed, 56 insertions(+), 60 deletions(-) diff --git a/.github/workflows/azfunction-deploy.yaml b/.github/workflows/azfunction-deploy.yaml index 30d2c17..37deeb8 100644 --- a/.github/workflows/azfunction-deploy.yaml +++ b/.github/workflows/azfunction-deploy.yaml @@ -68,8 +68,9 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ inputs.checkoutRef }} - - - uses: awalsh128/cache-apt-pkgs-action@latest + + - name: Install jq apt package + uses: awalsh128/cache-apt-pkgs-action@latest with: packages: jq @@ -184,22 +185,19 @@ jobs: - name: Get Azure Function Managed Identity id: identity - uses: azure/cli@v2 - with: - inlineScript: | - set -eu - if [[ "${{ inputs.environment }}" == "production" ]]; then - IDENTITY=$(az functionapp identity show \ - -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ - -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" | tee) - else - IDENTITY=$(az functionapp identity show \ - -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ - -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ - --slot "${{ inputs.environment }}" | tee) - fi - PRINCIPAL_ID=$(echo "$IDENTITY" | grep -o '"principalId": *"[^"]*"' | sed 's/.*: *"\([^"]*\)".*/\1/') - echo "functionAppIdentity=$PRINCIPAL_ID" >> $GITHUB_ENV + run: | + set -eu + if [[ "${{ inputs.environment }}" == "production" ]]; then + IDENTITY=$(az functionapp identity show \ + -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ + -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" | tee) + else + IDENTITY=$(az functionapp identity show \ + -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ + -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ + --slot "${{ inputs.environment }}" | tee) + fi + echo "functionAppIdentity=$(echo $IDENTITY | jq -r '.principalId')" >> $GITHUB_ENV - name: Retrieve key vault name uses: azure/cli@v2 @@ -244,55 +242,53 @@ jobs: environmentVariableSeparator: "\n" - name: Add environment variables to function app - uses: azure/cli@v2 - with: - inlineScript: | - set -eu - # Store the environment variables output into a separate variable - ENV_VARS_OUTPUT='${{ steps.get-envs.outputs.environmentVariables }}' + run: | + set -eu + # Store the environment variables output into a separate variable + ENV_VARS_OUTPUT='${{ steps.get-envs.outputs.environmentVariables }}' + + # Get current app settings + if [[ "${{ inputs.environment }}" == "production" ]]; then + APPSETTINGS=$(az functionapp config appsettings list \ + -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ + -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}") + else + APPSETTINGS=$(az functionapp config appsettings list \ + -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ + -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ + --slot "${{ inputs.environment }}") + fi - # Get current app settings + # Use a while loop to read and process each environment variable and trim output + echo "$ENV_VARS_OUTPUT" | sed '$ d' | while IFS='=' read -r key value; do + echo "Processing variable: $key=$value" + VARIABLE_LC=$(echo "$key" | tr '[:upper:]' '[:lower:]' | tr "_" "-") + + # Search for the key in app settings + APPSETTING_VALUE=$(echo "${APPSETTINGS}" | jq -r ".[] | select(.name == \"$key\") | .value") + + # Check if the value is set to a keyvault reference + if [[ "${APPSETTING_VALUE}" == "@Microsoft.KeyVault"* ]]; then + echo "Skipping $key as it is already a keyvault reference" + continue + fi + + echo "Adding $key to app settings" if [[ "${{ inputs.environment }}" == "production" ]]; then - APPSETTINGS=$(az functionapp config appsettings list \ + az functionapp config appsettings set \ -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ - -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}") + -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ + --slot-settings "$key=@Microsoft.KeyVault(VaultName=${{ env.keyVaultName }};SecretName=${VARIABLE_LC})" >/dev/null && \ + echo "Successfully added $key to app settings" else - APPSETTINGS=$(az functionapp config appsettings list \ + az functionapp config appsettings set \ -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ - --slot "${{ inputs.environment }}") + --slot "${{ inputs.environment }}" \ + --slot-settings "$key=@Microsoft.KeyVault(VaultName=${{ env.keyVaultName }};SecretName=${VARIABLE_LC})" >/dev/null && \ + echo "Successfully added $key to app settings" fi - - # Use a while loop to read and process each environment variable and trim output - echo "$ENV_VARS_OUTPUT" | sed '$ d' | while IFS='=' read -r key value; do - echo "Processing variable: $key=$value" - VARIABLE_LC=$(echo "$key" | tr '[:upper:]' '[:lower:]' | tr "_" "-") - - # Search for the key in app settings - APPSETTING_VALUE=$(echo "${APPSETTINGS}" | jq -r ".[] | select(.name == \"$key\") | .value") - - # Check if the value is set to a keyvault reference - if [[ "${APPSETTING_VALUE}" == "@Microsoft.KeyVault"* ]]; then - echo "Skipping $key as it is already a keyvault reference" - continue - fi - - echo "Adding $key to app settings" - if [[ "${{ inputs.environment }}" == "production" ]]; then - az functionapp config appsettings set \ - -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ - -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ - --slot-settings "$key=@Microsoft.KeyVault(VaultName=${{ env.keyVaultName }};SecretName=${VARIABLE_LC})" >/dev/null && \ - echo "Successfully added $key to app settings" - else - az functionapp config appsettings set \ - -g "${{ inputs.AZURE_FUNCTIONAPP_RESOURCEGROUP }}" \ - -n "${{ inputs.AZURE_FUNCTIONAPP_NAME }}" \ - --slot "${{ inputs.environment }}" \ - --slot-settings "$key=@Microsoft.KeyVault(VaultName=${{ env.keyVaultName }};SecretName=${VARIABLE_LC})" >/dev/null && \ - echo "Successfully added $key to app settings" - fi - done + done - name: Remove GitHub Runner IP from Whitelist if: always()