Skip to content

Commit 5ecf7c7

Browse files
committed
Add Azure deployment workflow and setup script
1 parent a92ec7d commit 5ecf7c7

File tree

4 files changed

+126
-9
lines changed

4 files changed

+126
-9
lines changed

.github/workflows/deploy-p2.yml

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Project 2 - Deploy My Web App
1+
name: Deploy My Web App
22

33
# When to run this
44
on:
@@ -8,14 +8,15 @@ on:
88
- 'project-2/**'
99
workflow_dispatch: # Allows manual triggering
1010

11+
1112
jobs:
1213
deploy:
1314
runs-on: ubuntu-latest
14-
15+
1516
defaults:
1617
run:
1718
working-directory: ./project-2
18-
19+
1920
steps:
2021
# Get your code
2122
- uses: actions/checkout@v4
@@ -29,8 +30,53 @@ jobs:
2930
- run: npm install
3031
- run: npm test
3132

32-
# Build Docker image
33-
- run: docker build -t my-webapp .
33+
# Login to Azure
34+
- uses: azure/login@v1
35+
with:
36+
creds: ${{ secrets.AZURE_CREDENTIALS }}
37+
38+
# Build and push to Azure Container Registry
39+
- name: Build and push Docker image
40+
run: |
41+
# Create a unique name for your app
42+
APP_NAME="mywebapp-$(date +%s | tail -c 6)"
43+
echo "APP_NAME=$APP_NAME" >> $GITHUB_ENV
44+
45+
# Build Docker image
46+
docker build -t $APP_NAME .
47+
48+
# Login to Azure Container Registry
49+
az acr login --name ${{ secrets.ACR_NAME }}
50+
51+
# Tag and push image
52+
docker tag $APP_NAME ${{ secrets.ACR_NAME }}.azurecr.io/$APP_NAME:latest
53+
docker push ${{ secrets.ACR_NAME }}.azurecr.io/$APP_NAME:latest
54+
55+
# Deploy to Azure Container Instances
56+
- name: Deploy to Azure
57+
run: |
58+
az container create \
59+
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
60+
--name $APP_NAME \
61+
--image ${{ secrets.ACR_NAME }}.azurecr.io/$APP_NAME:latest \
62+
--registry-login-server ${{ secrets.ACR_NAME }}.azurecr.io \
63+
--registry-username ${{ secrets.ACR_USERNAME }} \
64+
--registry-password ${{ secrets.ACR_PASSWORD }} \
65+
--dns-name-label $APP_NAME \
66+
--ports 3001 \
67+
--environment-variables NODE_ENV=production \
68+
--cpu 1 \
69+
--memory 1.5 \
70+
--restart-policy Always \
71+
--location "East US"
3472
35-
# (You'll add deployment steps here later)
36-
- run: echo "App tested and built successfully!"
73+
# Get the URL
74+
- name: Get App URL
75+
run: |
76+
FQDN=$(az container show \
77+
--resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} \
78+
--name $APP_NAME \
79+
--query ipAddress.fqdn \
80+
--output tsv)
81+
echo "🚀 Your app is live at: http://$FQDN:3001"
82+
echo "APP_URL=http://$FQDN:3001" >> $GITHUB_ENV

project-2/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,10 @@ my-webapp/
3535
├── package.json
3636
├── Dockerfile
3737
├── .github/workflows/deploy.yml
38-
└── README.md
38+
└── README.md
39+
40+
41+
To Create azure Properties, Run this script - azure_setup.sh
42+
43+
chmod +x azure_setup.sh
44+
./azure_setup.sh

project-2/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const express = require('express');
22
const app = express();
3-
const PORT = process.env.PORT || 3001;
3+
const PORT = process.env.PORT || 3001; // Using 3001 to avoid conflicts
44

55
// Simple home page
66
app.get('/', (req, res) => {

scripts/azure_setup.sh

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
3+
# Set your variables
4+
RESOURCE_GROUP_NAME="rg-webapp-deploy"
5+
ACR_NAME="acrwebapp$(date +%s | tail -c 6)" # Creates unique name like acrwebapp123456
6+
LOCATION="eastus"
7+
SP_NAME="github-actions-webapp"
8+
9+
echo "Setting up Azure resources..."
10+
echo "Resource Group: $RESOURCE_GROUP_NAME"
11+
echo "ACR Name: $ACR_NAME"
12+
echo "Location: $LOCATION"
13+
14+
# Create resource group
15+
echo "Creating resource group..."
16+
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
17+
18+
# Create Azure Container Registry
19+
echo "Creating Azure Container Registry..."
20+
az acr create \
21+
--resource-group $RESOURCE_GROUP_NAME \
22+
--name $ACR_NAME \
23+
--sku Basic \
24+
--admin-enabled
25+
26+
# Get ACR credentials
27+
echo "Getting ACR credentials..."
28+
ACR_USERNAME=$(az acr credential show --name $ACR_NAME --query username --output tsv)
29+
ACR_PASSWORD=$(az acr credential show --name $ACR_NAME --query passwords[0].value --output tsv)
30+
31+
# Create service principal with contributor role for the resource group
32+
echo "Creating service principal..."
33+
AZURE_CREDENTIALS=$(az ad sp create-for-rbac \
34+
--name $SP_NAME \
35+
--role contributor \
36+
--scopes /subscriptions/$(az account show --query id --output tsv)/resourceGroups/$RESOURCE_GROUP_NAME \
37+
--json-auth)
38+
39+
echo ""
40+
echo "=========================================="
41+
echo "SETUP COMPLETE! 🚀"
42+
echo "=========================================="
43+
echo ""
44+
echo "GitHub Secrets to create:"
45+
echo ""
46+
echo "AZURE_CREDENTIALS:"
47+
echo "$AZURE_CREDENTIALS"
48+
echo ""
49+
echo "ACR_NAME: $ACR_NAME"
50+
echo ""
51+
echo "ACR_USERNAME: $ACR_USERNAME"
52+
echo ""
53+
echo "ACR_PASSWORD: $ACR_PASSWORD"
54+
echo ""
55+
echo "AZURE_RESOURCE_GROUP: $RESOURCE_GROUP_NAME"
56+
echo ""
57+
echo "=========================================="
58+
echo ""
59+
echo "Next steps:"
60+
echo "1. Copy the above values to your GitHub repository secrets"
61+
echo "2. Make sure your project-2 directory has a Dockerfile"
62+
echo "3. Push your code to trigger the deployment"
63+
echo ""
64+
echo "To clean up later, run:"
65+
echo "az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait"

0 commit comments

Comments
 (0)