|
| 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` . |
| 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