Dieses Repository ist der Startpunkt für Übung 1 und wird in allen folgenden Übungen weiterverwendet (CI mit GitHub Actions → SonarCloud → Docker → Security-Scan).
- Extension Pack for Java (Language Support, Debugger, Test Runner, Maven).
- JDK 17 aktiv: Java: Configure Java Runtime.
- Öffne den Projektroot (Ordner mit
pom.xml, nicht nursrc/). - Tests ausführen: Test Explorer oder per Terminal:
mvn -q -DskipTests=false test
mvn -q -DskipTests=false testCoverage-Report (für Übung 2 / SonarCloud): target/site/jacoco/index.html
src/main/java:App,Calculator,TextUtils,NumberUtilssrc/test/java:CalculatorTest,TextUtilsTest(enthält TODOs & einen bewusst fehlschlagenden Test)
Lege dein eigenes Repo mit dem Namen
ci-cd-uebung-[Nachname]an und bringe das Starterprojekt hinein. Wähle eine der Varianten.
Variante A – Fork
- Öffne das Kurs-Starter-Repo (
https://github.com/mrckurz/cicd-BA-uebung01). - Klick Fork → Owner: dein Account → Name:
ci-cd-uebung-[Nachname]→ Create fork. - Deinen Fork klonen (HTTPS oder SSH):
# HTTPS git clone https://github.com/<dein-user>/ci-cd-uebung-[Nachname].git # oder SSH # git clone [email protected]:<dein-user>/ci-cd-uebung-[Nachname].git cd ci-cd-uebung-[Nachname]
- Upstream einrichten (Original-Repo als Referenz):
git remote add upstream https://github.com/<org>/<kurs-starter-repo>.git git remote -v # => origin = dein Fork, upstream = Kurs-Repo
- (Später) Kurs-Änderungen holen:
git fetch upstream git switch main git merge upstream/main # oder: git rebase upstream/main
Variante B – „Use this template“ / Import
- Im Kurs-Repo auf Use this template → Owner: dein Account → Name:
ci-cd-uebung-[Nachname]→ Create.
(Alternativ: GitHub → Import repository → URL des Kurs-Repos eintragen.) - Klonen:
git clone https://github.com/<dein-user>/ci-cd-uebung-[Nachname].git cd ci-cd-uebung-[Nachname]
Variante C – ZIP/Download in dein leeres Repo pushen
- Lege auf GitHub ein leeres Repo
ci-cd-uebung-[Nachname]an. - Lade das Starterprojekt als ZIP herunter, entpacke es und initialisiere Git:
cd <entpackter-ordner-mit-pom.xml> git init git add . git commit -m "chore: import starter project" git branch -M main git remote add origin https://github.com/<dein-user>/ci-cd-uebung-[Nachname].git git push -u origin main
Erster Check lokal
mvn -v
mvn -q -DskipTests=false test- Das Starterprojekt liegt bereits unter
src/. - Aufgabe: Schreibe mindestens zwei zusätzliche Unit-Test in
src/test/java(z. B. weitere Fälle fürCalculatoroderTextUtils). - Stelle sicher, dass die Tests lokal ausführbar sind (
mvn testoder Test-Explorer).
- Erstelle einen Branch
feature/about-me. - Lege eine Datei
about-me.mdim Projektroot an mit folgendem Inhalt:- Name
- Studiengang
- Erwartungen an die LV (kurz)
- 3 Fakten über dich
- Ein kurzer Satz: „Warum ist CI/CD für mich relevant?“
- Commit & Push des Branches.
- Erstelle auf GitHub einen Pull Request von
feature/about-meaufmainmit sinnvoller Beschreibung. - Team-Review (2–3er Teams, je eigenes Repo): mind. 1 Kommentar.
- Adressiere das Feedback und merge den PR.
- Ergänze die
README.mdim Main-Branch um den Abschnitt:## Übung 1 - Autor: <dein Name> - Besonderheit: <1–2 Sätze zu deiner bisherigen Git-Erfahrung>
- Reiche den Repo-Link in eLearning bis 14.10.2025, 23:55 ein.
| Teilaufgabe | Beschreibung | Punkte |
|---|---|---|
| Repo einrichten | Repo + Starterprojekt im eigenen Repo, lokal geklont | 4 |
| Projektgrundlage & Tests | mindestens 2 zusätzlichen Tests geschrieben, Tests laufen lokal | 6 |
| Branching | Branch erstellt, about-me.md mit allen geforderten Inhalten |
6 |
| PR & Review | PR mit Beschreibung, 1 Review-Kommentar, Merge | 6 |
| Dokumentation | README-Abschnitt „Übung 1“ ergänzt | 2 |
| Summe | 24 |
- Branch-Namen:
feature/<kurz>,fix/<issue-id>-<kurz> - Commit-Messages: Conventional Commits (
feat:,fix:,docs:,test:,refactor:…) - PR-Qualität: kleine Diffs, klare Beschreibung, mindestens 1 Review-Kommentar
- Issues: Labels (
bug,feat,docs, …), PRs mit Issues verlinken (Fixes #<nr>)
- String-Vergleich mit
==inTextUtils.isPalindrome(Bug) - Leerer
catch-Block + zu generische Exception inTextUtils.safeParseInt - Duplizierter Code in
Calculator.sumUp/addAll - Magic Numbers (
42,3/5/7/13/17) System.out.printlnstatt Logger inApp- öffentliche, nicht finale statische Felder (
MAX_OPERANDS,DEFAULT_LIMIT) - unbenutztes Feld in
NumberUtils
- Projekt-Root geöffnet (Ordner mit
pom.xml)? java -versionundmvn -vliefern Versionen?- In
pom.xmlstehenjunit-jupiter-apiundjunit-jupiter-engine; Surefire 3.x aktiv? - Tests lokal grün:
mvn -q -DskipTests=false test git remote -v: origin → eigenes Repo; upstream (falls vorhanden) nur zum Lesen.
- Installieren (PowerShell):
winget install Git.Git winget install Apache-Maven.Apache-Maven winget install EclipseAdoptium.Temurin.17.JDK java -version mvn -v setx JAVA_HOME "C:\Program Files\Eclipse Adoptium\jdk-17" $env:PATH += ";C:\Program Files\Eclipse Adoptium\jdk-17�in"
- VS Code → „Java: Configure Java Runtime“ → JDK 17 wählen.
- Lange Pfade:
git config --global core.longpaths true.
- Debian/Ubuntu:
sudo apt update && sudo apt install -y openjdk-17-jdk maven git - Fedora:
sudo dnf install -y java-17-openjdk-devel maven git
- Arch:
sudo pacman -S jdk17-openjdk maven git
- JAVA_HOME/PATH setzen:
java -version && mvn -v echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
- Extension Pack for Java installieren (inkl. Test Runner).
- Projekt neu laden: „Java: Clean Java Language Server Workspace“.
- POM prüfen:
<dependency>org.junit.jupiter:junit-jupiter-api:5.10.2</dependency> <dependency>org.junit.jupiter:junit-jupiter-engine:5.10.2</dependency> <plugin>maven-surefire-plugin:3.2.5</plugin>
- HTTPS + 2FA: statt Passwort Personal Access Token verwenden.
- SSH: Key erstellen & bei GitHub hinterlegen:
ssh-keygen -t ed25519 -C "<deine-mail>" eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519 cat ~/.ssh/id_ed25519.pub # Key bei GitHub > Settings > SSH Keys hinzufügen
- Falscher Push-Remote:
git config remote.pushDefault origin
- PR „Update branch“ / Konflikte:
git fetch origin git switch feature/about-me git merge origin/main # oder: git rebase origin/main # Konflikte in VS Code lösen → mvn test → commit → push
- non-fast-forward beim Push:
git pull --rebase, danngit push. - PR blockiert: Branch-Protection → Approval/Checks (CI) nötig.
# Windows:
git config --global core.autocrlf true
# macOS/Linux:
git config --global core.autocrlf input- Env-Variablen setzen:
$env:HTTP_PROXY="http://proxy:3128"; $env:HTTPS_PROXY="http://proxy:3128"
export HTTP_PROXY=http://proxy:3128 export HTTPS_PROXY=http://proxy:3128
- Maven-Proxy in
~/.m2/settings.xml:<settings> <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>proxy</host><port>3128</port> </proxy> </proxies> </settings>
java -version | mvn -v
git status | git log --oneline --graph --decorate -10
git remote -v | git config --get remote.pushDefault
git branch -vv | git rev-parse --abbrev-ref HEAD
mvn -q -DskipTests=false test- Übung 2 (22.10.): GitHub Actions – Build & Tests automatisiert ausführen; SonarCloud integrieren.