From 6f9038eb8e9e10f2e37836aba8ec0dca00f9eb29 Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 3 Mar 2025 20:27:28 +0300 Subject: [PATCH] fixes --- .gitlab-ci.yml | 59 ++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ba698ab..1881faf 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,54 +1,47 @@ -image: docker:latest -stages: - - test - - build - - push - -test: - stage: test - image: python:3.11-alpine - script: - - pip install -q -r requirements.txt - - python -m unittest discover tests - only: - - main - -before_script: - - apk add --no-cache docker-cli curl jq - - | - until docker info; do - echo "Waiting for Docker to be ready..." - sleep 5 - done - -build: - needs: - - test - stage: build - script: - - docker info - - docker build -t $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG . - - docker tag $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA - - docker tag $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG $CI_REGISTRY/$CI_PROJECT_PATH:latest - push: needs: - build stage: push script: - | + # Получаем хэш текущего образа CURRENT_IMAGE_HASH=$(docker inspect --format='{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}no_digest{{end}}' $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG) + + # Получаем хэш существующего образа в реестре EXISTING_IMAGE_HASH=$(curl -s --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "https://gl.beaconborn.ru/api/v4/projects/$CI_PROJECT_ID/registry/repositories/1/tags/$CI_COMMIT_REF_SLUG" | jq -r '.digest') + # Если хэши не совпадают или образ не существует, пушим новый образ if [ "$CURRENT_IMAGE_HASH" != "$EXISTING_IMAGE_HASH" ] && [ "$CURRENT_IMAGE_HASH" != "no_digest" ]; then echo "Image has changed, pushing to the registry..." + + # Логинимся в реестр Docker echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY + + # Пушим все теги docker push $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG docker push $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_SHORT_SHA docker push $CI_REGISTRY/$CI_PROJECT_PATH:latest else echo "Image is unchanged, skipping push." fi + # Проверка образа: запуск контейнера и healthcheck + - echo "Running container to test image" + - docker run -d --name test_container -p 5050:5050 $CI_REGISTRY/$CI_PROJECT_PATH:$CI_COMMIT_REF_SLUG + - | + # Запуск healthcheck, проверка работы API + echo "Waiting for the application to start..." + sleep 10 # Даем время контейнеру на стартап + + # Пробуем выполнить запрос на /health + if curl --fail http://localhost:5050/health; then + echo "Healthcheck passed" + else + echo "Healthcheck failed, stopping push" + exit 1 + fi + + # Удаляем временный контейнер после теста + - docker rm -f test_container only: - main