ogbrowser/Jenkinsfile

176 lines
6.6 KiB
Groovy

@Library('jenkins-shared-library') _
pipeline {
agent {
docker {
image 'ogbrowser-build:latest'
args '-u root:root'
label 'jenkins-slave'
}
}
environment {
DEBIAN_FRONTEND = 'noninteractive'
DEFAULT_DEV_NAME = 'Opengnsys Team'
DEFAULT_DEV_EMAIL = 'opengnsys@qindel.com'
}
parameters {
string(name: 'DEV_NAME', defaultValue: '', description: 'Nombre del desarrollador')
string(name: 'DEV_EMAIL', defaultValue: '', description: 'Email del desarrollador')
}
stages {
stage('Prepare environment') {
steps {
sh '''
apt-get update
apt-get install -y openssh-client
mkdir -p debian
echo "Workspace preparado: ${WORKSPACE}"
'''
}
}
stage('Install Dependencies') {
steps {
sshagent (credentials: ['aptly-key']) {
sh '''
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y build-essential cmake g++ qt6-base-dev qt6-webengine-dev linguist-qt6 libgl1-mesa-dev qt6-tools-dev qt6-l10n-tools qt6-tools-dev-tools libqt6core5compat6-dev lxqt-build-tools qt6-webengine-dev-tools libqt6webenginecore6-bin ninja-build
# Verificar conexión con aptly
aptly=172.17.8.68
ssh aptly@${aptly} -o StrictHostKeyChecking=no "uptime"
'''
}
}
}
stage('Generate Changelog') {
when {
expression { return env.TAG_NAME != null }
}
steps {
script {
def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME
def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL
// Generar changelog en el workspace root (donde está el directorio debian)
generateDebianChangelog(env.WORKSPACE, devName, devEmail)
}
}
}
stage('Generate Changelog (Nightly)') {
when { branch 'main' }
steps {
script {
def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME
def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL
// Generar changelog nightly en el workspace root
generateDebianChangelog(env.WORKSPACE, devName, devEmail, 'nightly')
}
}
}
stage('Verify Changelog') {
steps {
sh '''
echo "=== Verificando changelog generado ==="
echo "Workspace: ${WORKSPACE}"
ls -la debian/ || echo "❌ No existe directorio debian"
if [ -f debian/changelog ]; then
echo "✅ Changelog encontrado:"
head -5 debian/changelog
else
echo "❌ No existe archivo changelog"
fi
'''
}
}
stage('Build') {
steps {
sh '''
echo "=== Preparando build ==="
mkdir -p build
cd build
echo "=== Verificando estructura antes de CMake ==="
echo "Directorio actual: $(pwd)"
echo "Buscando changelog en: ../debian/changelog"
ls -la ../debian/changelog || echo "❌ Changelog no encontrado"
echo "=== Configurando CMake ==="
cmake .. -G Ninja
echo "=== Compilando ==="
ninja
'''
}
}
stage('Create package') {
steps {
sh '''
cd build
echo "=== Verificando configuración de versión ==="
cmake -L . | grep -i "cpack.*version" || echo "No hay variables de versión configuradas"
echo "=== Creando paquete Debian ==="
cpack -G DEB --verbose
echo "=== Paquetes generados ==="
ls -la *.deb
echo "=== Información del paquete ==="
PACKAGE_FILE=$(ls *.deb | head -1)
dpkg-deb --info "$PACKAGE_FILE" | head -20
echo "=== Verificando contenido del paquete ==="
dpkg-deb --control "$PACKAGE_FILE" extracted_control
if [ -f extracted_control/changelog.Debian.gz ]; then
echo "✅ Changelog incluido en el paquete"
else
echo "❌ Changelog NO incluido en el paquete"
fi
'''
}
}
stage("Upload package to Aptly") {
steps {
sshagent (credentials : ['aptly-key']) {
withCredentials([string(credentialsId: 'aptly-gpg-passphrase', variable: 'GPG_PASSPHRASE')]) {
sh '''
aptly=172.17.8.68
# Detectar automáticamente el nombre del paquete generado
PACKAGE_FILE=$(ls build/*.deb | head -1)
PACKAGE_NAME=$(basename "$PACKAGE_FILE")
echo "📦 Subiendo paquete: $PACKAGE_NAME"
# Verificar que el archivo existe
if [ ! -f "$PACKAGE_FILE" ]; then
echo "❌ Error: No se encontró el paquete generado"
exit 1
fi
# Subir el paquete
scp -o StrictHostKeyChecking=no "$PACKAGE_FILE" aptly@${aptly}:/tmp/
ssh aptly@${aptly} -o StrictHostKeyChecking=no "aptly repo add opengnsys /tmp/$PACKAGE_NAME"
echo "✅ Paquete subido correctamente: $PACKAGE_NAME"
'''
}
}
}
}
}
post {
always {
cleanWs()
}
}
}