CI – build, testy, image
Workflow ci.yml – sestavení a testy u každého PR, Docker image pro x86 i ARM do GHCR po sloučení.
Na této stránce
V jedné větě: Při každém PR a pushi do
mainGitHub na čistém Linuxu sestaví řešení, spustí všechny testy a sestaví Docker image; zmainje navíc uloží do GitHub Container Registry.
Kód: ci.yml
Joby
flowchart LR
t["build-and-test<br/>'Build a testy'<br/>ubuntu-24.04"] --> i["images (matrix)<br/>web, inventory-api"]
i --> d["deploy<br/>jen main"]
click d "/Docs/github/cd"
| Job | Co dělá | Detaily |
|---|---|---|
| Build a testy | restore → build -c Release → test |
cache NuGet balíčků (klíč = otisk .csproj, .props, global.json), výsledky testů jako artefakt .trx (14 dní) |
| Image web / inventory-api | Docker Buildx | PR: jen x86, nic se neukládá (rozbitý Dockerfile se pozná před sloučením). main: amd64 + arm64 (QEMU) a push do GHCR |
| Nasazení | volá deploy.yml |
jen na main, až po úspěšných image – viz CD |
Důležitá nastavení
| Nastavení | Proč |
|---|---|
runs-on: ubuntu-24.04 (ne latest) |
prostředí se nezmění pod rukama |
.NET SDK podle global.json |
CI i PC používají stejnou verzi |
permissions: contents: read, zápis do registry jen job images |
nejmenší oprávnění |
concurrency – nový push do PR zruší starý běh; na main se nic neruší |
výsledek starého commitu nikoho nezajímá, rozběhnuté nasazení se ale musí dokončit |
push na main: paths bez docs/** a *.md, kromě docs/prirucka/** |
čistě dokumentační změna (roadmapy, souhrny kroků) nic nestaví; příručka je ale součást image Webu, takže její změna se nasadí |
| U PR se nefiltruje | povinný check musí dorazit u každého PR, jinak by nešel sloučit |
FROM --platform=$BUILDPLATFORM v Dockerfile |
.NET se kompiluje nativně, emuluje se jen závěrečná fáze ARM image – build je rychlý |
Cache vrstev Dockeru v GitHub Actions (type=gha) |
další build je rychlejší |
Image v GHCR
| Image | Štítky |
|---|---|
ghcr.io/ftichy/minishop-web |
sha-<7 znaků commitu>, latest |
ghcr.io/ftichy/minishop-inventory-api |
sha-<7 znaků commitu>, latest |
- Na VM se nasazuje vždy konkrétní
sha-…, nikdylatest– je jasné, co běží, a rollback je jen jiný štítek. - Balíčky jsou veřejné (zdědí viditelnost repozitáře přes label
org.opencontainers.image.source) – VM je stáhne bez přihlášení. - Do GHCR se přihlašuje
GITHUB_TOKEN, který GitHub vytvoří pro každý běh a po něm zanikne.
Použité akce
actions/checkout, actions/setup-dotnet, actions/cache, actions/upload-artifact, docker/setup-qemu-action,
docker/setup-buildx-action, docker/login-action, docker/metadata-action, docker/build-push-action
(a v CD tailscale/github-action). Verze hlídá Dependabot.