Files
exampleApp/.gitea/workflows/dotnet-deploy.yml
Erik 18a8502118
Some checks failed
Build & Deploy .NET to 192.168.1.100 / build-and-deploy (push) Failing after 1m33s
.gitea/workflows/dotnet-deploy.yml hinzugefügt
2026-01-13 17:59:59 +00:00

97 lines
3.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Build & Deploy .NET to 192.168.1.100
on:
push:
branches: [ "main" ] # ggf. anpassen (z. B. "master" oder Release-Branch)
workflow_dispatch: # manueller Start
env:
DOTNET_VERSION: '8.0.x' # oder 7.0.x je nach Projekt
PROJECT_PATH: 'src/MyApp/MyApp.csproj'
RUNTIME: 'linux-x64'
PUBLISH_DIR: 'artifacts/publish'
jobs:
build-and-deploy:
# Variante 1: Mit Image-Label (siehe Runner-Konfiguration oben)
runs-on: ubuntu-latest
# Variante 2: Falls du keine Mapping-Labels hast, nutze:
# runs-on: [self-hosted, linux]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore
run: dotnet restore "${{ env.PROJECT_PATH }}"
- name: Build
run: dotnet build "${{ env.PROJECT_PATH }}" -c Release --no-restore
# --- Publish: self-contained (empfohlen) ---
- name: Publish (self-contained)
run: |
dotnet publish "${{ env.PROJECT_PATH }}" \
-c Release \
-r "${{ env.RUNTIME }}" \
--self-contained true \
-o "${{ env.PUBLISH_DIR }}"
# --- Alternative (framework-dependent) ---
# - name: Publish (framework-dependent)
# run: |
# dotnet publish "${{ env.PROJECT_PATH }}" \
# -c Release \
# -o "${{ env.PUBLISH_DIR }}"
- name: Prepare SSH key & known_hosts
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
install -m 700 -d ~/.ssh
echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_deploy
chmod 600 ~/.ssh/id_deploy
# Host-Key hinzufügen (sicherer als StrictHostKeyChecking=no)
PORT="${SSH_PORT:-22}"
ssh-keyscan -p "${PORT}" -H "${SSH_HOST}" >> ~/.ssh/known_hosts
- name: Create remote directory
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
REMOTE_DIR: ${{ secrets.REMOTE_DIR }}
run: |
ssh -i ~/.ssh/id_deploy -p "${SSH_PORT:-22}" "${SSH_USER}@${SSH_HOST}" "mkdir -p '${REMOTE_DIR}'"
- name: Deploy via SCP
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
REMOTE_DIR: ${{ secrets.REMOTE_DIR }}
run: |
scp -i ~/.ssh/id_deploy -P "${SSH_PORT:-22}" -r "${{ env.PUBLISH_DIR }}/"* "${SSH_USER}@${SSH_HOST}:${REMOTE_DIR}/"
# -------- Option A: Neustart per systemd (empfohlen) --------
# Benötigt: secrets.SERVICE_NAME (z. B. "myapp.service")
- name: Restart service (systemd)
if: ${{ secrets.SERVICE_NAME != '' }}
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
run: |
ssh -i ~/.ssh/id_deploy -p "${SSH_PORT:-22}" "${SSH_USER}@${SSH_HOST}" \
"sudo systemctl daemon-reload && sudo systemctl restart '${SERVICE_NAME}' && sudo systemctl status --no-pager '${SERVICE_NAME}'"
EOF