Déploiement d'un livrable depuis Nexus
Sauter à la navigation
Sauter à la recherche
Présentation
Cette page a pour but de partager un script rédigé pour déployer un livrable au format zip depuis un serveur Nexus vers un serveur web.
Script
def instances = [
PREPROD: [
MyCompany1: [
SERVER: 'mydevserver1',
DIRECTORY: '/data/www/PREPROD/MyApp1',
],
MyCompany2: [
SERVER: 'mydevserver2',
DIRECTORY: '/data/www/PREPROD/MyApp2',
],
MyCompany3: [
SERVER: 'mydevserver1',
DIRECTORY: '/data/www/PREPROD/MyApp3',
],
MyCompany4: [
SERVER: 'mydevserver2',
DIRECTORY: '/data/www/PREPROD/MyApp4',
],
],
PROD: [
MyCompany1: [
SERVER: 'myprodserver1',
DIRECTORY: '/data/www/PROD/MyApp1',
],
MyCompany2: [
SERVER: 'myprodserver2',
DIRECTORY: '/data/www/PROD/MyApp2',
],
MyCompany3: [
SERVER: 'myprodserver1',
DIRECTORY: '/data/www/PROD/MyApp3',
],
MyCompany4: [
SERVER: 'myprodserver2',
DIRECTORY: '/data/www/PROD/MyApp4',
],
],
]
def versions_count_to_keep = 2
def sshUser = "www"
def filenameTab = "${NexusReleaseUrl}".split('/')
def packageFilename = filenameTab[ filenameTab.size() - 1 ]
def packageExtension = packageFilename[packageFilename.lastIndexOf('.')..-1]
def packageName = packageFilename.take(packageFilename.lastIndexOf('.'))
def appNameTab = packageFilename.split('-')
def version = appNameTab[ appNameTab.size() - 1 ].replace(packageExtension,"")
currentBuild.displayName = "${BUILD_NUMBER} Déploiement GCA ${version} ${Phase}, société(s) ${Company}"
node {
try {
stage('Définition des variables') {
echo "Liste des sociétés sélectionnées :"
Company.split(',').each { company ->
println "${company}"
}
echo "Liste des instances concernées :"
Company.split(',').each { company ->
def server = instances."${Phase}"."${company}".SERVER
def appDirectory = instances."${Phase}"."${company}".DIRECTORY
echo "Serveur '${server}', dossier '${appDirectory}'"
}
}
stage('Récupération du package') {
withCredentials([
usernamePassword(
credentialsId: 'nexus_admin',
usernameVariable: 'nexusUser',
passwordVariable: 'nexusPass'
)
]) {
echo "URL du package à récupérer : ${NexusReleaseUrl}"
sh ('wget --user=$nexusUser --password=$nexusPass -q $NexusReleaseUrl')
}
}
Company.split(',').each { company ->
stage("Société ${company}") {
println "${company}"
def server = instances."${Phase}"."${company}".SERVER
def appDirectory = instances."${Phase}"."${company}".DIRECTORY
withCredentials([
sshUserPrivateKey(
credentialsId: "${sshUser}-${server}",
keyFileVariable: 'sshKey',
passphraseVariable: 'sshPassphrase'
)
]) {
def sshServer = [:]
sshServer.name = "Serveur de ${Phase} pour ${company}"
sshServer.host = "${server}"
sshServer.user = "${sshUser}"
sshServer.identityFile = sshKey
sshServer.passphrase = sshPassphrase
sshServer.allowAnyHosts = true
sshPut remote: sshServer, from: "${packageFilename}", into: "/tmp/"
if ( "${appDirectory}" != "${appDirectory}/${packageName}" && "${appDirectory}/" != "${appDirectory}/${packageName}") {
sshCommand remote: sshServer, command: "rm -rf ${appDirectory}/${packageName}"
}
def directories = sshCommand remote: sshServer, command: "ls -1d ${appDirectory}/*|grep -vE 'PARAM|LOG|DATA|MAINTENANCE|BATCH|zip|APPLI|CURRENT'|sort -V"
def directoriesCount = directories.split('\n').length
println "Nombre total de répertoires versionnés : ${directoriesCount}"
def versions_count_to_del = directoriesCount - versions_count_to_keep
println "Nombre de répertoires à supprimer : ${versions_count_to_del}"
sshCommand remote: sshServer, command: "for i in \$(ls -1d ${appDirectory}/*|grep -vE 'PARAM|LOG|DATA|MAINTENANCE|BATCH|zip|CURRENT'|sort -V|head -${versions_count_to_del});do echo 'Suppression du dossier : '\$i;rm -rf \$i;done"
sshCommand remote: sshServer, command: "unzip -q /tmp/${packageFilename} -d ${appDirectory}/${packageName}"
sshCommand remote: sshServer, command: "rm /tmp/${packageFilename}"
sshCommand remote: sshServer, command: "chown -R www:www ${appDirectory}/${packageName}"
sshCommand remote: sshServer, command: "unlink ${appDirectory}/CURRENT && ln -s ${packageName} ${appDirectory}/CURRENT"
}
}
}
} catch (err) {
currentBuild.result = "FAILURE"
throw err
} finally {
script {
deleteDir()
}
}
}