Skip to content

Commit 4feb1f3

Browse files
committed
Update for next lecture
1 parent 4cc7dd2 commit 4feb1f3

File tree

9 files changed

+147
-62
lines changed

9 files changed

+147
-62
lines changed

.DS_Store

0 Bytes
Binary file not shown.

2024/Blazor/.DS_Store

0 Bytes
Binary file not shown.

2024/Blazor/azure-pipelines.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
trigger:
22
branches:
33
include:
4-
- master
4+
- main
55

66
pool:
77
vmImage: "windows-latest"
@@ -25,4 +25,4 @@ steps:
2525
displayName: "Publish Artifact: drop"
2626
inputs:
2727
PathtoPublish: "$(Build.ArtifactStagingDirectory)"
28-
ArtifactName: "backend"
28+
ArtifactName: "application"

2024/Pulumi/Program.cs

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,14 @@ static string PrefixZeroes(string name)
3030
var internalTestDbUsername = "InternalTestAdministrator";
3131
var internalTestDbPassword = CreatePassword("internal-test-password");
3232

33-
var team1UserName = "Team1Administrator";
34-
var team1Password = CreatePassword("team1-password");
33+
var team1UserName = "AlfaPreberuAdministrator";
34+
var team1Password = CreatePassword("alfa-preberu-password");
3535

36-
var team2UserName = "Team2Administrator";
37-
var team2Password = CreatePassword("team2-password");
36+
var team2UserName = "DynamicRandomAdministrator";
37+
var team2Password = CreatePassword("dynamic-random-password");
3838

39-
var team3UserName = "Team3Administrator";
40-
var team3Password = CreatePassword("team3-password");
41-
42-
var team4UserName = "Team4Administrator";
43-
var team4Password = CreatePassword("team4-password");
39+
var team3UserName = "SpolecenstvoBinaryAdministrator";
40+
var team3Password = CreatePassword("spolecenstvo-binary-password");
4441

4542
Output<string> CreatePassword(string name) =>
4643
new RandomPassword(PrefixDashed(name),
@@ -109,10 +106,9 @@ Output<string> CreatePassword(string name) =>
109106
});
110107

111108
var internalTestDatabase = CreateDatabase(PrefixDashed("internal-test"), sqlServer, resourceGroup);
112-
var team1database = CreateDatabase(PrefixDashed("team1"), sqlServer, resourceGroup);
113-
var team2database = CreateDatabase(PrefixDashed("team2"), sqlServer, resourceGroup);
114-
var team3database = CreateDatabase(PrefixDashed("team3"), sqlServer, resourceGroup);
115-
var team4database = CreateDatabase(PrefixDashed("team4"), sqlServer, resourceGroup);
109+
var team1database = CreateDatabase(PrefixDashed("alfa-preberu"), sqlServer, resourceGroup);
110+
var team2database = CreateDatabase(PrefixDashed("dynamic-random"), sqlServer, resourceGroup);
111+
var team3database = CreateDatabase(PrefixDashed("spolecenstvo-binary"), sqlServer, resourceGroup);
116112

