fixed jenkins

This commit is contained in:
2026-06-11 11:55:10 +03:00
parent 533f047e45
commit 4108d737e3
Vendored
+32 -33
View File
@@ -1,8 +1,14 @@
// Home AI Assistant — деплой на Linux (Docker). // 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 { pipeline {
agent { agent {
@@ -24,19 +30,14 @@ pipeline {
) )
string( string(
name: 'DEPLOY_DIR', name: 'DEPLOY_DIR',
defaultValue: '/home/grigo/to_services/Home_assistant', defaultValue: '/srv/storage/disk2/services/Home_assistant',
description: 'Каталог с .env, data/ и docker-compose.yml' description: 'Каталог деплоя (.env, data/, docker-compose.yml)'
) )
string( string(
name: 'BACKEND_HEALTH_URL', name: 'BACKEND_HEALTH_URL',
defaultValue: 'http://127.0.0.1:8202/api/v1/health', defaultValue: 'http://127.0.0.1:8202/api/v1/health',
description: 'Healthcheck после деплоя' description: 'Healthcheck после деплоя'
) )
booleanParam(
name: 'RUN_TESTS',
defaultValue: true,
description: 'npm run build + compileall в workspace перед деплоем'
)
booleanParam( booleanParam(
name: 'DOCKER_PULL', name: 'DOCKER_PULL',
defaultValue: true, defaultValue: true,
@@ -49,44 +50,39 @@ pipeline {
DEPLOY_DIR = "${params.DEPLOY_DIR}" DEPLOY_DIR = "${params.DEPLOY_DIR}"
BACKEND_HEALTH_URL = "${params.BACKEND_HEALTH_URL}" BACKEND_HEALTH_URL = "${params.BACKEND_HEALTH_URL}"
DOCKER_PULL = "${params.DOCKER_PULL}" DOCKER_PULL = "${params.DOCKER_PULL}"
RUN_TESTS = "${params.RUN_TESTS}"
} }
stages { 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') { stage('Preflight') {
steps { steps {
sh ''' sh '''
set -euxo pipefail set -euxo pipefail
REPO_DIR=$(readlink -f "${DEPLOY_DIR}")
echo "REPO_DIR=${REPO_DIR}"
command -v docker command -v docker
docker compose version docker compose version
test -d "${DEPLOY_DIR}"
test -f "${DEPLOY_DIR}/.env" test -d "${REPO_DIR}"
test -f "${DEPLOY_DIR}/docker-compose.yml" 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') { stage('Deploy') {
steps { steps {
dir("${DEPLOY_DIR}") {
sh ''' sh '''
set -euxo pipefail set -euxo pipefail
REPO_DIR=$(readlink -f "${DEPLOY_DIR}")
git config --global --add safe.directory "${REPO_DIR}"
cd "${REPO_DIR}"
git fetch --prune origin git fetch --prune origin
git reset --hard "origin/${GIT_BRANCH}" git reset --hard "origin/${GIT_BRANCH}"
git clean -fd -e .env -e data -e 'data/**' git clean -fd -e .env -e data -e 'data/**'
@@ -101,7 +97,6 @@ pipeline {
''' '''
} }
} }
}
stage('Healthcheck') { stage('Healthcheck') {
steps { steps {
@@ -126,13 +121,17 @@ pipeline {
echo "Deployed ${DEPLOY_DIR} @ origin/${GIT_BRANCH}" echo "Deployed ${DEPLOY_DIR} @ origin/${GIT_BRANCH}"
} }
failure { 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 ps || true
docker compose logs --tail=100 backend || true docker compose logs --tail=100 backend || true
docker compose logs --tail=50 frontend || true docker compose logs --tail=50 frontend || true
else
echo "Нет доступа к ${REPO_DIR}"
fi
''' '''
} }
} }
}
} }