Hyppää sisältöön

Spring Boot -palvelimen julkaisu ilman ulkoista tietokantaa

Seuraavassa käydään läpi Spring Boot -palvelimen julkaisu ilman ulkoista tietokantaa. Ulkoisen tietokannan luonti ja konfigurointi käsitellään dokumentissa Spring Boot -palvelimen julkaisu Rahti-palvelussa Pukki-tietokantapalvelun avulla.

Rahti-palvelun työkaluilla voidaan luoda sovelluksen julkaisuun tarvittavat resurssit repositorion sisällön perusteella automaattisesti. Resurssit voidaan luoda joko

  1. suoraan lähdekoodin perusteella (Source-to-Image, S2I) tai
  2. projektissa määritetyn Dockerfile:n perusteella.

Materiaalissa annetaan ohjeet molempiin tapoihin. Tavat ovat vaihtoehtoisia.

Spring-projektin valmistelu julkaisua varten

Projektin repositorio

Projektin sijainti

Build-työkalut olettavat, että sovellusprojekti sijaitsee repositorion juurihakemistossa. Jos näin ei ole, sinun on erikseen annettava työkaluille tieto siitä, missä hakemistossa Spring Boot -projekti sijaitsee.

Repositorio-oikeudet

Rahti-työkalut tarvitsevat pääsyn projektin repositorioon. Jos repositorio on julkinen, ei pääsyoikeuksia tarvitse erikseen määrittää.

Jos repositorio on yksityinen, on Rahti-projektille järjestettävä pääsy luvun Julkaisu yksityisestä GitHub-repositoriosta ohjeiden mukaisesti.

Spring-projekti

Source-to-Image-julkaisu

Jos käytät Source-to-Image -julkaisua, ei tarvita erillisiä valmisteluja.

Dockerfile-julkaisu