117113
Database CreateDatabase(string name, Server server, ResourceGroup rg)
118114
{
@@ -134,10 +130,9 @@ Database CreateDatabase(string name, Server server, ResourceGroup rg)
134130

135131
CreateSecret(PrefixDashed("administrator-password"), adminDbPassword);
136132
CreateSecret(PrefixDashed("internal-test-connection-string"), GetConnectionString(PrefixDashed("internal-test"), internalTestDbUsername, internalTestDbPassword));
137-
CreateSecret(PrefixDashed("team1-connection-string"), GetConnectionString(PrefixDashed("team1"), team1UserName, team1Password));
138-
CreateSecret(PrefixDashed("team2-connection-string"), GetConnectionString(PrefixDashed("team2"), team2UserName, team2Password));
139-
CreateSecret(PrefixDashed("team3-connection-string"), GetConnectionString(PrefixDashed("team3"), team3UserName, team3Password));
140-
CreateSecret(PrefixDashed("team4-connection-string"), GetConnectionString(PrefixDashed("team4"), team4UserName, team4Password));
133+
CreateSecret(PrefixDashed("alfa-preberu-connection-string"), GetConnectionString(PrefixDashed("alfa-preberu"), team1UserName, team1Password));
134+
CreateSecret(PrefixDashed("dynamic-random-connection-string"), GetConnectionString(PrefixDashed("dynamic-random"), team2UserName, team2Password));
135+
CreateSecret(PrefixDashed("spolecenstvo-binary-connection-string"), GetConnectionString(PrefixDashed("spolecenstvo-binary"), team3UserName, team3Password));
141136

142137

143138
Output<string> GetConnectionString(string databaseName, string userName, Output<string> password)
@@ -175,22 +170,17 @@ Secret CreateSecret(string name, Output<string> value)
175170

176171
Output.Tuple(adminDbPassword, team1Password, sqlServer.Name)
177172
.Apply(async output => await CreateUser(
178-
output.Item3, PrefixDashed("team1"), team1UserName,
173+
output.Item3, PrefixDashed("alfa-preberu"), team1UserName,
179174
output.Item1, output.Item2));
180175

181176
Output.Tuple(adminDbPassword, team2Password, sqlServer.Name)
182177
.Apply(async output => await CreateUser(
183-
output.Item3, PrefixDashed("team2"), team1UserName,
178+
output.Item3, PrefixDashed("dynamic-random"), team1UserName,
184179
output.Item1, output.Item2));
185180

186181
Output.Tuple(adminDbPassword, team3Password, sqlServer.Name)
187182
.Apply(async output => await CreateUser(
188-
output.Item3, PrefixDashed("team3"), team1UserName,
189-
output.Item1, output.Item2));
190-
191-
Output.Tuple(adminDbPassword, team4Password, sqlServer.Name)
192-
.Apply(async output => await CreateUser(
193-
output.Item3, PrefixDashed("team4"), team1UserName,
183+
output.Item3, PrefixDashed("spolecenstvo-binary"), team1UserName,
194184
output.Item1, output.Item2));
195185

196186

@@ -216,11 +206,6 @@ async Task CreateUser(string sqlServerName, string databaseName, string username
216206

217207
string GetAdminConnectionString(string sqlServerName, string databaseName, string adminPassword)
218208
{
219-
adminDbPassword.Apply(password =>
220-
{
221-
Log.Info($"{sqlServerName} {databaseName} {adminDbUsername} {password}");
222-
return password;
223-
});
224209

225210
return $"Server=tcp:{sqlServerName}.database.windows.net,1433;" +
226211
$"Initial Catalog={databaseName};" +
@@ -250,10 +235,9 @@ string GetAdminConnectionString(string sqlServerName, string databaseName, strin
250235
}
251236
});
252237
CreateWebApp(PrefixDashed("internal-test"), appServicePlan);
253-
CreateWebApp(PrefixDashed("team1"), appServicePlan);
254-
CreateWebApp(PrefixDashed("team2"), appServicePlan);
255-
CreateWebApp(PrefixDashed("team3"), appServicePlan);
256-
CreateWebApp(PrefixDashed("team4"), appServicePlan);
238+
CreateWebApp(PrefixDashed("alfa-preberu"), appServicePlan);
239+
CreateWebApp(PrefixDashed("dynamic-random"), appServicePlan);
240+
CreateWebApp(PrefixDashed("spolecenstvo-binary"), appServicePlan);
257241

258242
WebApp CreateWebApp(string name, AppServicePlan appServicePlan)
259243
{

2024/React/azure-pipelines.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
trigger:
22
branches:
33
include:
4-
- master
4+
- main
55

66
pool:
77
vmImage: "windows-latest"
@@ -25,4 +25,4 @@ steps:
2525
displayName: "Publish Artifact: drop"
2626
inputs:
2727
PathtoPublish: "$(Build.ArtifactStagingDirectory)"
28-
ArtifactName: "backend"
28+
ArtifactName: "application"

docs/.DS_Store

0 Bytes
Binary file not shown.

docs/2024/AzureDevops_Release_1.PNG

50.4 KB
Loading

docs/2024/AzureDevops_Release_2.PNG

98.5 KB
Loading

docs/2024/index.md

Lines changed: 125 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ nav_order: 2
55
---
66

77
# STAG-AUIUI-P8VT 2024
8+
89
{: .no_toc }
910

1011
# Náplň a požadavky
12+
1113
Kurz AP8VT si klade za cíl naučit studenty kvalitně a efektivně vyvíjet webové aplikace podle moderních přístupů a postupů. Přednášky jsou realizovány také formou praktických workshopů, v rámci nichž dílčí týmy postupně budují svůj webový produkt. Cvičení se zaměřují na využívání konkrétních technologií, pomocí kterých studenti průběžně realizují týmový projekt.
1214

1315
## Lektoři
@@ -27,56 +29,62 @@ Product Owner
2729
**David Sedlář**
2830
Cvičící, .NET
2931

30-
3132
## Dochazka
33+
3234
Povoleny jsou 3 absence, v opačném případě je třeba donést omluvenku od doktora.
3335

3436
## Způsob hodnocení
37+
3538
Studenti mohou během semestru získat až 70 bodů v následující struktuře:
3639

3740
### Projekt – 65 bodů
41+
3842
Projekt je rozdělen do 5 sprintů, každý po 10 bodech.
3943
Finální sprint (ve zkouškovém období) má hodnotu 15 bodů.
4044

4145
### Code review – 5 bodů
46+
4247
Před finální prezentací proběhne hodnocení kvality zdrojových kódů, kde má tým možnost získat a obhajit si dodatečných 5 bodů.
4348

4449
Bodování projektu sestává z hodnocení dílčích sprintů (Scrum terminologie). Konkrétní bodování za jednotlivé sprinty probíhá následovně:
4550

4651
Vedení kurzu a product owneri ohodnotí increment každého sprintu hodnotou 0-100 % za plánování a jeho formální správnost, dodané množství práce (increment), komunikaci a projev v průběhu sprintu, prezentaci při sprint review.
47-
Všechna tři hodnocení se zprůměrují (např. 85 %) a tímto průměrem se násobí maximální možný počet bodů (10 bodů * počet členů týmu). Například pro 5ti-členný tým by součet byl max. 50 bodů, který mohl tým za sprint získat. Body se zaokrouhlí na celé číslo nahoru a tím se získá bodové ohodnocení za tento sprint pro daný tým (např. 43 bodů).
52+
Všechna tři hodnocení se zprůměrují (např. 85 %) a tímto průměrem se násobí maximální možný počet bodů (10 bodů \* počet členů týmu). Například pro 5ti-členný tým by součet byl max. 50 bodů, který mohl tým za sprint získat. Body se zaokrouhlí na celé číslo nahoru a tím se získá bodové ohodnocení za tento sprint pro daný tým (např. 43 bodů).
4853
Tyto body si mezi sebe rozdělí členové týmu na základě vzájemné dohody, jak kdo v daném sprintu pracoval. Tým je povinen nahlásit do 3 dnů od sprint review počet bodů pro jednotlivé členy v týmu (např. Karel 8b, Monika 10 bodů, Pepa 5 bodů, Simona 10 bodů, Šimon 10 bodů). Tímto způsobem můžete reflektovat skutečnou práci na projektu napříč týmem.
4954

5055
### Zvláštní pravidla
56+
5157
Za jeden sprint může jednotlivec v rámci přerozdělování bodů v týmu dostat i více bodů než 10, maximálně však o 2 body více než je maximum.
5258
Počet přidělených bodů na jednoho zaokrouhlete na celá čísla.
5359
Za finální (poslední) sprint je nutné, aby tým obdržel minimálně 50% bodů pro úspěšné absolvování kurzu. V případě, že se tak nestane, bude vedoucí kurzu s týmem řešit celou situaci a buď celý tým nebo určití jedinci dostanou z kurzu známku F.
5460

5561
Přepočet bodů na konkrétní známky odpovídá standardům vysokých škol.
5662

5763
## Program výuky - Seminář
64+
5865
1. Týden 5.2 - Seznámení s předmětem, Představení projektu, Sestavení týmů.
5966
2. Týden 12.2 - Lean Canvas workshop.
60-
3. Týden 19.2 - Základy Scrumu / (External) UI/UX triky
67+
3. Týden 19.2 - Základy Scrumu / (External) UI/UX triky
6168
4. Týden 26.2 - Sprint review 1.
6269
5. Týden 4.3 - Workshop o týmových odhadech / Backlog.
6370
6. Týden 11.3 - Sprint review 2.
6471
7. Týden 18.3 - Scrum game
6572
8. Týden 25.3 - Sprint review 3.
6673
9. Týden 1.4 - Odpada - Velikonoce
6774
10. Týden 8.4 - Sprint review 4.
68-
11. Týden 15.4 - (External) Tyrkysová organizace / agilní vývoj projektu: Honza Podzimek.
75+
11. Týden 15.4 - (External) Tyrkysová organizace / agilní vývoj projektu: Honza Podzimek.
6976
12. Týden 22.4 - Sprint review 5.
7077
13. Týden 29.4 - Finální retrospektiva / Pokročilý Scrum.
7178
14. Týden 6.5 - Finální prezentace projektu.
7279

7380
## Program výuky - Cvičení
81+
7482
1. Týden - Založení projektu ze šablony a nastavení lokálního vývojového prostředí
7583
2. Týden - Git, Continuous development & Continuous integration, Azure
7684
3. Týden - Databáze, Entity framework, React app intro
7785
4. Týden - React Functional components, Bootstrap, REST API, Fetch
7886
5. Týden - Autentizace a autorizace
79-
6. Týden - Logování aplikace, Individuální podpora týmů
87+
6. Týden - Logování aplikace, Individuální podpora týmů
8088
7. Týden - Scrum game
8189
8. Týden - Clean Code/Atomic design
8290
9. Týden - Odpada - Velkkonoce
@@ -87,10 +95,11 @@ Přepočet bodů na konkrétní známky odpovídá standardům vysokých škol.
8795
14. Týden - Už nebude cvičení.
8896

8997
## Table of contents
98+
9099
{: .no_toc .text-delta }
91100

92101
1. TOC
93-
{:toc}
102+
{:toc}
94103

95104
---
96105

@@ -100,9 +109,9 @@ Přepočet bodů na konkrétní známky odpovídá standardům vysokých škol.
100109

101110
- [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
102111
- Your favorite IDE
103-
- [VS Code](https://code.visualstudio.com/)
104-
- [Visual studio community](https://visualstudio.microsoft.com/cs/vs/community/)
105-
- [Jetbrains Rider](https://www.jetbrains.com/rider/)
112+
- [VS Code](https://code.visualstudio.com/)
113+
- [Visual studio community](https://visualstudio.microsoft.com/cs/vs/community/)
114+
- [Jetbrains Rider](https://www.jetbrains.com/rider/)
106115
- [Node JS](https://nodejs.org/en/) for react development
107116
- [MSSQL](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjUwczW8bmDAxU11gIHHZcPB90QFnoECBIQAQ&url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fsql-server%2Fsql-server-downloads&usg=AOvVaw0d74lgRcnfX6ZThGwL_ED6&opi=89978449) or a [Docker image](https://hub.docker.com/_/microsoft-mssql-server) (mcr.microsoft.com/mssql/server:latest) for local database. And some management tool
108117
- [SQL Management Studio](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)
@@ -113,21 +122,22 @@ Přepočet bodů na konkrétní známky odpovídá standardům vysokých škol.
113122
1. Copy the project
114123

115124
2. Install MSSQL Server and run it or run your MSSQL Docker Image
116-
- `docker pull mcr.microsoft.com/mssql/server:latest`
117-
- `docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest`
118-
- See how to use section in https://hub.docker.com/_/microsoft-mssql-server
125+
126+
- `docker pull mcr.microsoft.com/mssql/server:latest`
127+
- `docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest`
128+
- See how to use section in https://hub.docker.com/_/microsoft-mssql-server
119129

120130
3. Create a database in your local SQL server
121131

122-
`Create Database "STAG-AUIUI-P8VT"`
132+
`Create Database "STAG-AUIUI-P8VT"`
123133

124-
4. Change your connection string in your `appsettings.json`
134+
4. Change your connection string in your `appsettings.json`
125135

126-
```js
127-
"ConnectionStrings": {
128-
"Database": "Data Source=localhost;Initial Catalog=STAG-AUIUI-P8VT;Integrated Security=false;User ID=sa;Password=yourStrong(!)Password;TrustServerCertificate=true"
129-
},
130-
```
136+
```js
137+
"ConnectionStrings": {
138+
"Database": "Data Source=localhost;Initial Catalog=STAG-AUIUI-P8VT;Integrated Security=false;User ID=sa;Password=yourStrong(!)Password;TrustServerCertificate=true"
139+
},
140+
```
131141

132142
5. Build the application via `dotnet build`
133143

@@ -137,10 +147,10 @@ Přepočet bodů na konkrétní známky odpovídá standardům vysokých škol.
137147
`dotnet dev-certs https `
138148

139149
8. This will run both backend and frontend as one application
140-
- The ASP.NET server will serve as a host to both API and frontend
141-
142-
9. In `Fetch Data` page you can see some data being pull from API, this data is stored in database an has been seeded via a migration.
143150

151+
- The ASP.NET server will serve as a host to both API and frontend
152+
153+
9. In `Fetch Data` page you can see some data being pull from API, this data is stored in database an has been seeded via a migration.
144154

145155
More info
146156

@@ -150,8 +160,99 @@ More info
150160

151161
## 2. Lekce - Git, Continuous development & Continuous integration, Azure
152162

163+
**Overview:**
164+
- Git & best practices presentation
165+
- Create a continuous integration pipeline to build your application.
166+
- Create a continous delivery pipeline (release) to deploy your application to server.
167+
- Setup git policies for branches.
168+
169+
170+
**Prerequisites:**
153171
- [Git](https://git-scm.com/downloads)
172+
- Pushed changes into a repository in azure devops
173+
174+
### Git and development with it
175+
176+
1. Git Demo - Basics, Commit, Branch, Checkout, Rebase, merge
177+
2. Git Demo - Gitflow
178+
3. Git Demo - Trunk based
179+
4. How to colaborate using git
180+
181+
### Create a build definition using YAML
182+
183+
Setup build pipelines with branch push trigger in azure devops
184+
185+
```yml
186+
trigger:
187+
branches:
188+
include:
189+
- main
190+
191+
pool:
192+
vmImage: "windows-latest"
193+
194+
variables:
195+
buildConfiguration: "Release"
196+
197+
steps:
198+
- task: UseDotNet@2
199+
displayName: Use Dotnet 8
200+
inputs:
201+
version: "8.0.x"
202+
203+
- script: dotnet clean
204+
displayName: "dotnet clean"
205+
206+
- script: dotnet publish -o $(Build.ArtifactStagingDirectory)
207+
displayName: "dotnet publish"
208+
209+
- task: PublishBuildArtifacts@1
210+
displayName: "Publish Artifact: drop"
211+
inputs:
212+
PathtoPublish: "$(Build.ArtifactStagingDirectory)"
213+
ArtifactName: "application"
214+
```
215+
216+
### Create a release pipeline in Azure DevOps
217+
218+
To host our applications, we will use Azure app service.
219+
To deploy our application, we will create a release pipeline.
220+
221+
Release pipeline:
222+
223+
1. Create new Release pipeline
224+
2. Select 'Azure App Service deployment'
225+
3. Add artifact
226+
4. Configure Azure App Service deployment
227+
- Add subscription (admin needed)
228+
- Add application (admin needed)
229+
- Select Package/Folder location (from build)
230+
231+
![AzureDevops_Release_1](AzureDevops_Release_1.PNG)
232+
![AzureDevops_Release_2](AzureDevops_Release_2.PNG)
233+
234+
If we did everything correctly, we should have our application deployed and it should look like this:
235+
236+
- [Azure/Application](https://cngroup-utb--2023-os-internaltest.azurewebsites.net/)
237+
238+
More Info:
239+
240+
- [Azure pipelines](https://learn.microsoft.com/en-us/azure/devops/pipelines/create-first-pipeline?view=azure-devops&tabs=net%2Ctfs-2018-2%2Cbrowser)
241+
242+
### Application urls of teams
243+
244+
- AlfaskvadraVlkousi - Preberu ukradnu: https://utb--2024-alfa-preberu.azurewebsites.net/
245+
- Dynamic Developers - Random: https://utb--2024-dynamic-random.azurewebsites.net/
246+
- Spolecenstvo Simona - Binary Brothers: https://utb--2024-spolecenstvo-binary.azurewebsites.net/
247+
- Internal_Test: https://utb--2024-internal-test.azurewebsites.net/
248+
249+
How can i get my release running automagically after a new build ?
154250
251+
More info:
155252
156-
More Info
157-
- [Learn git branching](https://learngitbranching.js.org/)
253+
- [YAML](https://yaml.org/)
254+
- [Azure devops pipelines](https://docs.microsoft.com/cs-cz/azure/devops/pipelines/?view=azure-devops)
255+
- [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration)
256+
- [Continuous Deployment](https://en.wikipedia.org/wiki/Continuous_deployment)
257+
- [Learn git branching](https://learngitbranching.js.org/)
258+
- [Sandbox](https://learngitbranching.js.org/?NODEMO)

0 commit comments

Comments
 (0)