Skip to content

Commit 71e4365

Browse files
committed
Use WinGet instead of Chocolatey
1 parent 36d0d10 commit 71e4365

9 files changed

+567
-243
lines changed

buildmachine/README-OLD.md

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
# Build Machine
2+
3+
Počítač slúži na build našich projektov.
4+
5+
Inštalácia potrebných programov sa robí pomocou [Chocolatey](https://chocolatey.org/).
6+
7+
Na čo najjednoduchšie nakonfigurovanie počítača slúžia skripty `install.ps1` a `configure.ps1`. Oba skripty je potrebné spustiť
8+
ako administrátor.
9+
10+
## Chocolatey
11+
12+
Ak je potrebné pridať nový program, prípadne niečo zmeniť, používajte `choco`. _Ručne_ inštalujeme iba to, na čo Choco nemá
13+
balíček, prípadne sú na to nejkaé iné vážne dôvody. Zoznam základných vecí čo sa inštauljú je v súbore
14+
[`buildmachine-packages.config`](https://github.com/Kros-sk/kros-sk.github.io/blob/master/buildmachine/buildmachine-packages.config),
15+
tu na na našom GitHub-e. Ak je potrebné niečo zmeniť/pridať, nainštaluj to z príkazovej riadky (ako admin) a pridaj do toho súboru.
16+
Jednoducho si tak v prípade potreby budeme vedieť spraviť ďalší build počítač. Prvé nainštalovanie z tohto zoznamu sa spraví príkazom:
17+
18+
``` sh
19+
choco install ./buildmachine-packages.config --yes
20+
```
21+
22+
`choco` spúšťaj v administrátorskom režime obyčajného _command prompt-u_ (`cmd`). Je možné to spustiť aj vo Windows Terminále,
23+
prípadne v PowerShelli, ale tieto veci sa tiež aktualizujú cez `choco`, takže ich aktualizácia by neprešla, ak by boli spustené.
24+
25+
Ak bude potrebné pridať nejakú utilitku, čo sa neinštaluje štandardne, ale iba kopíruje, pridaj ju do zložky `C:\tools`,
26+
nech máme takéto veci na jednom mieste. Táto cesta je aj zapísaná v premennej `PATH`, takže všetko čo je v nej, je priamo spustiteľné.
27+
28+
### Základné príkazy
29+
30+
Zoznam aktuálne nainštalovaných vecí:
31+
32+
``` sh
33+
choco list --local
34+
```
35+
36+
Nainštalovanie nového balíčka:
37+
38+
``` sh
39+
choco install program-name --yes
40+
```
41+
42+
Zoznam neaktuálnych vecí, tzn. programov, ktoré už majú novšiu verziu, než je nainštalovaná:
43+
44+
``` sh
45+
choco outdated
46+
```
47+
48+
Aktualizácia všetkých neaktuálnych programov:
49+
50+
``` sh
51+
choco upgrade all --yes
52+
```
53+
54+
Niekedy nechceme aktualizovať úplne všetko. Štandardne napríklad Terraform neaktualizujeme okamžite. Vtedy je potrebné napísať
55+
meno programu, ktorý sa má aktualizovať namiesto `all`. Takto je možné zadať aj viacero programov naraz, oddelených medzerou:
56+
57+
``` sh
58+
choco upgrade program-1 program-2 program-3 --yes
59+
```
60+
61+
## Skript `install.ps1`
62+
63+
Skript nainštaluje samotné **chocolatey** a potom aj všetky ostatné programy v `buildmachine-packages.config`.
64+
Nie je potrebné nič inštalovať popredu, stačí spustiť Powershell ktorý aktuálne v systéme je. Chocolatey nainštaluje aj
65+
Powershell Core, či Windows Terminal.
66+
67+
Skript nemá žiadne parametre.
68+
69+
## Skript `configure.ps1`
70+
71+
Skript nakonfiguruje všetko potrebné, čo je možné spraviť automaticky a to je takmer všetko, čo je popísané ďalej v tomto
72+
dokumente.
73+
74+
Skript má nasledovné parametre (všetky nepovinné):
75+
76+
- `-Proxy` – adresa proxy servera, zadaná aj so schémou (napr. `http://`). Predvolená hodnota je prázdny reťazec (bez proxy).
77+
- `-NewmanPath` – cesta, kde bude nainštalovaný Newman. Predvolená hodnota je `C:\newman`.
78+
- `-ToolsPath` – cesta k rôznym nástrojom. Táto cesta je pridaná do systémovej premennej `PATH`, aby nástroje boli globálne dostupné. Predvolená hodnota je `C:\tools`,
79+
- `-CachePath` – cesta, kde sa nastaví keš pre rôzne programy (NPM, Cypress…). Predvolená hodnota je `C:\cache`.
80+
81+
## Script `install-load-tests.ps1`
82+
83+
Skript nainštaluje / nakonfiguruje všetko potrebné pre load testy. Tento script je potrebné spúšťať len na build mašinách,
84+
ktoré budú spúšťať load testy. Nainštaluje software, ktorý je definovaný v `load-tests-buildmachine-packages.config`.
85+
Taktiež stiahne a rozbalí JMeter _(by default do `C:\tools\jmeter`)_ a nainštaluje potrebné pluginy.
86+
87+
Skript má nasledovné parametre (všetky nepovinné):
88+
89+
- `JMeterVersion` - Verzia JMeter-u, ktorá sa má nainštalovať _(default je `5.4.1`)_.
90+
- `ToolsPath` - Adresár, kde sa nachádzajú naše tools. Tam sa nainštaluje JMeter _(default je `C:\tools`)_.
91+
- `PluginsList` - Čiarkou oddelený zoznam pluginov _(Plugin Id)_, ktoré sa majú nainštalovať _(default je `jpgc-graphs-basic,jpgc-casutg,jpgc-prmctl`)_.
92+
93+
## PowerShell (`install.ps1`)
94+
95+
Je potrebné povoliť spúšťanie skriptov: `Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine`.
96+
Skript `install.ps1` to nastaví sám.
97+
98+
## DevOps build agenti
99+
100+
**DevOps agentov treba konfigurovať nakoniec, až keď je nainštalované a nastavné všetko ostatné**, aby si zistili info o všetkom
101+
čo je v počítači. V prípade, že sa neskôr nainštaluje niečo nové, čo má na agentov vplyv, je potrebné reštartovať ich služby
102+
(prípadne počítač).
103+
104+
Každý agent musí bežať pod svojim vlastným používateľom. Je to kvôli problémom, keď sa agenti bili o nejaké zdroje počas buildu,
105+
ak bežali pod spoločným účtom. Na jednoduché pridanie viacerých používateľov naraz slúži skript
106+
[`create-users.ps1`](https://github.com/Kros-sk/kros-sk.github.io/blob/master/buildmachine/create-users.ps1).
107+
108+
Agentovi je potrebné nastaviť proxy server. V adresári agenta je potrebné vytvoriť súbor `.proxy` (pozor, súbor naozaj začína
109+
bodkou), v ktorom je zapísaná adresa proxy servera aj s protokolom a portom (napr. `http://123.112.1.9:1234`).
110+
111+
Niekedy sú po rozbalení ZIP-u agenta zblbnuté práva na jeho adresári a súboroch, čo sa prejavuje chybovou hláškou:
112+
113+
> This access control list is not in canonical form and therefore cannot be modified.
114+
115+
Vtedy treba spustiť nasladovný príkaz: `icacls.exe {agent-folder} /reset /T /C /L /Q`. Parameter `{agent-folder}` je cesta
116+
k zložke s agentom.
117+
118+
Samotný agent sa potom nakonfiguruje jednoducho nasledovným príkazom:
119+
120+
``` sh
121+
.\config.cmd --unattended --url "https://dev.azure.com/krossk/" --auth pat --token {token} --runAsService --pool {pool-name} --agent {agent-name} --windowsLogonAccount {user-name} --windowsLogonPassword {user-password}
122+
```
123+
124+
- `{token}`: PAT (personal access token) v DevOps, ktorý musí mať nastavený scope **Read & manage** pre **Agent Pools**.
125+
Tento token môže mať krátku platnosť a je potrebný iba na zaregistrovanie agenta v DevOps agent pool-e.
126+
Pre samotný beh agenta potrebný nie je.
127+
- `{pool-name}`: Meno pool-u, do ktorého bude agent pridaný.
128+
- `{agent-name}`: Meno agenta.
129+
- `{user-name}`: Meno používateľa, pod ktorým agent beží.
130+
- `{user-password}`: Heslo používateľa, pod ktorým agent beží.
131+
132+
**Dôležité nastavenie pre Agent Pools** - v Devopse v jeho nastaveniach (prístupné cez `Organization settings`),
133+
treba nastaviť `Maintenance job`, ktorý bude pravidelne prečisťovať miesto. Nastaviť ho podľa iných pools tak,
134+
aby sa ideálne vykonávanie robilo v iných časoch (nie je to nutná podmienka).
135+
136+
## Systémové premenné (`configure.ps1`)
137+
138+
### Všeobecné systémové premenné
139+
140+
- `CYPRESS_CACHE_FOLDER` – štandardne nastavená na `C:\cache\cypress`. Cypress si tu ukladá stiahnuté binárky.
141+
- `NPM_CONFIG_CACHE` – štandardne nastavená na `C:\cache\npm`. NPM si tu ukladá stiahnuté balíčky.
142+
- `NUGET_PACKAGES` – štandardne nastavená na `C:\cache\nuget`. NuGet si tu ukaldá stiahnuté balíčky.
143+
144+
### Proxy systémové premenné
145+
146+
Hodnota `{proxy}` je IP adresa nášho proxy servera aj so schémou a portom (http://a.b.c.d:port).
147+
148+
V systéme je nutné nastaviť niekoľko premenných (pre celý systém, nie iba pre používateľa):
149+
150+
- `HTTP_PROXY` - `{proxy}`
151+
- `HTTPS_PROXY` - `{proxy}`
152+
153+
Všetky systémové premenné automaticky nastaví skript `configure.ps1`.
154+
155+
## Web Deploy (potrebné spraviť ručne)
156+
157+
> Web deploy služieb používajú iba na SSW, takže ak nie je potrebné, netreba sa s ním zaoberať.
158+
159+
Niektoré release pipeline-y používajú _Web Deploy_ spôsob nasadenia služby do Azure,
160+
[takže je potrebné ho nainštalovať](https://www.iis.net/downloads/microsoft/web-deploy).
161+
Po inštalácii je potrebné manuálne nastaviť proxy v súbore `msdeploy.exe.config`, na oboch miestach:
162+
163+
- `C:\Program Files\IIS\Microsoft Web Deploy V3`
164+
- `C:\Program Files (x86)\IIS\Microsoft Web Deploy V3`
165+
166+
Do súborov je potrebné doplniť nasledujúcu sekciu. _Adresu proxy servera je potrebné zadať aj so schémou `http://`._
167+
168+
``` xml
169+
<system.net>
170+
<defaultProxy>
171+
<proxy usesystemdefault="true" proxyaddress="http://{proxy}" bypassonlocal="true" />
172+
</defaultProxy>
173+
</system.net>
174+
```
175+
176+
## NPM (`configure.ps1`)
177+
178+
Nastavenie proxy (je potrebné ho zadať aj so schémou `http://`):
179+
180+
``` sh
181+
npm config set proxy {proxy}
182+
npm config set https-proxy {proxy}
183+
```
184+
185+
Po nakonfigurovaní nového servera sa môže stať, že projekt si nevie stiahnuť npm balíčky
186+
(konkrétne sa to stalo pre projekt s Cypress testami). Vtedy treba spustiť príkaz:
187+
188+
``` sh
189+
npm config set registry https://registry.npmjs.org/
190+
```
191+
192+
### Globálne NPM nástroje (`configure.ps1`)
193+
194+
⚠ Globálna inštalácia (`npm install -g`) v prípade NPM znamená, že sa daná vec nainštaluje
195+
_globálne pre aktuálneho používateľa_, do jeho profilu. Toto nechceme, my daný nástroj potrebujeme globálne
196+
pre celý systém. Neexistuje možnosť ako toto v NPM spraviť (aspoň o nej nevieme), takže jediné čo nám ostáva,
197+
je nainštalovať to takto a potom ručne skopírovať na nejaké všeobecné miesto. Po prekopírovaní je možné danú
198+
vec pokojne odinštalovať.
199+
200+
**NewMan:** `npm install -g newman` Po nainštalovaní skopírovať do `C:\newman` (príkaz musí byť dostupný ako
201+
`C:\newman\newman.cmd`) a do systémovej premennej `PATH` pridať cestu `C:\newman`.
202+
Nainštalovaný nástroj sa nachádza v zložke `%APPDATA%\npm\`.
203+
204+
## DotNet Global Tools (`configure.ps1`)
205+
206+
Je potrebné nainštalovať nasledovné dotnet tools:
207+
208+
- Kros.DummyData.Initializer
209+
- Kros.VariableSubstitution
210+
211+
Nástroje sa inštalujú príkazom `dotnet tool install --global {toolName} --tool-path {toolPath}`.
212+
213+
## Inštalácia Docker 🐳
214+
215+
Docker je potrebné nainštalovať "ručne". Najskôr je v programoch a súčastiach potrebné zapnúť `Hyper-V` ![hyper-v](hyper-v.png).
216+
> Ak by bola časť možností disablovaná, tak je potrebné zapnúť virtualizáciu na úrovni BIOSu.
217+
218+
Ďalej [nainštalovať linux subsystem](https://docs.microsoft.com/en-us/windows/wsl/install) `wsl --install`.
219+
220+
Následne samotný [Docker](https://docs.docker.com/desktop/windows/install/).
221+
222+
### Nastavenie spúšťania
223+
224+
`Docker desktop.exe` sa spúšťa až s prihlásením používateľa *(po odhlásení sa vypne)*. Je potrebné naplánovať udalosť po štarte mašiny, ktorá ho spustí.
225+
Je na to vytvorený script `.\register-docker-start-schedule.ps1 "username" "password"`. Je potrebné zadať používateľa pod ktorým sa to bude spúšťať.
226+
227+
Taktiež je potrebné pridať všetkých používateľov _(pod ktorými bežia agenti)_ do skupiny `docker-users` _(aby mali prístup k docker daemon-u)_.
228+
Na to je tiež vytvorený script `.\add-users-to-docker-group.ps1 "esw" 15 1`.
229+
230+
### Čistenie dát po docker príkazoch
231+
232+
Docker pri svojej práci vytvára rôzne dáta. Jednotlivé images, cache, ... Keďže to beží pod `WSL` tak všetky dáta sú v `C:\Users\{userName}\AppData\Local\Docker\wsl\data\ext4.vhdx`. Z času na čas je to potrebné prečistiť. Robíme to tak, že odstránime jednotlivé images a "shrinkneme" daný súbor. Na to sa používa script `clean-docker.ps1`. Jeho automatické spúšťani je možné naplánovať pomocou scriptu `.\register-docker-clean-schedule.ps1 "username" "password"`. *(nateraz je to naplánované na každú nedeľu 20:00)*
233+
234+
## Čistenie dočasných (temp) súborov (`configure.ps1`)
235+
236+
Mnoho vecí vytvára v `Temp` adresári používateľa svoje súbory a neupravuje si po sebe. Keďže každý agent beží pod vlastným
237+
používateľským účtom má aj vlastnú `Temp` zložku a tak množstvo takto vytvorených dát je celkom významné. Z dlhodobého hľadiska
238+
s tým je problém, pretože nám pravidelne dochádza miesto na disku.
239+
240+
Na prečistenie `Temp` zložiek všetkých používateľov slúži skript [`clean-temp.ps1`](https://github.com/Kros-sk/kros-sk.github.io/blob/master/buildmachine/clean-temp.ps1).
241+
Tento skript vymaže všetky súbory v `Temp` adresároch všetkých používateľov, ktoré sú staršie ako 4 dni.
242+
Túto hodnotu je možné zmeniť parametrom `-OlderThanDays`.
243+
Ak sa spúšťa z príkazovej riadky, je potrebné ho spúšťať ako administrátor (inak vymaže len temp aktuálne prihláseného
244+
používateľa). Na _build_ počítač ho treba pridať ako naplánovanú úlohu, ktorá sa spustí raz za deň a `Temp` prečistí.
245+
Skript je potrebné nakopírovať do zložky `C:\tools` a naplánovanú úlohu vytvoriť nasledovným príkazom,
246+
spusteným ako administrátor:
247+
248+
``` sh
249+
schtasks /create /ru "NT AUTHORITY\SYSTEM" /rl HIGHEST /sc daily /st 03:30 /tn "BuildAgents\CleanTemp" /tr "pwsh -File 'C:\tools\clean-temp.ps1' -SaveTranscript"
250+
```
251+
252+
Skript vytvorí záznam o svojom poslednom behu do súboru `clean-temp.log`.

0 commit comments

Comments
 (0)