Skip to content

Commit 557fc55

Browse files
committed
first commit
0 parents  commit 557fc55

26 files changed

+724
-0
lines changed

.github/workflows/cd.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: CD Deploy to AKS
2+
on:
3+
workflow_run:
4+
workflows: ["CI Build & Push"]
5+
types: [completed]
6+
7+
env:
8+
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
9+
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
10+
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
11+
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
12+
13+
jobs:
14+
deploy:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v3
18+
19+
- name: Azure Login
20+
uses: azure/login@v1
21+
with:
22+
client-id: ${{ secrets.ARM_CLIENT_ID }}
23+
client-secret: ${{ secrets.ARM_CLIENT_SECRET }}
24+
tenant-id: ${{ secrets.ARM_TENANT_ID }}
25+
subscription-id: ${{ secrets.ARM_SUBSCRIPTION_ID }}
26+
27+
- name: Get Terraform Outputs
28+
id: tfout
29+
run: |
30+
echo "acr=$(terraform -chdir=infra output -raw acr_login_server)" >> $GITHUB_OUTPUT
31+
echo "aks=$(terraform -chdir=infra output -raw aks_name)" >> $GITHUB_OUTPUT
32+
echo "rg=$(terraform -chdir=infra output -raw aks_rg_name)" >> $GITHUB_OUTPUT
33+
34+
- name: Get AKS Credentials
35+
run: |
36+
az aks get-credentials --name "${{ steps.tfout.outputs.aks }}" --resource-group "${{ steps.tfout.outputs.rg }}" --overwrite-existing
37+
38+
- name: Patch Deployment Image
39+
env:
40+
ACR_LOGIN_SERVER: ${{ steps.tfout.outputs.acr }}
41+
run: |
42+
sed -i "s|<ACR_LOGIN_SERVER>|$ACR_LOGIN_SERVER|g" src/k8s/deployment.yaml
43+
44+
- name: Deploy to AKS
45+
run: |
46+
kubectl apply -f src/k8s/pvc.yaml
47+
kubectl apply -f src/k8s/deployment.yaml
48+
kubectl apply -f src/k8s/service.yaml
49+
50+
- name: Wait for Service External IP
51+
run: |
52+
echo "Esperando EXTERNAL-IP..."
53+
for i in {1..30}; do
54+
ip=$(kubectl get svc hola-mundo-dotnet-svc -o jsonpath='{.status.loadBalancer.ingress[0].ip}' || true)
55+
if [ -n "$ip" ]; then
56+
echo "EXTERNAL-IP=$ip" >> $GITHUB_ENV
57+
echo "External IP: $ip"
58+
break
59+
fi
60+
sleep 10
61+
done

.github/workflows/ci.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: CI Build & Push
2+
on:
3+
workflow_run:
4+
workflows: ["Terraform Create Infra"]
5+
types: [completed]
6+
7+
env:
8+
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
9+
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
10+
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
11+
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
12+
13+
jobs:
14+
build:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v3
18+
19+
- name: Azure Login
20+
uses: azure/login@v1
21+
with:
22+
client-id: ${{ secrets.ARM_CLIENT_ID }}
23+
client-secret: ${{ secrets.ARM_CLIENT_SECRET }}
24+
tenant-id: ${{ secrets.ARM_TENANT_ID }}
25+
subscription-id: ${{ secrets.ARM_SUBSCRIPTION_ID }}
26+
27+
- name: Get ACR login server from terraform output
28+
id: get_acr
29+
run: echo "acr=$(terraform -chdir=infra output -raw acr_login_server)" >> $GITHUB_OUTPUT
30+
31+
- name: Docker Build & Push
32+
env:
33+
ACR_LOGIN_SERVER: ${{ steps.get_acr.outputs.acr }}
34+
run: |
35+
echo "ACR_LOGIN_SERVER=$ACR_LOGIN_SERVER"
36+
az acr login --name $(echo $ACR_LOGIN_SERVER | cut -d'.' -f1)
37+
docker build -t $ACR_LOGIN_SERVER/hola-mundo-dotnet:latest ./src/K8sDotnetApi
38+
docker push $ACR_LOGIN_SERVER/hola-mundo-dotnet:latest
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Terraform Create Infra
2+
on:
3+
workflow_dispatch:
4+
push:
5+
branches: [ "main" ]
6+
7+
env:
8+
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
9+
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
10+
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
11+
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
12+
13+
jobs:
14+
terraform:
15+
runs-on: ubuntu-latest
16+
defaults:
17+
run:
18+
working-directory: infra
19+
steps:
20+
- uses: actions/checkout@v3
21+
22+
- name: Azure Login (for backend bootstrap)
23+
uses: azure/login@v1
24+
with:
25+
client-id: ${{ secrets.ARM_CLIENT_ID }}
26+
client-secret: ${{ secrets.ARM_CLIENT_SECRET }}
27+
tenant-id: ${{ secrets.ARM_TENANT_ID }}
28+
subscription-id: ${{ secrets.ARM_SUBSCRIPTION_ID }}
29+
30+
- name: Ensure backend storage exists (idempotent)
31+
run: |
32+
az group create -n tfstate-rg -l eastus
33+
az storage account create -n tfstatek8sstore -g tfstate-rg -l eastus --sku Standard_LRS || true
34+
az storage container create --name tfstate --account-name tfstatek8sstore || true
35+
36+
- name: Setup Terraform
37+
uses: hashicorp/setup-terraform@v2
38+
39+
- name: Terraform Init
40+
run: terraform init -input=false -no-color
41+
42+
- name: Terraform Apply
43+
run: terraform apply -auto-approve -input=false -no-color -var "client_id=${{ secrets.ARM_CLIENT_ID }}" -var "client_secret=${{ secrets.ARM_CLIENT_SECRET }}" -var "subscription_id=${{ secrets.ARM_SUBSCRIPTION_ID }}" -var "tenant_id=${{ secrets.ARM_TENANT_ID }}" -var "ssh_public_key=${{ secrets.VM_SSH_PUB_KEY }}"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Terraform Destroy Infra
2+
on:
3+
workflow_dispatch:
4+
5+
env:
6+
ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }}
7+
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
8+
ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }}
9+
ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }}
10+
11+
jobs:
12+
terraform-destroy:
13+
runs-on: ubuntu-latest
14+
defaults:
15+
run:
16+
working-directory: infra
17+
steps:
18+
- uses: actions/checkout@v3
19+
20+
- name: Azure Login (for backend)
21+
uses: azure/login@v1
22+
with:
23+
client-id: ${{ secrets.ARM_CLIENT_ID }}
24+
client-secret: ${{ secrets.ARM_CLIENT_SECRET }}
25+
tenant-id: ${{ secrets.ARM_TENANT_ID }}
26+
subscription-id: ${{ secrets.ARM_SUBSCRIPTION_ID }}
27+
28+
- name: Setup Terraform
29+
uses: hashicorp/setup-terraform@v2
30+
31+
- name: Terraform Init
32+
run: terraform init -input=false -no-color
33+
34+
- name: Terraform Destroy
35+
run: terraform destroy -auto-approve -input=false -no-color -var "client_id=${{ secrets.ARM_CLIENT_ID }}" -var "client_secret=${{ secrets.ARM_CLIENT_SECRET }}" -var "subscription_id=${{ secrets.ARM_SUBSCRIPTION_ID }}" -var "tenant_id=${{ secrets.ARM_TENANT_ID }}" -var "ssh_public_key=${{ secrets.VM_SSH_PUB_KEY }}"