Jos käytät Dockerfile-julkaisua, lisää Spring-projektin juureen tiedosto Dockerfile, jonka sisältö on seuraava:

    # BUILD-VAIHE
    FROM eclipse-temurin:17-jdk-focal AS builder
    WORKDIR /opt/app
    # Kopioi Mavenin asetukset ja projektin metadata
    COPY .mvn/ .mvn
    COPY mvnw pom.xml ./
    RUN chmod +x ./mvnw
    # Lataa riippuvuudet
    RUN ./mvnw dependency:go-offline
    # Kopioi lähdekoodi
    COPY ./src ./src
    # Buildaa projekti
    RUN ./mvnw clean install -DskipTests
    # Kopioi JAR-tiedosto
    RUN cp target/*.jar /opt/app/app.jar

    # RUNTIME-VAIHE
    FROM eclipse-temurin:17-jre-alpine
    WORKDIR /opt/app
    # Kopioi buildattu JAR-tiedosto build-vaiheesta
    COPY --from=builder /opt/app/app.jar /opt/app/app.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "/opt/app/app.jar"]
Määritys on laadittu yleiskäyttöiseksi, sen pitäisi toimia missä tahansa Spring Boot -projektissa sellaisenaan.

Sovelluksen luonti web-käyttöliittymässä

Voit nyt julkaista Spring Boot -sovelluksesi Rahti-palvelussa. Klikkaa oikeasta yläkulmasta pientä + -ikonia ja valitse Import from git.

Import from Git-lomakkeella määritellään, mistä repositoriosta sovellusprojekti haetaan, ja miten build ja julkaisu tehdään.

Seuraavassa käydään läpi lomakkeen kenttien selitykset ja suositellut valinnat. PAkolliset kentät on lihavoitu. Riippuen valinnoistasi kaikkia kenttiä ei välttävättä näytetä lainkaan. Osa kentistä on Show advanced option-valinnan takana.

Kenttä Selitys
Git Repo URL Repositorion osoite. Huom! Jos repositorio on yksityinen, osoite pitää antaa SSH-muodossa (esim. git@github.com:username/reponame.git).
Git reference Haara, tag tai commit, josta julkaisu tehdään. Ei tarvita, jos julkaisu tehdään oletushaarasta.
Context dir Sovellusprojektin juurihakemisto, oletusarvoisesti repositorion juurihakemisto /.
Source Secret Salaisuus, joka sisältää repositoriopääsyyn tarvittavan SSH-avaimen. Tarvitaan vain, jos repositorio on yksityinen. Salaisuuden voi myös luoda valinnalla Create new Secret.
Select project Valitse projekti, johon sovellus luodaan.

Tässä vaiheessa voit valita, haluatko luoda sovelluksesi Dockerfile:n vai Source-to-Image-työkalujen avulla.

Voit vaihtaa julkaisumenetelmää valitsemalla Edit Import Strategy. Valinta vaikuttaa siihen, mitä muita kenttiä lomakkeessa näytetään.

Source-to-Image -julkaisussa ei ole erityisiä asetuksia. Jos valitset julkaisumenetelmäksi Dockerfile tai Builder Image, on tehtävä lisävalintoja.

Kenttä Selitys
Dockerfile path Jos valitsit metodiksi Dockerfile, voit määrittää Dockerfile:n sijainnin ja nimen. Oletusarvoisesti nimi on Dockerfile ja sijainti sovelluksen juuressa.
Kenttä Selitys
Builder Image Jos valitsit metodiksi Builder Image, valitse Java.
Builder Image version Jos valitsit metodiksi Builder Image, valitse versio, jonka JDK vastaa projektisi JDK-versiota.

Kaikkien julkaisumenetelmien yhteisiä valintoja ovat:

Kenttä Selitys
Application Sovelluksen nimi.
Name Sovelluksen tunniste, joka liitetään kaikkiin sovellukseen luotaviin resursseihin etuliitteksi.
Build Option Valitse oletus Build Config ja muut oletukset.
Resource type Valitse oletus Deployment ja muut oletukset.
Target port Palveluun luodun reitin portti. Valitse oletus 8080 ja muut oletukset.

Kun painat valintaa Create, tarvittavat resurssit luodaan ja build käynnistyy. Voit seurata buildin etenemistä web-käyttöliittymässä linkistä View logs tai klikkaamalla build status -symbolia graafisesta esityksestä.

Kun julkaisu on onnistunut, projektiin on ilmaantunut Deployment, jossa on toivottavasti käynnissä oleva kontti (Pod), palvelu (Service) sekä reitti (Route). josta sovelluksesi vastaa. Voit tarkastella sovelluksesi käynnistymistä ja toimintaa podin lokitiedoista (linkki View logs). Kun sovellus on käynnissä, voit klikata reitin URL-osoitetta (osiossa Routes) ja tarkistaa, että sovelluksesi vastaa odotetusti.

Jos jokin meni pielee, tilannetta voi selvitellä luvun Virheenjäljitys ohjeiden avulla.

Kun olet tehnyt muutoksia sovellukseesi, voit käynnistää uuden buildin manuaalisesti klikkaamalla Start Build -painiketta. Build voidaan myös automatisoida tapahtumaan aina, kun GitHub-repositorioon pusketaan uusi versio lähdekoodista, ks. Buildin automatisointi.

Sovelluksen luonti komentorivillä

Sovellus voidaan luoda komentorivikomennoilla. Tämä tapa on vaihtoehtoinen web-käyttöliittymän käytölle.

Huom! Jotta tässä luvussa käytettäviä oc-komentoja voi antaa, on ensin kirjauduttava Rahti-palveluun luvun Rahti-palveluun kirjautuminen komentorivillä ohjeiden mukaisesti.

Kirjaudu ensin Rahti-palveluun komentorivillä ja aseta luomasi projekti aktiiviseksi.

oc project myproject

Uusi sovellus voidaan luoda komentorivikomennolla oc new-app. Komennolle annetaan parametrina repositorio-osoite, josta projekti käydään hakemassa.

Sovellusprojektin sijainti repositoriossa

Jos sovellusprojekti ei sijaitse repositorion juurihakemistossa, projektihakemisto annetaan oc new-app-komennossa valitsinparametrilla --context-dir:

--context-dir=<projektihakemisto>
- <projektihakemisto> on suhteellinen polku repositorion juuresta siihen hakemistoon, jossa sovellusprojekti sijaitsee, esim. --context-dir=myproj.

Repositorio-oikeudet

Jos repositorio on julkinen, ei pääsyoikeuksia tarvitse erikseen määrittää.

Jos repositorio on yksityinen, annettavissa komennoissa on annettava tieto tarvittavasta SSH-avaimesta valitsimella

--source-secret=<github-creds-secret-name>
  • <github-creds-secret-name> on salaisuus, joka sisältää yksityisen SSH-avaimen.

Tässä tapauksessa repositorion osoite pitää antaa SSH-muodossa, esim:

git@github.com:<user>/<repositorionimi>.git

Sovelluksen luontikomennot

Seuraavissa esimerkeissä käydään läpi sovelluksen luonti molemmilla edellä mainituilla tavoilla. Kaikki komennot tehdään komentoriviltä.

Jos repositorio on julkinen, voit luoda projektiin sovelluksen (application) komennolla:

oc new-app <repository-URL>#<branch-name>
- <repository-URL> on osoite, josta repositorion voi kloonata - <branch-name> on haara, josta julkaistaan.

Jos repositorio on yksityinen, on komentoon lisättävä tieto käytettävästä SSH-avaimesta:

oc new-app <repository-URL>#<branch-name> --source-secret=<github-creds-secret-name>

Jos repositorio on julkinen, voit luoda projektiin sovelluksen (application) komennolla:

oc new-app registry.access.redhat.com/ubi8/openjdk-17:1.18-2~<repository-URL>#<branch-name>
- registry.access.redhat.com/ubi8/openjdk-17:1.18-2 on S2I-työkalulevykuva Java 17-sovelluksille - <repositorio-URL> on osoite, josta repositorion voi kloonata - <branch-name> on haara, josta julkaistaan.

Jos repositorio on yksityinen, on komentoon lisättävä tieto käytettävästä SSH-avaimesta:

oc new-app registry.access.redhat.com/ubi8/openjdk-17:1.18-2~<repository-URL>#<branch-name> --source-secret=<github-creds-secret-name>

Komennon tuloksena ludoaan tarvittavat resurssit ja build käynnistyy. Voit seurata buildin etenemistä web-käyttöliittymässä.

Kun julkaisu on onnistunut, projektiin on ilmaantunut Deployment, jossa on toivottavasti käynnissä oleva kontti (Pod) ja palvelu (Service). Jos näin ei ole, tilannetta voi selvitellä luvun Virheenjäljitys ohjeiden avulla.

Tämän jälkeen on vielä avattava palvelulle reitti (route), jolla palveluun pääsee internetistä. Sen voi tehdä komennolla:

oc expose service <service-name>
- <service-name> on äsken luodun palvelun nimi, oletusarvoisesti sama kuin sovelluksen nimi. Sovelluksen palvelut voi katsoa web-käyttöliittymästä tai listata komennolla oc get svc.

Buildin käynnistäminen manuaalisesti

Julkaisun jälkeen uusi julkaisu voidaan käynnistää manuaalisesti web-käyttöliittymästä tai komentorivillä oc-komennolla.

oc start-build <build-config-name>
- <build-config-name> on oletusarvoisesti sama kuin <deployment-config-name>

Build voidaan myös automatisoida tapahtumaan aina, kun GitHub-repositorioon pusketaan uusi versio lähdekoodista