From 4108d737e3f7a0eecaff6aa44c7318f468369552 Mon Sep 17 00:00:00 2001 From: grigo Date: Thu, 11 Jun 2026 11:55:10 +0300 Subject: [PATCH] fixed jenkins --- Jenkinsfile | 95 ++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 66a67d9..600f485 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,8 +1,14 @@ // Home AI Assistant — деплой на Linux (Docker). // -// Нода Jenkins: Labels = linux (Manage Jenkins → Nodes → мастер → Configure) +// Нода: label linux // -// На сервере: /home/grigo/to_services/Home_assistant (.env, data/) +// Реальный путь репо (не symlink): /srv/storage/disk2/services/Home_assistant +// ~/to_services/Home_assistant может быть ссылкой на него. +// +// Права jenkins (один раз): +// sudo usermod -aG docker jenkins +// sudo setfacl -m u:jenkins:rx /home/grigo /home/grigo/to_services +// sudo setfacl -R -m u:jenkins:rwX /srv/storage/disk2/services/Home_assistant pipeline { agent { @@ -24,19 +30,14 @@ pipeline { ) string( name: 'DEPLOY_DIR', - defaultValue: '/home/grigo/to_services/Home_assistant', - description: 'Каталог с .env, data/ и docker-compose.yml' + defaultValue: '/srv/storage/disk2/services/Home_assistant', + description: 'Каталог деплоя (.env, data/, docker-compose.yml)' ) string( name: 'BACKEND_HEALTH_URL', defaultValue: 'http://127.0.0.1:8202/api/v1/health', description: 'Healthcheck после деплоя' ) - booleanParam( - name: 'RUN_TESTS', - defaultValue: true, - description: 'npm run build + compileall в workspace перед деплоем' - ) booleanParam( name: 'DOCKER_PULL', defaultValue: true, @@ -49,57 +50,51 @@ pipeline { DEPLOY_DIR = "${params.DEPLOY_DIR}" BACKEND_HEALTH_URL = "${params.BACKEND_HEALTH_URL}" DOCKER_PULL = "${params.DOCKER_PULL}" - RUN_TESTS = "${params.RUN_TESTS}" } stages { - stage('Test') { - when { - expression { return params.RUN_TESTS } - } - steps { - sh ''' - set -euxo pipefail - cd frontend - if [ -f package-lock.json ]; then npm ci; else npm install; fi - npm run build - cd .. - python3 -m compileall -q backend/app - ''' - } - } - stage('Preflight') { steps { sh ''' set -euxo pipefail + REPO_DIR=$(readlink -f "${DEPLOY_DIR}") + echo "REPO_DIR=${REPO_DIR}" + command -v docker docker compose version - test -d "${DEPLOY_DIR}" - test -f "${DEPLOY_DIR}/.env" - test -f "${DEPLOY_DIR}/docker-compose.yml" + + test -d "${REPO_DIR}" + test -r "${REPO_DIR}" + test -w "${REPO_DIR}" + test -f "${REPO_DIR}/.env" + test -f "${REPO_DIR}/docker-compose.yml" + + # git от jenkins: владелец репо — grigo + git config --global --add safe.directory "${REPO_DIR}" ''' } } stage('Deploy') { steps { - dir("${DEPLOY_DIR}") { - sh ''' - set -euxo pipefail - git fetch --prune origin - git reset --hard "origin/${GIT_BRANCH}" - git clean -fd -e .env -e data -e 'data/**' + sh ''' + set -euxo pipefail + REPO_DIR=$(readlink -f "${DEPLOY_DIR}") + git config --global --add safe.directory "${REPO_DIR}" + cd "${REPO_DIR}" - if [ "${DOCKER_PULL}" = "true" ]; then - docker compose build --pull - else - docker compose build - fi - docker compose up -d - docker compose ps - ''' - } + git fetch --prune origin + git reset --hard "origin/${GIT_BRANCH}" + git clean -fd -e .env -e data -e 'data/**' + + if [ "${DOCKER_PULL}" = "true" ]; then + docker compose build --pull + else + docker compose build + fi + docker compose up -d + docker compose ps + ''' } } @@ -126,13 +121,17 @@ pipeline { echo "Deployed ${DEPLOY_DIR} @ origin/${GIT_BRANCH}" } failure { - dir("${DEPLOY_DIR}") { - sh ''' + sh ''' + REPO_DIR=$(readlink -f "${DEPLOY_DIR}" 2>/dev/null || echo "${DEPLOY_DIR}") + if [ -d "${REPO_DIR}" ] && [ -r "${REPO_DIR}" ]; then + cd "${REPO_DIR}" docker compose ps || true docker compose logs --tail=100 backend || true docker compose logs --tail=50 frontend || true - ''' - } + else + echo "Нет доступа к ${REPO_DIR}" + fi + ''' } } }