Files
gitea-ci-library/docs/workflows.md
T
niko c422825bf0
CI / load-config (push) Successful in 16s
CI / feature (push) Has been skipped
ci-cucumber Cucumber tests passed
ci-bats Bats tests
ci-build Build complete
CI / main (push) Successful in 2m23s
pipeline siivous ja testikattavuuden nosto (#9)
Co-authored-by: moilanik <niko.moilanen@tietoevry.com>
Reviewed-on: #9
2026-06-14 03:26:44 +03:00

256 lines
7.3 KiB
Markdown

# Reusable workflowt
> ⚠️ **POC-vaihe.** Tämä dokumentti kuvaa suunniteltuja workflow'ta
> (ci-feature, ci-master, deploy, test). POCissa on toteutettu
> `build-feature.yml`. Uudelleenkirjoitus odottaa.
---
## Yhteiset konventiot
Kaikki workflowt:
- Käyttävät `concurrency:`-ryhmää estämään saman branchin rinnakkaiset ajot (vastaa Jenkins `disableConcurrentBuilds()`)
- Lukevat konfiguraation `ci-flow-values.yaml`:sta
- Raportoivat jokaisen vaiheen Gitea-commitin statukseen `report-status.sh`:lla
- Käyttävät projektilta saatuja `with:`-parametreja konttien määrittelyyn (kirjasto ei pakota konttiversioita)
---
## `ci-feature.yml` — Feature-branch
**Trigger:** `push` mihin tahansa branchiin paitsi `master`
**Elinkaari:**
```
start → unit-test → code-coverage → html-reports → end
```
### Inputs
| Parametri | Pakollinen | Kuvaus |
|-----------|------------|--------|
| `config-file` | Kyllä | Polku `ci-flow-values.yaml`:aan (yleensä `ci-flow-values.yaml`) |
| `containers` | Ei | Kuvaus konteista: avain = nimi, arvo = image. Steppi valitsee missä kontissa ajaa. |
### Steppi-kaavio
```mermaid
%%{init: {'theme': 'base', 'flowchart': {'arrowheadScale': 2}}}%%
flowchart TD
START(["checkout + start
POST INPROGRESS"]) --> UNIT["unit-test
aja testit, generoi raportit"]
UNIT --> COV["code-coverage
jacoco / vastaava"]
COV --> HTML["publish-reports
vie raportit git-pagesiin"]
HTML --> END(["end
POST lopullinen status"])
FAIL("fail") -. "catch" .-> END
style START fill:#2563eb,color:#ffffff
style UNIT fill:#059669,color:#ffffff
style COV fill:#059669,color:#ffffff
style HTML fill:#7c3aed,color:#ffffff
style END fill:#2563eb,color:#ffffff
style FAIL fill:#dc2626,color:#ffffff
linkStyle default stroke:#9ca3af,stroke-width:3px
```
### Error handling
Workflow käyttää Gitea Actionsin natiivia `jobs.<id>.continue-on-error` ja `if: failure()` -ehtoja. Ei erillistä `fail(e)`-kutsua kuten Jenkinsissä. Epäonnistunut steppi asettaa statuksen `failure` ja jatkaa `end`-steppiin, joka raportoi lopullisen statuksen.
---
## `ci-master.yml` — Master / release-branch
**Trigger:** `push` `master`-branchiin tai `workflow_dispatch`
**Elinkaari:**
```
start → isContainerBuilt? ──kyllä──→ continueToTestFlow
ei
unit-test → quality-gate → build-jar → build-docker → push-docker → tag-commit → continueToTestFlow → end
```
### Inputs
| Parametri | Pakollinen | Kuvaus |
|-----------|------------|--------|
| `config-file` | Kyllä | Polku `ci-flow-values.yaml`:aan |
| `containers` | Ei | Kuvaus konteista: avain = nimi, arvo = image |
### isContainerBuilt-check
```yaml
- name: Check if container already built
run: |
TAG=$(git tag --points-at HEAD | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1)
if [ -n "$TAG" ]; then
echo "container_already_built=true" >> $GITHUB_ENV
echo "container_version=$TAG" >> $GITHUB_ENV
fi
```
Jos `container_already_built == true`, build- ja push-steppit skipataan. Siirrytään suoraan `continueToTestFlow`:hun.
### Steppi-kaavio
```mermaid
%%{init: {'theme': 'base', 'flowchart': {'arrowheadScale': 2}}}%%
flowchart TD
START(["start"]) --> CHECK{"isContainerBuilt?
git tag --points-at HEAD"}
CHECK -- "ei" --> UNIT["unit-test"]
UNIT --> SONAR["quality-gate
SonarQube"]
SONAR --> JAR["build-jar
ArtifactType.JAR"]
JAR --> DOCKER["build-docker
ArtifactType.DOCKER
+ Docker-labelit"]
DOCKER --> PUSH["push-docker
ArtifactType.DOCKER"]
PUSH --> TAG["tag-commit
tagittaa commitin
versiolla"]
CHECK -- "kyllä" --> CTF["continueToTestFlow"]
TAG --> CTF
CTF --> HTML["publish-reports
vie raportit git-pagesiin"]
HTML --> END(["end
lopullinen status"])
FAIL("fail") -. "catch" .-> END
style START fill:#2563eb,color:#ffffff
style CHECK fill:#f59e0b,color:#111827
style UNIT fill:#059669,color:#ffffff
style SONAR fill:#7c3aed,color:#ffffff
style JAR fill:#0891b2,color:#ffffff
style DOCKER fill:#0891b2,color:#ffffff
style PUSH fill:#dc2626,color:#ffffff
style TAG fill:#f59e0b,color:#111827
style CTF fill:#f59e0b,color:#111827
style HTML fill:#7c3aed,color:#ffffff
style END fill:#2563eb,color:#ffffff
style FAIL fill:#dc2626,color:#ffffff
linkStyle default stroke:#9ca3af,stroke-width:3px
```
### Concurrency
```yaml
concurrency:
group: master-${{ github.repository }}
cancel-in-progress: false
```
Vain yksi master-build kerrallaan per repo. Ei cancel-in-progress — käynnissä olevan buildin annetaan valmistua.
---
## `deploy.yml` — GitOps-deployment
**Trigger:** `workflow_dispatch` (aina dispatchataan toisesta workflow'sta)
**Elinkaari:**
```
start → read-yaml → update-value → commit → push → report-cross-repo → end
```
### Inputs (dispatch-parametrit)
| Parametri | Kuvaus |
|-----------|--------|
| `environment` | Ympäristön nimi (korvaa `{.environment}`) |
| `version` | Uusi konttiversio |
| `root_commit` | Mikropalvelun commit josta deploy käynnistyi |
| `root_repo` | Mikropalvelun repo |
| `root_build_url` | URL mikropalvelun buildiin |
### Mitä deploy tekee
1. Lukee `{projectFolder}/{fileName}` YAML-tiedoston (korvaa `{.environment}``environment`)
2. Päivittää `{property}`-avaimen arvoksi `{version}`
3. `git add`, `git commit -m "deploy {version} to {environment}"`
4. `git push origin HEAD:master`
5. Raportoi statuksen:
- Helm-repon committiin: **"from {root_commit}"**, URL → root-build
- Mikropalvelun committiin (`root_commit`): **"deployed to {environment}"**, URL → Helm-commit
6. Palauttaa Helm-commitin hashin (`outputs.commit`)
### Concurrency
```yaml
concurrency:
group: deploy-${{ github.repository }}-${{ inputs.environment }}
cancel-in-progress: false
```
---
## `test.yml` — Test flow -steppi
**Trigger:** `workflow_dispatch` (dispatchataan deploy-workflow'n jälkeen)
**Elinkaari:**
```
start → version-check → run-tests → push-reports → report-cross-repo → end
```
### Inputs (dispatch-parametrit)
| Parametri | Kuvaus |
|-----------|--------|
| `environment` | Testiympäristö |
| `version` | Testattava konttiversio |
| `tags` | Cucumber-tagit |
| `versionApiUrl` | URL version tarkistukseen |
| `versionCheckScript` | Polku version check -skriptiin |
| `root_commit` | Mikropalvelun commit |
| `root_repo` | Mikropalvelun repo |
| `deploy_commit` | Helm-repon commit (deployattu versio) |
| `deploy_repo` | Helm-repo |
### Version check
Ennen testejä varmistetaan, että ympäristössä pyörii oikea versio:
```yaml
- name: Check deployed version
if: inputs.versionCheckScript || inputs.versionApiUrl
run: |
if [ -n "${{ inputs.versionCheckScript }}" ]; then
bash "${{ inputs.versionCheckScript }}" "${{ inputs.versionApiUrl }}" "${{ inputs.version }}"
fi
```
Version check -skripti pollaa Fibonacci-backoffilla — ks. [config-model.md](config-model.md).
### Cross-repo-raportointi
Testien jälkeen raportoidaan kolmeen committiin:
1. Testi-repon oma commit: testin status
2. Mikropalvelun commit (`root_commit`): "testit OK/epäonnistui"
3. Helm-repon commit (`deploy_commit`): "testattu v{version}"
### Concurrency
```yaml
concurrency:
group: test-${{ inputs.environment }}
cancel-in-progress: false
```