POC: test reusable workflow job visibility in Gitea Actions (#5)
Co-authored-by: moilanik <niko.moilanen@tietoevry.com> Reviewed-on: #5
This commit is contained in:
@@ -2,6 +2,65 @@
|
||||
|
||||
Reusable workflow -kirjasto Gitea Actionsille. Lisätietoja: [docs/](docs/)
|
||||
|
||||
## Provider-binding — miten consumer löytää providerin
|
||||
|
||||
Consumer kutsuu provideria `uses:`-viittauksella. Ei discoveryä — polku kovakoodataan consumerin
|
||||
`ci.yml`:ään. Gitea hakee workflow YAML:n **samalta Gitea-palvelimelta** annetusta reposta ja tagista.
|
||||
|
||||
### Polun muodostus
|
||||
|
||||
```
|
||||
{owner}/{repo}/.gitea/workflows/ci-engine.yml@{ref}
|
||||
```
|
||||
|
||||
| Osa | Mistä | Esimerkki (homelab) |
|
||||
|-----|-------|---------------------|
|
||||
| `owner` | Repopolun ensimmäinen osa — **käyttäjänimi tai org** | `niko` |
|
||||
| `repo` | Repon nimi | `gitea-ci-library` |
|
||||
| tiedosto | Providerin workflow | `.gitea/workflows/ci-engine.yml` |
|
||||
| `@ref` | Tag tai branch provider-repossa | `@v1` (tuotanto) |
|
||||
|
||||
**Owner ei ole org-pakotettu.** Homelabissa ei välttämättä ole organisaatiotasoa — silloin owner on
|
||||
käyttäjänimi (`niko/...`), ei keksitty `org/`-prefiksi.
|
||||
|
||||
Polku löytyy repostasi:
|
||||
|
||||
```bash
|
||||
git remote get-url origin
|
||||
# → ssh://git@gitea.app.keskikuja.site:30009/niko/gitea-ci-library.git
|
||||
# owner = niko, repo = gitea-ci-library
|
||||
```
|
||||
|
||||
Consumerin `ci.yml`:
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
call-engine:
|
||||
uses: niko/gitea-ci-library/.gitea/workflows/ci-engine.yml@v1
|
||||
secrets: inherit
|
||||
```
|
||||
|
||||
### Usea Gitea-palvelin
|
||||
|
||||
`uses:` resolvoi **vain sen Gitea-instanssin** repohakemistosta, jolla runner ajaa työn.
|
||||
Toisella palvelimella oleva repo ei näy — cross-server-viittaus ei toimi.
|
||||
|
||||
Jokaisella Gitea-palvelimella, jossa mikropalvelut ajavat CI:tä, **tämä kirjasto-repo pitää olla
|
||||
läsnä** samalla `owner/repo`-polulla:
|
||||
|
||||
```
|
||||
Gitea A (kehitys) Gitea B (tuotanto/homelab 2)
|
||||
niko/gitea-ci-library ←→ niko/gitea-ci-library (mirror tai push-mirror)
|
||||
↑ ↑
|
||||
consumer uses: consumer uses:
|
||||
niko/gitea-ci-library/... niko/gitea-ci-library/...
|
||||
```
|
||||
|
||||
Mirror pitää `ci-engine.yml`:n ja tagit (`v1`) saatavilla kulloisellakin palvelimella. Tämä korvaa
|
||||
provider-repon checkout-hackit workflowissa — binding hoituu Gitean natiivilla `uses:`-mekanismilla.
|
||||
|
||||
Periaatteet: [tmp/data-flow-design.md](tmp/data-flow-design.md)
|
||||
|
||||
## Main-haaran suojaus
|
||||
|
||||
Jokaisessa tätä kirjastoa käyttävässä repossa `main`-haara suojataan — koodi päätyy sinne vain PR:n kautta:
|
||||
@@ -39,7 +98,11 @@ Ilman disablointia käyttäjä voi valita merge-commitin PR:n merge-napista —
|
||||
|
||||
## Gitea Actions runner (K8s / Helm)
|
||||
|
||||
Act runner suorittaa Gitea Actions workflowt. Asennus Kubernetes-klusteriin Helm chartilla:
|
||||
Act runner suorittaa Gitea Actions workflowt. **IaC-lähde:** alla oleva Helm-snippet on
|
||||
klusterin totuus — muutokset vain snippetiin, sitten `helm upgrade --install` (ei käsin muokattuja
|
||||
arvoja klusterissa).
|
||||
|
||||
Asennus Kubernetes-klusteriin Helm chartilla:
|
||||
|
||||
### 1. Rekisteröintitoken
|
||||
|
||||
@@ -67,6 +130,7 @@ helm upgrade --install act-runner gitea/actions \
|
||||
--set giteaRootURL="$GITEA_URL" \
|
||||
--set existingSecret=act-runner-token \
|
||||
--set existingSecretKey=token \
|
||||
--set statefulset.dind.tag=29.5.2-dind \
|
||||
--set-string 'statefulset.runner.config=log:
|
||||
level: info
|
||||
cache:
|
||||
@@ -78,13 +142,28 @@ container:
|
||||
--create-namespace
|
||||
```
|
||||
|
||||
path escapes from parent -bugi korjattiin Docker 29.5.2:ssa. Tämän teko aikana default on 29.5.1 — juuri tämän alle jäävä versio.
|
||||
|
||||
Oletus-lokitaso on `debug` — suositeltu `info`. Näkee jobien aloitukset ja valmistumiset ilman konttikerrosten purkua (Downloading/Extracting-spämmiä). `debug` on tarpeen vain vianselvityksessä.
|
||||
|
||||
#### Docker (DinD)
|
||||
|
||||
Helm chart deployaa DinD:n init-sidecarina (`docker:dind` samassa podissa).
|
||||
`require_docker: true` kytkee jobit siihen — erillistä DinD-asennusta ei tarvita.
|
||||
|
||||
**DinD-tag pinottu:** `29.5.2-dind` (ei chart-oletusta). Docker 29.5.1 aiheuttaa act-runnerissa
|
||||
`path escapes from parent` -virheen job-kontin käynnistyksessä.
|
||||
|
||||
Maven/npm-ajot käyttävät vain workflow'n `container:`-imagea; DinD tarvitaan vasta Docker-buildissä.
|
||||
|
||||
### 3. Varmista
|
||||
|
||||
```bash
|
||||
kubectl get pods -n gitea-actions
|
||||
# → act-runner-runner-0 2/2 Running
|
||||
# → act-runner-runner-0 Running
|
||||
|
||||
kubectl exec -n gitea-actions act-runner-runner-0 -c dind -- docker version
|
||||
# → Server Version: 29.5.2 (tai uudempi)
|
||||
```
|
||||
|
||||
Gitean puolella runner ilmestyy Active-tilaan pienellä viiveellä:
|
||||
@@ -96,6 +175,9 @@ Site Admin → Actions → Runners (tai Org → Settings → Actions → Runner
|
||||
|
||||
Tämän jälkeen `.gitea/workflows/ci.yml` triggeröityy automaattisesti pushista.
|
||||
|
||||
Tarkista ennen ensimmäistä ajoa: [Provider-binding](#provider-binding--miten-consumer-löytää-providerin)
|
||||
(owner/repo, `@ref` pushattu, Repo → Settings → Actions enabled).
|
||||
|
||||
Lisätietoa runnerin toiminnasta, konteista ja DinD:stä: [docs/runner.md](docs/runner.md)
|
||||
|
||||
### Muuta
|
||||
@@ -105,4 +187,5 @@ Lisätietoa runnerin toiminnasta, konteista ja DinD:stä: [docs/runner.md](docs/
|
||||
| `giteaRootURL` | Gitea-palvelimen osoite (esim. `https://gitea.example.com`) |
|
||||
| `existingSecret` | Kubernetes secretin nimi, jossa token |
|
||||
| `existingSecretKey` | Avain secretin sisällä |
|
||||
| `statefulset.dind.tag` | DinD-image tag (`29.5.2-dind` minimi) |
|
||||
| `statefulset.runner.labels` | Mukautetut labelit |
|
||||
|
||||
Reference in New Issue
Block a user