forked from Azure-Samples/dotnet-container-app
-
Notifications
You must be signed in to change notification settings - Fork 0
192 lines (164 loc) · 6.84 KB
/
aks-aspnetcore-deployment.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
name: aks-aspnetcore.deployment
on: workflow_dispatch
#on:
# push:
# branches: [ main ]
# pull_request:
# branches: [ main ]
env:
AZ_RG_NAME: 'rg-dotnetcontainerapp'
AZ_RG_LOCATION: 'eastus'
AZ_ACR_NAME: 'acrdotnetcontainerapp'
AZ_AKS_NAME: 'aksdotnetcontainerapp'
AZ_SQLSERVER_NAME: 'sqldotnetcontainerapp'
AZ_KV_NAME: 'kvdotnetcontainerap'
AZ_LOADTEST_NAME: 'ltstdotnetcontainerap'
jobs:
iac:
runs-on: ubuntu-latest
steps:
# Checkout code
- name: Checkout
uses: actions/checkout@v3
# Log into Azure
- name: Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Create Resource Group
- name: Create Resource Group
run: |
if [ $(az group exists --name ${{ env.AZ_RG_NAME }}) = false ]; then
az group create --name ${{ env.AZ_RG_NAME }} --location ${{ env.AZ_RG_LOCATION }}
else
echo "Resource group already exists"
fi
# Deploy Bicep file
- name: Deploy Template
uses: Azure/arm-deploy@v1
with:
resourceGroupName: ${{ env.AZ_RG_NAME }}
region: ${{ env.AZ_RG_LOCATION }}
template: src/ContainerApp.IAC/aks.bicep
deploymentMode: Incremental
deploymentName: 'gh-actions'
parameters: acrName=${{ env.AZ_ACR_NAME }} clusterName=${{ env.AZ_AKS_NAME }} sqlserverName=${{ env.AZ_SQLSERVER_NAME }} sqlAdminLogin=${{ secrets.AZURE_SQL_USERNAME }} sqlAdminPassword=${{ secrets.AZURE_SQL_PASSWORD }} kvName=${{ env.AZ_KV_NAME }} loadTestName=${{ env.AZ_LOADTEST_NAME }}
build:
needs: iac
runs-on: ubuntu-latest
steps:
# Checkout code
- name: Checkout
uses: actions/checkout@v3
- name: Change Version variable
uses: microsoft/variable-substitution@v1
with:
files: 'src/ContainerApp.WebApp/appsettings.json'
env:
Version: ${{ GITHUB.RUN_NUMBER }}
# Log into Azure
- name: Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set the value in bash
id: setup-variables
run: |
url_acr=$(az acr show -n ${{ env.AZ_ACR_NAME }} --query loginServer --output tsv)
login_acr=$(az acr credential show -n ${{ env.AZ_ACR_NAME }} --query username --output tsv)
password_acr=$(az acr credential show -n ${{ env.AZ_ACR_NAME }} --query passwords[0].value --output tsv)
echo "::add-mask::$url_acr"
echo "::add-mask::$login_acr"
echo "::add-mask::$password_acr"
echo "ACR_URL=$url_acr" >> $GITHUB_ENV
echo "ACR_LOGIN=$login_acr" >> $GITHUB_ENV
echo "ACR_PASSWORD=$password_acr" >> $GITHUB_ENV
- name: Docker Login
uses: docker/[email protected]
with:
registry: ${{ env.ACR_URL }}
username: ${{ env.ACR_LOGIN }}
password: ${{ env.ACR_PASSWORD }}
- name: Build and push TodoApi image
uses: docker/build-push-action@v3
with:
context: src/ContainerApp.TodoApi
file: src/ContainerApp.TodoApi/Dockerfile
tags: |
${{ env.ACR_URL }}/containerapp.todoapi:${{ GITHUB.RUN_NUMBER }}
${{ env.ACR_URL }}/containerapp.todoapi:latest
push: true
- name: Build and push WeatherApi image
uses: docker/build-push-action@v3
with:
context: src/ContainerApp.WeatherApi
file: src/ContainerApp.WeatherApi/Dockerfile
tags: |
${{ env.ACR_URL }}/containerapp.weatherapi:${{ GITHUB.RUN_NUMBER }}
${{ env.ACR_URL }}/containerapp.weatherapi:latest
push: true
- name: Build and push ContainerApp.WebApp image
uses: docker/build-push-action@v3
with:
context: src/ContainerApp.WebApp
file: src/ContainerApp.WebApp/Dockerfile
tags: |
${{ env.ACR_URL }}/containerapp.webapp:${{ GITHUB.RUN_NUMBER }}
${{ env.ACR_URL }}/containerapp.webapp:latest
push: true
- name: Replace variables
run: |
echo Build Number = ${{ GITHUB.RUN_NUMBER }}
urlApp=${{ env.ACR_URL }}/containerapp.webapp:${{ GITHUB.RUN_NUMBER }}
urlTodoApi=${{ env.ACR_URL }}/containerapp.todoapi:${{ GITHUB.RUN_NUMBER }}
urlWeatherApi=${{ env.ACR_URL }}/containerapp.weatherapi:${{ GITHUB.RUN_NUMBER }}
sqlConnString="Server=tcp:${{ env.AZ_SQLSERVER_NAME }}.database.windows.net,1433;Initial Catalog=TodoItem_DB;Persist Security Info=False;User ID=${{ secrets.AZURE_SQL_USERNAME }};Password=${{ secrets.AZURE_SQL_PASSWORD }};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
echo URL APP = $urlApp
echo URL TODO API = $urlTodoApi
echo URL WEATHER API = $urlWeatherApi
echo "*** Replace ContainerApp.WebApp/k8s-deployment.yaml ***"
sed -i "s|_ImageUrlApp_|$urlApp|g" src/ContainerApp.WebApp/k8s-deployment.yaml
echo "*** Replace ContainerApp.TodoApi/k8s-deployment.yaml ***"
sed -i "s|_ImageUrlApi_|$urlTodoApi|g" src/ContainerApp.TodoApi/k8s-deployment.yaml
sed -i "s|_ConnString_|$sqlConnString|g" src/ContainerApp.TodoApi/k8s-deployment.yaml
echo "*** Replace ContainerApp.WeatherApi/k8s-deployment.yaml ***"
sed -i "s|_ImageUrlApi_|$urlWeatherApi|g" src/ContainerApp.WeatherApi/k8s-deployment.yaml
- name: Upload Kubernetes files
uses: actions/[email protected]
with:
name: k8s
path: |
src/ContainerApp.WebApp/k8s-deployment.yaml
src/ContainerApp.TodoApi/k8s-deployment.yaml
src/ContainerApp.WeatherApi/k8s-deployment.yaml
release-to-dev:
needs: build
runs-on: ubuntu-latest
environment: DEV
steps:
- name: Download k8s artifact
uses: actions/[email protected]
with:
name: k8s
path: my-app-artifact
# Log into Azure
- name: Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Set the target Azure Kubernetes Service (AKS) cluster.
- name: Deploy set context
uses: azure/aks-set-context@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
cluster-name: ${{ env.AZ_AKS_NAME }}
resource-group: ${{ env.AZ_RG_NAME }}
# Deploy app to AKS
- name: Deploy to k8s
uses: azure/k8s-deploy@v1
with:
namespace: default
manifests: |
my-app-artifact/ContainerApp.WebApp/k8s-deployment.yaml
my-app-artifact/ContainerApp.TodoApi/k8s-deployment.yaml
my-app-artifact/ContainerApp.WeatherApi/k8s-deployment.yaml