17 Commits

Author SHA1 Message Date
571a45d3de Added script to trigger and measure deployment time 2025-07-20 10:00:29 +02:00
560090319a Added build args to Dockerfile 2025-07-20 09:59:53 +02:00
cefb8eba4d Added missing dgoss installation
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-25 20:09:14 +00:00
1e54ba614a Corrected output path for dgoss command
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 20:05:49 +00:00
7469609600 Removed redundant quote around dgoss command
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 20:01:31 +00:00
b7a1fcfe49 Added double quotes around dgoss run command 2025-05-25 20:00:13 +00:00
a9743ecfbe Restored old procedure for Goss tests 2025-05-25 19:59:21 +00:00
76f33f50f5 Extended time to dockerd start
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 19:54:30 +00:00
203a81573d Added dockerd start in the background
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 19:43:19 +00:00
383e906102 Corrected image name
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 19:36:16 +00:00
e7330f07ee Returned to privileged mode
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 19:34:22 +00:00
c996be5953 Modified building step 2025-05-25 17:44:17 +00:00
bf60011948 Added double quotes around command to run Dgoss 2025-05-25 17:17:11 +00:00
82d5962020 Added steps to build, test and push docker image 2025-05-25 17:14:18 +00:00
1254b036f5 Added cd to api directory
All checks were successful
ci/woodpecker/push/build Pipeline was successful
2025-05-25 16:54:15 +00:00
6d84bf694e Added python tests to Woodpecker Workflow
Some checks failed
ci/woodpecker/push/build Pipeline failed
2025-05-25 16:43:44 +00:00
c2df9d136e Test first Woodpecker workflow
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
2025-05-25 16:19:25 +00:00
3 changed files with 117 additions and 1 deletions

49
.woodpecker/build.yaml Normal file
View File

@ -0,0 +1,49 @@
when:
- event: push
branch: woodpecker
steps:
- name: code-tests
image: python:3.11.7-alpine
commands:
- cd api
- python3 -m venv env
- source env/bin/activate
- pip install -r requirements.txt pytest
- python3 -m pytest --junit-xml=pytest_junit.xml
- name: build
image: docker:dind
privileged: true
environment:
ACR_USERNAME: marcin00
ACR_PASSWORD:
from_secret: acr_password
commands:
- dockerd-entrypoint.sh &
- sleep 10 # czas na uruchomienie usługi Docker
- DOCKER_IMAGE=marcin00.azurecr.io/user-microservice:$CI_COMMIT_SHA
- echo "===> Building Docker image"
- docker build -t $DOCKER_IMAGE .
- echo "===> Installing bash"
- apk add --no-cache bash
- echo "===> Installing goss"
- wget https://github.com/aelsabbahy/goss/releases/latest/download/goss-linux-amd64 -O goss
- wget https://github.com/aelsabbahy/goss/releases/latest/download/dgoss -O dgoss
- chmod +x *goss
- echo "===> Starting container for test"
- export GOSS_OPTS="-f junit"
- export GOSS_PATH=./goss
- export GOSS_SLEEP=3
- "./dgoss run -e SQLALCHEMY_DATABASE_URI=sqlite:///:memory: $DOCKER_IMAGE > goss_junit.xml"
- echo "===> Logging in to ACR"
- echo "$ACR_PASSWORD" | docker login marcin00.azurecr.io -u $ACR_USERNAME --password-stdin
- echo "===> Pushing image to ACR"
- docker push $DOCKER_IMAGE

View File

@ -1,5 +1,18 @@
FROM python:3.11.7-slim-bookworm FROM python:3.11.7-alpine
# Wersja i data builda jako build-arg
ARG APP_VERSION=unknown
ARG BUILD_DATE=unknown
# Ustawiamy zmienne w ENV, by były dostępne w kontenerze
ENV APP_VERSION=$APP_VERSION
ENV BUILD_DATE=$BUILD_DATE
WORKDIR /app WORKDIR /app
COPY api . COPY api .
RUN apk add --no-cache curl
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
CMD python3 app.py CMD python3 app.py

54
deployment_timer.sh Executable file
View File

@ -0,0 +1,54 @@
#!/bin/bash
# === KONFIGURACJA ===
APP_URL="https://user-microservice.marcin00.pl/version"
MARKER_FILE="version_marker.txt"
OUTPUT_FILE="deployment_times.csv"
CHECK_INTERVAL=1 # sekundy
# === POBRANIE AKTUALNEJ WERSJI APLIKACJI ===
echo "[INFO] Pobieranie aktualnej wersji z /version..."
OLD_VERSION=$(curl -s "$APP_URL" | jq -r '.version')
if [[ -z "$OLD_VERSION" ]]; then
echo "[ERROR] Nie udało się pobrać aktualnej wersji aplikacji."
exit 1
fi
echo "[INFO] Aktualna wersja: $OLD_VERSION"
# === Modyfikacja pliku, commit i push ===
TIMESTAMP=$(date +%s)
echo "$TIMESTAMP" > "$MARKER_FILE"
git add "$MARKER_FILE"
git commit -m "Automatyczna zmiana: $TIMESTAMP"
START_TIME=$(date +%s)
echo "[INFO] Wykonuję git push..."
git push
if [[ $? -ne 0 ]]; then
echo "[ERROR] Push nie powiódł się."
exit 1
fi
echo "[INFO] Oczekiwanie na wdrożenie nowej wersji..."
# === Odpytywanie endpointa /version ===
while true; do
sleep $CHECK_INTERVAL
NEW_VERSION=$(curl -s "$APP_URL" | jq -r '.version')
if [[ "$NEW_VERSION" != "$OLD_VERSION" ]]; then
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "[INFO] Nowa wersja wdrożona: $NEW_VERSION"
echo "[INFO] Czas wdrożenia: $DURATION sekund"
echo "$START_TIME,$END_TIME,$DURATION,$OLD_VERSION,$NEW_VERSION" >> "$OUTPUT_FILE"
break
else
echo "[WAIT] Czekam... ($NEW_VERSION)"
fi
done