fixed jenkins

This commit is contained in:
2026-06-11 11:55:10 +03:00
parent 533f047e45
commit 4108d737e3
Vendored
+47 -48
View File
@@ -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
'''
}
}
}