7.3 KiB
Reusable workflowt
⚠️ POC-vaihe. Tämä dokumentti kuvaa suunniteltuja workflow'ta (ci-feature, ci-master, deploy, test). POCissa on toteutettu vain
ci-engine.yml. Uudelleenkirjoitus odottaa.
Yhteiset konventiot
Kaikki workflowt:
- Käyttävät
concurrency:-ryhmää estämään saman branchin rinnakkaiset ajot (vastaa JenkinsdisableConcurrentBuilds()) - 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
%%{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
- 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
%%{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
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
- Lukee
{projectFolder}/{fileName}YAML-tiedoston (korvaa{.environment}→environment) - Päivittää
{property}-avaimen arvoksi{version} git add,git commit -m "deploy {version} to {environment}"git push origin HEAD:master- Raportoi statuksen:
- Helm-repon committiin: "from {root_commit}", URL → root-build
- Mikropalvelun committiin (
root_commit): "deployed to {environment}", URL → Helm-commit
- Palauttaa Helm-commitin hashin (
outputs.commit)
Concurrency
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:
- 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.
Cross-repo-raportointi
Testien jälkeen raportoidaan kolmeen committiin:
- Testi-repon oma commit: testin status
- Mikropalvelun commit (
root_commit): "testit OK/epäonnistui" - Helm-repon commit (
deploy_commit): "testattu v{version}"
Concurrency
concurrency:
group: test-${{ inputs.environment }}
cancel-in-progress: false