96 lines
2.9 KiB
Groovy
96 lines
2.9 KiB
Groovy
pipeline {
|
|
agent {
|
|
kubernetes {
|
|
// Definiert den Pod mit dem .NET 8 SDK Image
|
|
yaml '''
|
|
apiVersion: v1
|
|
kind: Pod
|
|
spec:
|
|
containers:
|
|
- name: dotnet8
|
|
image: mcr.microsoft.com/dotnet/sdk:8.0
|
|
command:
|
|
- cat
|
|
tty: true
|
|
- name: trivy
|
|
image: aquasec/trivy:latest
|
|
command:
|
|
- cat
|
|
tty: true
|
|
'''
|
|
}
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout Source') {
|
|
steps {
|
|
// Ersetze 'dein-user' und 'dein-repo' durch die Namen aus Gitea
|
|
git url: 'http://130.61.26.230:30080/dev-master/secdevops-csharp-app.git',
|
|
branch: 'master'
|
|
}
|
|
}
|
|
|
|
stage('Build with .NET 8') {
|
|
steps {
|
|
// Führt den Build-Befehl im spezialisierten Container aus
|
|
container('dotnet8') {
|
|
sh 'dotnet --version' // Zur Bestätigung der Version
|
|
sh 'dotnet build'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Security: Trivy Scan') {
|
|
steps {
|
|
container('trivy') {
|
|
// Scannt das Dateisystem auf Schwachstellen (NuGet) und Secrets
|
|
// --exit-code 1 lässt die Pipeline bei kritischen Fehlern abbrechen
|
|
sh 'trivy fs --exit-code 1 --severity HIGH,CRITICAL .'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Unit Tests') {
|
|
steps {
|
|
container('dotnet8') {
|
|
// Erstellt eine XML-Datei im Format 'junit', die Jenkins lesen kann
|
|
// sh 'dotnet test --configuration Release'
|
|
sh 'dotnet test --configuration Release --logger "junit;LogFileName=results.xml"'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Workspace Check') {
|
|
steps {
|
|
container('dotnet8') {
|
|
// Listet alle Dateien auf.
|
|
// Wenn du hier Ordner wie 'bin' oder 'obj' siehst, BEVOR dotnet build lief,
|
|
// dann bleibt der Workspace erhalten.
|
|
sh 'ls -R'
|
|
|
|
// Optional: Erstelle eine Testdatei, um es beim nächsten Mal zu sehen
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Set Build Name') {
|
|
steps {
|
|
script {
|
|
// Setzt den Namen des aktuellen Laufs auf die Version + Build-Nummer
|
|
currentBuild.displayName = "v1.0.0-build-${env.BUILD_NUMBER}"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
// Sammelt die Testergebnisse ein (die wir im Test-Schritt erzeugen)
|
|
// Das **/ bedeutet: Suche in allen Unterordnern nach .xml Dateien
|
|
junit testResults: '**/TestResults/*.xml', allowEmptyResults: true
|
|
|
|
// Meldet den Status zurück, wenn das Gitea-Plugin korrekt konfiguriert ist
|
|
echo "Pipeline beendet: ${currentBuild.result}"
|
|
}
|
|
}
|
|
} |