Update .gitea/workflows/dockerK3s.yaml
All checks were successful
Build, Publish Docker Image, and Deploy to Kubernetes / build_and_push (push) Successful in 2s
Build, Publish Docker Image, and Deploy to Kubernetes / deploy_to_k8s (push) Successful in 10s

This commit is contained in:
jonas 2025-03-13 11:53:08 +00:00
parent 61cb7b5c7b
commit 9006382b27

View File

@ -49,61 +49,99 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install kubectl - name: Install kubectl
env:
KUBE_CONFIG: ${{ secrets.K3S_CONFIG }}
shell: bash
run: | run: |
# Fetch the latest stable version of kubectl # Fetch the latest stable version of kubectl
KUBECTL_VERSION=$(curl -s https://dl.k8s.io/release/stable.txt) KUBECTL_VERSION=$(curl -s https://dl.k8s.io/release/stable.txt)
curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl" if [ -z "$KUBECTL_VERSION" ]; then
echo "Failed to fetch the latest kubectl version. Exiting."
exit 1
fi
# Download kubectl binary
curl -LO "https://dl.k8s.io/release/v1.31.0/bin/linux/amd64/kubectl"
if [ $? -ne 0 ]; then
echo "Failed to download kubectl binary. Exiting."
exit 1
fi
# Make kubectl executable and move to PATH
chmod +x kubectl chmod +x kubectl
sudo mv kubectl /usr/local/bin/ sudo mv kubectl /usr/local/bin/
# Verify kubectl installation
kubectl version --client kubectl version --client
- name: Configure kubectl using K3s config # Install kubelogin
run: | curl -fsSLO https://github.com/int128/kubelogin/releases/download/v1.25.4/kubelogin_linux_amd64.zip
mkdir -p ~/.kube unzip kubelogin_linux_amd64.zip kubelogin -d kubelogin
echo "${{ secrets.K3S_CONFIG }}" > ~/.kube/config mv kubelogin/kubelogin kubelogin/kubectl-oidc_login
export PATH=$PATH:$(realpath kubelogin)
- name: Generate and Apply K3s Deployment and Ingress # Configure kubeconfig
mkdir -p ~/.kube
echo "$KUBE_CONFIG" > ~/.kube/config
- name: Generate and Apply K8s Manifests
run: | run: |
cat > k3s_deployment.yaml <<EOF # Get repository name and convert to lowercase
REPO_NAME=$(echo "${GITHUB_REPOSITORY##*/}" | tr '[:upper:]' '[:lower:]')
FULL_REPO=$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]')
# Set namespace consistently
NAMESPACE="gitea-deployment"
echo "Using repository name: $REPO_NAME"
echo "Using full repository path: $FULL_REPO"
echo "Using namespace: $NAMESPACE"
# Create namespace if it doesn't exist
kubectl get namespace $NAMESPACE || kubectl create namespace $NAMESPACE
cat <<EOF > k8s-manifests.yaml
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: ${GITHUB_REPOSITORY} name: ${REPO_NAME}
namespace: ${NAMESPACE}
labels: labels:
app: ${GITHUB_REPOSITORY} app: ${REPO_NAME}
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: ${GITHUB_REPOSITORY} app: ${REPO_NAME}
template: template:
metadata: metadata:
labels: labels:
app: ${GITHUB_REPOSITORY} app: ${REPO_NAME}
spec: spec:
containers: containers:
- name: ${GITHUB_REPOSITORY} - name: ${REPO_NAME}
image: git.ionas999.at/${GITHUB_REPOSITORY}:latest image: git.ionas999.at/${FULL_REPO}:latest
ports: ports:
- containerPort: 80 - containerPort: 80
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: ${GITHUB_REPOSITORY} name: ${REPO_NAME}
namespace: ${NAMESPACE}
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
- port: 80 - port: 80
targetPort: 80 targetPort: 80
selector: selector:
app: ${GITHUB_REPOSITORY} app: ${REPO_NAME}
--- ---
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: ${GITHUB_REPOSITORY}-ingress name: ${REPO_NAME}-ingress
namespace: gitea-deployment namespace: ${NAMESPACE}
annotations: annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true" traefik.ingress.kubernetes.io/router.tls: "true"
@ -112,18 +150,24 @@ spec:
ingressClassName: traefik ingressClassName: traefik
tls: tls:
- hosts: - hosts:
- ${GITHUB_REPOSITORY}.git.ionas999.at - ${REPO_NAME}.git.ionas999.at
rules: rules:
- host: ${GITHUB_REPOSITORY}.git.ionas999.at - host: ${REPO_NAME}.git.ionas999.at
http: http:
paths: paths:
- path: / - path: /
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: ${GITHUB_REPOSITORY} name: ${REPO_NAME}
port: port:
number: 80 number: 80
EOF EOF
kubectl apply -f k3s_deployment.yaml # Display the manifest for debugging
echo "--- Generated manifest: ---"
cat k8s-manifests.yaml
echo "-------------------------"
# Apply the manifests
kubectl apply -f k8s-manifests.yaml