Skip to content

DEPLOY-TO-AZURE

DEPLOY-TO-AZURE #9

name: DEPLOY-TO-AZURE
on:
workflow_dispatch:
permissions:
teams:
- 'reactor/team'
permissions: read-all
env:
GROUP_NAME: ${{ secrets.AZURE_GROUP_NAME }}
SERVICE_NAME: ${{ secrets.AZURE_SERVICE_NAME }}
APP_NAME: ${{ secrets.AZURE_APP_NAME }}
JAR_PATH: ${{ github.workspace }}/build/libs/projectreactor-home.jar
DEFAULT_DEPLOYMENT: blue
NEW_DEPLOYMENT: green
jobs:
deploy:
runs-on: ubuntu-latest
outputs:
NEWDEPLOYMENT: ${{ steps.deploy.outputs.NEWDEPLOYMENT }}
ACTIVEDEPLOYMENT: ${{ steps.deploy.outputs.ACTIVEDEPLOYMENT }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4
with:
distribution: 'temurin'
java-version: 8
- name: Build
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e # v3
with:
arguments: build -x spotlessCheck
- name: Login Via Azure CLI
uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a # v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS_SPRING_IO }}
- name: Deploy To Staging
uses: azure/CLI@4db43908b9df2e7ac93c8275a8f9a448c59338dd # v1
id: deploy
with:
inlineScript: |
az extension add --name spring
ACTIVEDEPLOYMENT=$(az spring app show -n ${{env.APP_NAME}} --query properties.activeDeployment.name -o tsv -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}})
if [ "$ACTIVEDEPLOYMENT" = "${{env.DEFAULT_DEPLOYMENT}}" ]; then
NEWDEPLOYMENT="${{env.NEW_DEPLOYMENT}}"
else
NEWDEPLOYMENT="${{env.DEFAULT_DEPLOYMENT}}"
fi
echo 'new deployment: ' $NEWDEPLOYMENT
echo 'active deployment': $ACTIVEDEPLOYMENT
echo "::set-output name=NEWDEPLOYMENT::$NEWDEPLOYMENT"
echo "::set-output name=ACTIVEDEPLOYMENT::$ACTIVEDEPLOYMENT"
NEWDEPLOYMENTEXISTS=$(az spring app deployment list --app ${{env.APP_NAME}} --query "[?name=='$NEWDEPLOYMENT'].name" -o tsv -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}})
if [ "$NEWDEPLOYMENTEXISTS" = "$NEWDEPLOYMENT" ]; then
echo $NEWDEPLOYMENT ' already exists'
else
echo 'creating deployment ' $NEWDEPLOYMENT
az spring app deployment create --app ${{env.APP_NAME}} -n $NEWDEPLOYMENT -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}}
fi
echo 'workspace:' ${{ github.workspace }}
az spring app deploy -n ${{env.APP_NAME}} --artifact-path ${{env.JAR_PATH}} -d $NEWDEPLOYMENT -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}}
switch-to-production:
runs-on: ubuntu-latest
needs: deploy
steps:
- uses: azure/login@8c334a195cbb38e46038007b304988d888bf676a # v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS_SPRING_IO }}
- name: Set Staging To Production
uses: azure/CLI@4db43908b9df2e7ac93c8275a8f9a448c59338dd # v1
with:
inlineScript: |
az extension add --name spring
az spring app set-deployment -d ${{ needs.deploy.outputs.NEWDEPLOYMENT }} -n ${{env.APP_NAME}} -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}}
az spring app deployment delete --app ${{env.APP_NAME}} -n ${{ needs.deploy.outputs.ACTIVEDEPLOYMENT }} -s ${{env.SERVICE_NAME}} -g ${{env.GROUP_NAME}}