.gitignore

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Build artifacts
2+
bin/
3+
obj/
4+
out/
5+
6+
# Rider / VS / VS Code
7+
.vscode/
8+
.idea/
9+
*.user
10+
*.suo
11+
12+
# Terraform
13+
infra/.terraform/
14+
infra/.terraform.lock.hcl
15+
*.tfstate*
16+
.terraform.tfstate*
17+
crash.log
18+
19+
# Dotnet
20+
*.db
21+
*.db-shm
22+
*.db-wal
163 KB
Binary file not shown.
Binary file not shown.

.vs/K8sDotnetApi/v17/.futdcache.v2

156 Bytes
Binary file not shown.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"Version": 1,
3+
"WorkspaceRootPath": "C:\\Elio\\Development\\Projects\\2025\\Azure\\k8s-dotnet-aks\\",
4+
"Documents": [],
5+
"DocumentGroupContainers": [
6+
{
7+
"Orientation": 0,
8+
"VerticalTabListWidth": 256,
9+
"DocumentGroups": [
10+
{
11+
"DockedWidth": 200,
12+
"SelectedChildIndex": -1,
13+
"Children": [
14+
{
15+
"$type": "Bookmark",
16+
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
17+
},
18+
{
19+
"$type": "Bookmark",
20+
"Name": "ST:1:0:{fabf9319-47eb-497e-b8f6-d9f73fba5f55}"
21+
},
22+
{
23+
"$type": "Bookmark",
24+
"Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
25+
},
26+
{
27+
"$type": "Bookmark",
28+
"Name": "ST:131:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
29+
},
30+
{
31+
"$type": "Bookmark",
32+
"Name": "ST:130:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
33+
},
34+
{
35+
"$type": "Bookmark",
36+
"Name": "ST:133:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
37+
},
38+
{
39+
"$type": "Bookmark",
40+
"Name": "ST:134:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
41+
},
42+
{
43+
"$type": "Bookmark",
44+
"Name": "ST:132:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
45+
},
46+
{
47+
"$type": "Bookmark",
48+
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
49+
},
50+
{
51+
"$type": "Bookmark",
52+
"Name": "ST:1563555105:0:{bf84ea66-d821-4dba-b1b1-2777d8574775}"
53+
},
54+
{
55+
"$type": "Bookmark",
56+
"Name": "ST:464748262:0:{bf84ea66-d821-4dba-b1b1-2777d8574775}"
57+
},
58+
{
59+
"$type": "Bookmark",
60+
"Name": "ST:0:0:{e506b91c-c606-466a-90a9-123d1d1e12b3}"
61+
},
62+
{
63+
"$type": "Bookmark",
64+
"Name": "ST:66:0:{e8034f19-ab72-4f06-83fd-f6832b41aa63}"
65+
},
66+
{
67+
"$type": "Bookmark",
68+
"Name": "ST:4650798:0:{bf84ea66-d821-4dba-b1b1-2777d8574775}"
69+
},
70+
{
71+
"$type": "Bookmark",
72+
"Name": "ST:1275996112:0:{bf84ea66-d821-4dba-b1b1-2777d8574775}"
73+
}
74+
]
75+
}
76+
]
77+
}
78+
]
79+
}
20 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)