164 lines
10 KiB
Groovy
164 lines
10 KiB
Groovy
def defineNodeEnv() {
|
|
if (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith('main/')) {
|
|
return 'production'
|
|
} else {
|
|
return 'development'
|
|
}
|
|
}
|
|
|
|
pipeline {
|
|
agent any
|
|
|
|
options {
|
|
buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '10'))
|
|
disableConcurrentBuilds()
|
|
skipDefaultCheckout true
|
|
}
|
|
|
|
environment {
|
|
AZIENDA = "integry"
|
|
NODE_ENV = defineNodeEnv()
|
|
}
|
|
|
|
stages {
|
|
stage("Prepare Ws") {
|
|
steps {
|
|
cleanWs deleteDirs: true, patterns: [[pattern: 'exports/', type: 'INCLUDE']]
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage("Build") {
|
|
steps {
|
|
script {
|
|
bat 'cd public_html && composer install --no-dev -o'
|
|
|
|
if (!env.BRANCH_NAME.startsWith('feature/')) {
|
|
echo "Building ${env.NODE_ENV} version"
|
|
|
|
nodejs('NodeJS 20.10.0') {
|
|
bat 'npm install'
|
|
bat 'npm run build'
|
|
|
|
// bat 'cd public_html && npm install --omit=dev'
|
|
|
|
if (env.NODE_ENV == 'development') {
|
|
bat '7za a public_html.zip "%WORKSPACE%\\public_html" -tzip'
|
|
} else if (env.NODE_ENV == 'production') {
|
|
bat 'grunt BuildAll'
|
|
}
|
|
}
|
|
}
|
|
|
|
stash excludes: 'exports,public_html.zip', name: 'docker-ws'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("Deploy") {
|
|
parallel {
|
|
stage("Update Master") {
|
|
steps {
|
|
script {
|
|
if (env.BRANCH_NAME == 'develop') {
|
|
archiveArtifacts artifacts: 'public_html.zip', onlyIfSuccessful: true
|
|
sshPublisher(publishers: [sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13)',
|
|
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sudo /bin/chmod -R 777 /var/www/dev/pvm/cache',
|
|
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+',
|
|
remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
// ftpPublisher alwaysPublishFromMaster: false, masterNodeName: '',
|
|
// paramPublish: [parameterName: ""], continueOnError: false, failOnError: false,
|
|
// publishers: [[configName: 'Production Linux Web Server (ftp.studioml.it)',
|
|
// transfers: [[asciiMode: false, cleanRemote: true, excludes: '', flatten: false, makeEmptyDirs: true,
|
|
// noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/dev/pvm', remoteDirectorySDF: false,
|
|
// removePrefix: 'public_html/', sourceFiles: 'public_html/']], usePromotionTimestamp: false,
|
|
// useWorkspaceInPromotion: false, verbose: false]]
|
|
sshPublisher(publishers: [sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13) (integry)',
|
|
transfers: [sshTransfer(cleanRemote: true, excludes: 'public_html/cache/', execCommand: '', execTimeout: 120000, flatten: false,
|
|
makeEmptyDirs: true, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/dev/pvm',
|
|
remoteDirectorySDF: false, removePrefix: 'public_html/', sourceFiles: 'public_html/')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
sshPublisher(publishers: [
|
|
sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13)',
|
|
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''sudo /bin/mkdir /var/www/dev/pvm/cache
|
|
sudo /bin/chmod -R 777 /var/www/dev/pvm/cache''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
|
|
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false,
|
|
removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
} else if (env.BRANCH_NAME == 'master') {
|
|
archiveArtifacts artifacts: 'exports\\*.zip', onlyIfSuccessful: true
|
|
sshPublisher(publishers: [sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13)',
|
|
transfers: [sshTransfer(cleanRemote: false, excludes: '',
|
|
execCommand: 'sudo /bin/chmod -R 777 /var/www/portale/cache', execTimeout: 120000, flatten: false,
|
|
makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '',
|
|
remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
// ftpPublisher alwaysPublishFromMaster: false, masterNodeName: '',
|
|
// paramPublish: [parameterName: ""], continueOnError: false, failOnError: false,
|
|
// publishers: [[configName: 'Production Linux Web Server (ftp.studioml.it)', transfers: [[asciiMode: false, cleanRemote: true, excludes: 'public_html/cache/', flatten: false, makeEmptyDirs: true, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/portale', remoteDirectorySDF: false, removePrefix: 'public_html/', sourceFiles: 'public_html/']], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false]]
|
|
sshPublisher(publishers: [sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13) (integry)',
|
|
transfers: [sshTransfer(cleanRemote: true, excludes: 'public_html/cache/',
|
|
execCommand: '', execTimeout: 120000, flatten: false,
|
|
makeEmptyDirs: true, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/portale',
|
|
remoteDirectorySDF: false, removePrefix: 'public_html/', sourceFiles: 'public_html/')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
sshPublisher(publishers: [
|
|
sshPublisherDesc(configName: 'Production Linux Web Server (192.168.3.13)',
|
|
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''sudo /bin/mkdir /var/www/portale/cache
|
|
sudo /bin/chmod -R 777 /var/www/portale/cache''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
|
|
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false,
|
|
removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false,
|
|
useWorkspaceInPromotion: false, verbose: false)])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Publish on Azure') {
|
|
steps {
|
|
script {
|
|
if (env.NODE_ENV == 'production') {
|
|
azureUpload fileShareName: 'storage-ci', filesPath: 'exports/*.zip', removePrefixPath: 'exports/', storageCredentialId: '83a86793-c1d6-4776-b20f-1ff652a57fee', storageType: 'filestorage', uploadArtifactsOnlyIfSuccessful: true, verbose: true, virtualPath: "pvm/${env.BRANCH_NAME}"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Docker Build') {
|
|
steps {
|
|
node('server-build') {
|
|
cleanWs()
|
|
unstash 'docker-ws'
|
|
|
|
echo "Building Docker image"
|
|
|
|
script {
|
|
def branchVersion = ""
|
|
|
|
if (env.BRANCH_NAME != "master") {
|
|
branchVersion = "-${env.BRANCH_NAME.toLowerCase().replace('/', '-')}"
|
|
}
|
|
|
|
def target = "final-prod"
|
|
|
|
if (env.NODE_ENV == "development" || env.BRANCH_NAME.startsWith('main/')) {
|
|
target = "final-dev"
|
|
}
|
|
|
|
bat """
|
|
podman build --platform linux/amd64 -t "git.studioml.it/integry/pvm${branchVersion}:latest" --build-arg NODE_ENV=${env.NODE_ENV} --build-arg BUILD_VERSION=${env.BUILD_TAG.replace(' ', '-')} --target ${target} .
|
|
"""
|
|
|
|
bat """
|
|
podman push git.studioml.it/integry/pvm${branchVersion}:latest"
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|