pipeline { agent any environment { REGISTRY = 'src.red-soft.ru' PRODUCT_NAME = 'sample' PRODUCT_GROUP = 'biz.redsoft.sample' VERSION = '' } stages { stage('Checkout') { steps { checkout scm } } stage('Extract VERSION') { steps { script { def versionFile = "src/main/resources/META-INF/ncore-product/${params.PRODUCT_GROUP}/version.properties" if (!fileExists(versionFile)) { error "Version file not found: ${versionFile}" } def versionText = readFile(file: versionFile) def matcher = versionText =~ /version=(.+?)(-\[A-Za-z\]+)?/ if (matcher) { env.VERSION = matcher[0][1] echo "Extracted VERSION: ${env.VERSION}" } else { error "Failed to extract version from ${versionFile}" } } } } stage('Make gradlew executable') { steps { sh 'chmod +x ./gradlew' } } stage('Build with Gradle') { steps { sh './gradlew clean' sh './gradlew nTDC nbackup build copyDist publish dockerFile dockerUD rdbDockerFile' } } stage('Build and Push Docker Images') { steps { script { withCredentials([usernamePassword(credentialsId: 'build', usernameVariable: 'USER', passwordVariable: 'PASS')]) { sh ''' echo "$PASS" | docker login --username "$USER" --password-stdin $REGISTRY ''' def REPO_NAME = "${PRODUCT_GROUP.toLowerCase()}/${PRODUCT_NAME.toLowerCase()}" def appImage = "${REGISTRY}/${REPO_NAME}:${VERSION}" sh "docker build -t ${appImage} -f build/docker/Dockerfile ." sh "docker push ${appImage}" def rdbImage = "${REGISTRY}/${REPO_NAME}-db:${VERSION}" sh "docker build -t ${rdbImage} -f build/rdbDocker/Dockerfile ." sh "docker push ${rdbImage}" def udbImage = "${REGISTRY}/${REPO_NAME}-update-db:${VERSION}" sh "docker build -t ${udbImage} -f build/docker-tools/uD/Dockerfile ." sh "docker push ${udbImage}" docker logout $REGISTRY } } } } } post { success { echo "Проект ${PRODUCT_NAME} успешно собран на версии ${VERSION}" } failure { echo "Проект ${PRODUCT_NAME} не собрался на версии ${VERSION}!" } } }