48 lines
2.1 KiB
YAML
Executable File
48 lines
2.1 KiB
YAML
Executable File
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
|