diff --git a/.gitea/workflows/build_publish-artifact.yml b/.gitea/workflows/build_publish-artifact.yml index ab12712..8c69a51 100644 --- a/.gitea/workflows/build_publish-artifact.yml +++ b/.gitea/workflows/build_publish-artifact.yml @@ -28,7 +28,7 @@ env: GIT_PAGES_PUBLISH_TOKEN: ${{ secrets.GIT_PAGES_PUBLISH_TOKEN }} REPO: ${{ github.repository }} DOCKER_REGISTRY: ${{ fromJson(inputs.env_json).DOCKER_REGISTRY || '' }} - DOCKER_IMAGE_TAG: ${{ fromJson(inputs.env_json).DOCKER_IMAGE_TAG || '' }} + DOCKER_IMAGE_NAME: ${{ fromJson(inputs.env_json).DOCKER_IMAGE_NAME || '' }} DOCKER_UI_URL: ${{ fromJson(inputs.env_json).DOCKER_UI_URL || '' }} concurrency: @@ -153,7 +153,7 @@ jobs: --label "git.commit=${{ github.sha }}" \ --label "git.commitBy=${{ github.actor }}" \ --label "build.date=${NOW}" \ - -t "${DOCKER_IMAGE_TAG}:${NEXT_VERSION}" . + -t "${DOCKER_IMAGE_NAME}:${NEXT_VERSION}" . - name: Report status SUCCESS if: steps.gatekeeper.outputs.skip == 'false' && success() @@ -172,7 +172,7 @@ jobs: run: | source /tmp/build-ctx/build.env mkdir -p /tmp/image - docker save "${DOCKER_IMAGE_TAG}:${NEXT_VERSION}" -o /tmp/image/artifact.tar + docker save "${DOCKER_IMAGE_NAME}:${NEXT_VERSION}" -o /tmp/image/artifact.tar - name: Upload Docker image artifact if: steps.gatekeeper.outputs.skip == 'false' && success() @@ -232,13 +232,13 @@ jobs: docker load -i /tmp/image/artifact.tar REGISTRY="${DOCKER_REGISTRY:?DOCKER_REGISTRY not set in env.conf}" - IMAGE="${DOCKER_IMAGE_TAG:?DOCKER_IMAGE_TAG not set in env.conf}" + IMAGE="${DOCKER_IMAGE_NAME:?DOCKER_IMAGE_NAME not set in env.conf}" REGISTRY_HOST="${REGISTRY%%/*}" FULL_IMAGE="${REGISTRY}/${IMAGE}:${NEXT_VERSION}" echo "Pushing ${FULL_IMAGE} ..." - docker tag "${DOCKER_IMAGE_TAG}:${NEXT_VERSION}" "$FULL_IMAGE" + docker tag "${DOCKER_IMAGE_NAME}:${NEXT_VERSION}" "$FULL_IMAGE" echo "$DOCKER_PASSWORD" | docker login "$REGISTRY_HOST" -u "$DOCKER_USERNAME" --password-stdin docker push "$FULL_IMAGE" docker logout "$REGISTRY_HOST" diff --git a/.gitea/workflows/gitea-env.conf b/.gitea/workflows/gitea-env.conf index 3a89695..d13d08c 100644 --- a/.gitea/workflows/gitea-env.conf +++ b/.gitea/workflows/gitea-env.conf @@ -1,5 +1,5 @@ GITEA_API_URL=https://gitea.app.keskikuja.site GIT_PAGES_URL=https://ci-reports.helm-dev.keskikuja.site DOCKER_REGISTRY=gitea.app.keskikuja.site/niko -DOCKER_IMAGE_TAG=gitea-ci-library-test-image +DOCKER_IMAGE_NAME=gitea-ci-library-test-image DOCKER_UI_URL=https://gitea.app.keskikuja.site/niko/gitea-ci-library/packages diff --git a/guides/docker-registry-setup.md b/guides/docker-registry-setup.md index defeefd..c12e5ea 100644 --- a/guides/docker-registry-setup.md +++ b/guides/docker-registry-setup.md @@ -1,85 +1,106 @@ # Docker Registry Setup -Pipeline rakentaa Docker-kontin ja pushee sen haluttuun registryyn. Konfigurointi `gitea-env.conf`issa, tunnukset repository Secrets -muuttujina. +Pipeline rakentaa Docker-kontin ja pushee sen haluttuun registryyn. --- -## 1. `gitea-env.conf` — Docker-kentät +## 1. Konfiguroi `gitea-env.conf` -| Kenttä | Pakollinen | Kuvaus | Esimerkki | -|---|---|---|---| -| `DOCKER_REGISTRY` | **kyllä** | Registry + mahdollinen organisaatio. Koko etuliite ennen kuvan nimeä. Login käyttää ensimmäistä `/`-edeltävää osaa | `gitea.app.keskikuja.site/niko` | -| `DOCKER_IMAGE_TAG` | **kyllä** | Pelkkä kuvan nimi (ilman tagia, ilman rekisteriä, ilman organisaatiota) | `gitea-ci-library-test-image` | -| `DOCKER_UI_URL` | ei | Base-URL kontin UI-sivulle. Workflow liittää perään `/VERSION` | `https://gitea.app.keskikuja.site/-/packages/container/niko/gitea-ci-library` | +``` +DOCKER_REGISTRY=gitea.app.keskikuja.site/niko # PAKOLLINEN — tyhjä ei käy +DOCKER_IMAGE_NAME=gitea-ci-library-test-image # PAKOLLINEN +DOCKER_UI_URL=https://gitea.app.keskikuja.site/niko/gitea-ci-library/packages # valinnainen +``` -**Koko image-ref:** `${DOCKER_REGISTRY}/${DOCKER_IMAGE_TAG}:${VERSION}` -Esimerkki: `gitea.app.keskikuja.site/niko/gitea-ci-library-test-image:0.1.0` +| Kenttä | Pakollinen | Kuvaus | +|---|---|---| +| `DOCKER_REGISTRY` | **kyllä** | Registry + mahdollinen organisaatio. **Tyhjä arvo pysäyttää workflow'n virheeseen.** Esim. `gitea.app.keskikuja.site/niko` | +| `DOCKER_IMAGE_NAME` | **kyllä** | Pelkkä kuvan nimi. Esim. `gitea-ci-library-test-image` | +| `DOCKER_UI_URL` | ei | Base-URL kontin UI-sivulle. Workflow liittää perään `/VERSION` | -**Paikallinen build-tagi:** `${DOCKER_IMAGE_TAG}:${VERSION}` -Esimerkki: `gitea-ci-library-test-image:0.1.0` +**Koko image-ref:** `${DOCKER_REGISTRY}/${DOCKER_IMAGE_NAME}:${VERSION}` +Esim. `gitea.app.keskikuja.site/niko/gitea-ci-library-test-image:0.1.0` --- -## 2. Gitea Secrets — tunnukset +## 2. Luo PAT (Personal Access Token) Giteassa -Workflow tekee `docker login -u "$DOCKER_USERNAME" --password-stdin`. Mitä arvoja laitetaan, riippuu registrystä: +**Gitea → oma profiili (oikea yläkulma) → Settings → Applications → Manage Access Tokens → Generate New Token** -| Registry | `DOCKER_USERNAME` | `DOCKER_PASSWORD` | Mistä saadaan | -|---|---|---|---| -| Gitea Packages | `${{ github.actor }}` (automaattinen) | **PAT** scope `write:packages` | User Settings → Applications → Generate Token | -| Docker Hub | Docker Hub -käyttäjä | Access Token (ei salasana) | Hub Account Settings → Security → Access Tokens | -| Artifactory | service account -tunnus | API-token | Artifactory Admin → Users → käyttäjä → token | +Valitse scope: -`DOCKER_USERNAME` on optionaalinen — jos sitä ei ole asetettu, workflow käyttää `${{ github.actor }}` (workflowin käynnistäjä). Riittää asettaa vain `DOCKER_PASSWORD`. +| Scope | Pääsy | +|---|---| +| `package` | **Read and Write** | -**Asetus:** Repository → Settings → Actions → Secrets → **Add new secret** +> Tämä token toimii salasanana `docker login` -komennossa. Muut scopet (kuten `repository`) eivät riitä — konttirekisteri vaatii nimenomaan `package`-scopen. + +Tokenin arvo näytetään **vain kerran** luomisen yhteydessä. Kopioi se talteen. --- -## 3. Esimerkkejä +## 3. Tallenna PAT repositoryn Secretsiin -### 3a. Gitea Packages +Nämä ovat kaksi eri paikkaa: +- **Access Tokenit** (User Settings) = missä luot tokenin +- **Repository Secrets** (Repository Settings) = minne talletat sen workflow'n käyttöön + +**Repository → Settings → Actions → Secrets → Add new secret** + +| Secret | Arvo | +|---|---| +| `DOCKER_PASSWORD` | Edellisessä vaiheessa luotu PAT | + +`DOCKER_USERNAME`-secretiä **ei tarvita**. Workflow käyttää automaattisesti `${{ github.actor }}` (workflowin käynnistäjä). + +Jos registry vaatii eri käyttäjätunnuksen kuin `github.actor` (esim. Artifactory, Docker Hub), lisää myös: + +| Secret | Arvo | +|---|---| +| `DOCKER_USERNAME` | Registryn käyttäjätunnus | + +--- + +## 4. Tarkistuslista ennen ajoa + +- [ ] `DOCKER_REGISTRY` asetettu `gitea-env.conf`issa +- [ ] `DOCKER_IMAGE_NAME` asetettu `gitea-env.conf`issa +- [ ] PAT luotu Giteassa scopella `package` Read and Write +- [ ] `DOCKER_PASSWORD`-secret tallennettu repositoryn Secretsiin (se PAT) +- [ ] (tarvittaessa) `DOCKER_USERNAME`-secret — oletus `github.actor` + +--- + +## 5. Esimerkkejä eri registryille + +### Gitea Packages ``` DOCKER_REGISTRY=gitea.app.keskikuja.site/niko -DOCKER_IMAGE_TAG=gitea-ci-library-test-image +DOCKER_IMAGE_NAME=gitea-ci-library-test-image DOCKER_UI_URL=https://gitea.app.keskikuja.site/-/packages/container/niko/gitea-ci-library ``` -- `DOCKER_USERNAME` = Gitea-käyttäjätunnus -- `DOCKER_PASSWORD` = **PAT** (User Settings → Applications → Generate Token, scope `write:packages`) +- PAT scope: `package` Read and Write -> Runnerin automaattinen `GITEA_TOKEN` ei yleensä sisällä `write:packages`-scopea. Tarvitaan erillinen PAT. - -### 3b. Docker Hub +### Docker Hub ``` DOCKER_REGISTRY=docker.io/library -DOCKER_IMAGE_TAG=oma-kuva +DOCKER_IMAGE_NAME=oma-kuva DOCKER_UI_URL=https://hub.docker.com/r/library/oma-kuva ``` -- `DOCKER_USERNAME` = Docker Hub -käyttäjätunnus -- `DOCKER_PASSWORD` = Docker Hub Access Token (suositeltu) tai salasana +- Secret `DOCKER_USERNAME` = Docker Hub -käyttäjä +- Secret `DOCKER_PASSWORD` = Access Token (ei salasana) -### 3c. Artifactory (kuten legacy Jenkins) +### Artifactory (kuten legacy Jenkins) ``` DOCKER_REGISTRY=ngdo-docker.artifactorypro.shared.pub.tds.tieto.com -DOCKER_IMAGE_TAG=microservice-temperature-store +DOCKER_IMAGE_NAME=microservice-temperature-store DOCKER_UI_URL=https://artifactorypro.shared.pub.tds.tieto.com/ui/repos/tree/General/ngdo-docker.artifactorypro.shared.pub.tds.tieto.com/microservice-temperature-store ``` -- `DOCKER_USERNAME` = Artifactory-käyttäjätunnus -- `DOCKER_PASSWORD` = Artifactoryn API-token - ---- - -## 4. Tarkistuslista - -- [ ] `DOCKER_REGISTRY` asetettu (registry + org) -- [ ] `DOCKER_IMAGE_TAG` asetettu (pelkkä nimi) -- [ ] (tarvittaessa) `DOCKER_USERNAME`-secret — oletus `github.actor` -- [ ] `DOCKER_PASSWORD`-secret luotu repoon (PAT/token/salasana) -- [ ] Tokenilla/salasanalla oikeus **pushata** registryyn -- [ ] (valinnainen) `DOCKER_UI_URL` asetettu → commit status linkkaa kontin UI-sivulle +- Secret `DOCKER_USERNAME` = service account -tunnus +- Secret `DOCKER_PASSWORD` = API-token