init: hello-cicd project setup
This commit is contained in:
71
.gitea/workflows/ci.yml
Normal file
71
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,71 @@
|
||||
# .gitea/workflows/ci.yml
|
||||
name: CI/CD Pipeline
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
env:
|
||||
REGISTRY: git.fpmoz.sum.ba
|
||||
IMAGE: git.fpmoz.sum.ba/${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
|
||||
# ── JOB 1: Build i Push Docker image ──────────────────
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Checkout koda
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Login u Gitea registry
|
||||
run: |
|
||||
echo ${{ secrets.REGISTRY_PASS }} | \
|
||||
docker login $REGISTRY \
|
||||
-u ${{ secrets.REGISTRY_USER }} --stdin
|
||||
|
||||
- name: Build i Push image
|
||||
run: |
|
||||
TAG=${{ github.sha }}
|
||||
docker build -t $IMAGE:$TAG -t $IMAGE:latest .
|
||||
docker push $IMAGE:$TAG
|
||||
docker push $IMAGE:latest
|
||||
echo $TAG > tag.txt
|
||||
|
||||
- name: Spremi image tag
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: image-tag
|
||||
path: tag.txt
|
||||
|
||||
# ── JOB 2: Deploy na k3s ───────────────────────────────
|
||||
deploy:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Checkout koda
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Preuzmi image tag
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: image-tag
|
||||
|
||||
- name: Postavi kubeconfig
|
||||
run: |
|
||||
mkdir -p ~/.kube
|
||||
echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config
|
||||
chmod 600 ~/.kube/config
|
||||
|
||||
- name: Update image tag u manifestu
|
||||
run: |
|
||||
TAG=$(cat tag.txt)
|
||||
sed -i "s|image:.*|image: $IMAGE:$TAG|" k8s/deployment.yaml
|
||||
|
||||
- name: Deploy na k3s
|
||||
run: |
|
||||
kubectl apply -f k8s/
|
||||
kubectl rollout status deployment/hello-cicd \
|
||||
-n student-${{ github.actor }} --timeout=120s
|
||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
||||
# Dockerfile
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
ENV APP_VERSION=dev
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
28
k8s/deployment.yaml
Normal file
28
k8s/deployment.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: hello-cicd
|
||||
namespace: student-fsusak03
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hello-cicd
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hello-cicd
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: gitea-creds
|
||||
containers:
|
||||
- name: hello-cicd
|
||||
image: git.fpmoz.sum.ba/fsusak03/hello-cicd:latest
|
||||
ports:
|
||||
- containerPort: 8000
|
||||
env:
|
||||
- name: APP_VERSION
|
||||
value: "latest"
|
||||
resources:
|
||||
requests: {cpu: 50m, memory: 64Mi}
|
||||
limits: {cpu: 200m, memory: 128Mi}
|
||||
12
k8s/service.yaml
Normal file
12
k8s/service.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: hello-cicd-svc
|
||||
namespace: student-fsusak03
|
||||
spec:
|
||||
selector:
|
||||
app: hello-cicd
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 8000
|
||||
type: NodePort
|
||||
17
main.py
Normal file
17
main.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# main.py
|
||||
from fastapi import FastAPI
|
||||
import os, datetime
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/health")
|
||||
def health():
|
||||
return {
|
||||
"status": "ok",
|
||||
"version": os.getenv("APP_VERSION", "dev"),
|
||||
"timestamp": datetime.datetime.utcnow().isoformat()
|
||||
}
|
||||
|
||||
@app.get("/")
|
||||
def root():
|
||||
return {"poruka": "Zdravo s k3s!", "host": os.uname().nodename}
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
fastapi==0.115.0
|
||||
uvicorn==0.32.0
|
||||
Reference in New Issue
Block a user