Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
target
.mvn/wrapper/dists
.git
.gitignore
.idea
*.iml
49 changes: 49 additions & 0 deletions .github/workflows/cd-master.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: CD - Build, Push Image, (Optional) Rollout

on:
push:
branches: [ master ]

env:
IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/intens-api-2022
TAG: ${{ github.sha }}

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write # potrebno za push na GHCR
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 8 (Temurin)
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '8'
cache: 'maven'

- name: Build JAR
run: mvn -B -e -DskipTests clean package

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build & push Docker image (Dockerfile.ci)
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile.ci
push: true
tags: |
${{ env.IMAGE_NAME }}:latest
${{ env.IMAGE_NAME }}:${{ env.TAG }}
22 changes: 22 additions & 0 deletions .github/workflows/ci-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: CI - PR tests

on:
pull_request:
branches: [ master ]

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 8 (Temurin)
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '8'
cache: 'maven'

- name: Run tests
run: mvn -B -e test
31 changes: 31 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
FROM container-registry.oracle.com/java/jdk:8 AS build

ENV MAVEN_VERSION=3.8.8 \
MAVEN_HOME=/opt/maven \
PATH=/opt/maven/bin:$PATH

RUN yum -y install curl tar gzip && \
curl -fsSL https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz -o /tmp/maven.tar.gz && \
tar -xzf /tmp/maven.tar.gz -C /opt && \
ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven && \
ln -s /opt/maven/bin/mvn /usr/bin/mvn && \
yum clean all && rm -rf /var/cache/yum /tmp/*

WORKDIR /app

COPY pom.xml .
RUN mvn -q -e -B -DskipTests dependency:go-offline

COPY src ./src
RUN mvn -q -e -B -DskipTests clean package

FROM container-registry.oracle.com/java/serverjre:8
WORKDIR /app

ENV PORT=8080

COPY --from=build /app/target/*.jar /app/app.jar

ENTRYPOINT ["sh","-c","java -jar /app/app.jar --server.port=${PORT}"]

EXPOSE 8080
32 changes: 32 additions & 0 deletions Dockerfile.ci
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
FROM eclipse-temurin:8-jdk AS build

ARG MAVEN_VERSION=3.8.8
ENV MAVEN_HOME=/opt/maven \
PATH=/opt/maven/bin:$PATH

RUN apt-get update && apt-get install -y curl tar gzip && \
curl -fsSL https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz -o /tmp/maven.tar.gz && \
tar -xzf /tmp/maven.tar.gz -C /opt && \
ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven && \
ln -s /opt/maven/bin/mvn /usr/bin/mvn && \
rm -rf /var/lib/apt/lists/* /tmp/*

WORKDIR /app

COPY pom.xml .
RUN mvn -q -e -B -DskipTests dependency:go-offline

COPY src ./src
RUN mvn -q -e -B -DskipTests clean package

FROM eclipse-temurin:8-jre

WORKDIR /app

ENV PORT=8080

COPY --from=build /app/target/*.jar /app/app.jar

ENTRYPOINT ["sh","-c","java -jar /app/app.jar --server.port=${PORT}"]

EXPOSE 8080
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,11 @@ https://docs.github.com/en/actions/automating-builds-and-tests/building-and-test
1. Java 8 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
2. Eclipse / IntelliJ / Alat po izboru
3. Docker https://www.docker.com/products/docker-desktop


### Kako pokrenuti Kubernetes
1. Build local image: docker build -t intens-api-oracle-full:dev .
2. Start Minikube: minikube start --driver=docker
3. Load local image into Minikube: minikube image load intens-api-oracle-full:dev
4. Apply manifests: kubectl apply -f k8s/
5. Get URL and open the app: minikube service intens-api-svc --url
42 changes: 42 additions & 0 deletions k8s/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: intens-api
labels:
app: intens-api
spec:
replicas: 1
selector:
matchLabels:
app: intens-api
template:
metadata:
labels:
app: intens-api
spec:
containers:
- name: intens-api
image: intens-api-oracle-full:dev
imagePullPolicy: IfNotPresent
env:
- name: PORT
value: "8080"
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 4
periodSeconds: 5
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
15 changes: 15 additions & 0 deletions k8s/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: intens-api-svc
labels:
app: intens-api
spec:
type: NodePort
selector:
app: intens-api
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: 30080
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
server.port=${PORT}
server.port=${PORT:8080}