Ajout d'utilitaires pour le packaging Debian via Jenkins

Permet de reproduire le comportement de l'actuel serveur d'empaquetage
Marang.
This commit is contained in:
2019-01-24 17:39:18 +01:00
commit 573715c9d7
4 changed files with 164 additions and 0 deletions

90
vars/tamarin.groovy Normal file
View File

@ -0,0 +1,90 @@
def buildPackageWithCPKG(
String packageProfile = "debian",
String packageArch = "",
String baseImage = "",
String destDir = "./packages",
Boolean forceRebuild = false,
Boolean publishPackages = true
) {
// Fetch tags from remote
sh 'git fetch --tags --force'
// Retrieve commit tags
def commitTags = sh(script: 'git describe --exact-match --abbrev=0', returnStdout: true).split(' ')
if (commitTags.length == 0) {
error 'No build build tags on last commit'
}
// For each tags
for (tag in commitTags) {
// Split tag to retrieve context informations
def tagParts = tag.split('/')
def packageEnv = tagParts[1]
def packageDistrib = tagParts[2]
def packageVersion = tagParts[3]
// Create .tamarinrc file
def tamarinrc = """
project_version=${packageVersion}
no_version_suffix=${ packageEnv == 'stable' || packageEnv == 'staging' ? 'yes' : 'no' }
""".stripIndent()
writeFile file: '.tamarinrc', text: tamarinrc
stage("Build ${packageEnv} package (version ${packageVersion}) for ${packageDistrib}") {
sh "rm -rf ${destDir}/*"
buildPackage(packageProfile, packageArch, baseImage, destDir, forceRebuild)
if (publishPackages) {
vulcain.publish(destDir, packageEnv, env.BRANCH_NAME)
}
}
}
}
def buildPackage(
String packageProfile = "debian",
String packageArch = "",
String baseImage = "",
String destDir = "./packages",
Boolean forceRebuild = false
) {
def tamarinImage
stage("Create Tamarin environment") {
tamarinImage = buildDockerImage()
}
stage("Run Tamarin") {
def dockerArgs = """
-v /var/run/docker.sock:/var/run/docker.sock
${forceRebuild ? '-e TAMARIN_FORCE_REBUILD=1' : ''}
${packageArch ? '-e TAMARIN_PACKAGE_ARCH='+packageArch : ''}
${baseImage ? '-e TAMARIN_BASE_IMAGE='+baseImage : ''}
${packageProfile ? '-e TAMARIN_PROFILE='+packageProfile : ''}
-e TAMARIN_DEST_DIR=${destDir}
""".stripIndent()
tamarinImage.inside(dockerArgs) {
sh 'run-tamarin'
}
}
}
def buildDockerImage() {
dir ('.tamarin') {
def dockerfile = libraryResource 'com/cadoles/tamarin/Dockerfile'
writeFile file:'Dockerfile', text:dockerfile
def runTamarinScript = libraryResource 'com/cadoles/tamarin/run-tamarin.sh'
writeFile file:'run-tamarin.sh', text:runTamarinScript
def safeJobName = URLDecoder.decode(env.JOB_NAME).toLowerCase().replace('/', '-')
def imageTag = "${safeJobName}-${env.BUILD_ID}"
return docker.build("tamarin:${imageTag}", ".")
}
}

20
vars/vulcain.groovy Normal file
View File

@ -0,0 +1,20 @@
def publish(
String packagesDir = './packages',
String packagesEnv = 'dev',
String packagesBranch = '',
String sshCredentialsId = 'vulcain-packages-ssh-keypair',
String vulcainHost = 'vulcain.cadoles.com'
) {
if (!packagesBranch) {
packagesBranch = env.BRANCH_NAME
}
withCredentials([
sshUserPrivateKey(credentialsId: sshCredentialsId, keyFileVariable: 'VULCAIN_SSH_KEY', usernameVariable: 'VULCAIN_SSH_USER')
]) {
sh """
SSH_ARGS='-i ${VULCAIN_SSH_KEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
ssh \$SSH_ARGS ${VULCAIN_SSH_USER}@${vulcainHost} mkdir -p '/home/${VULCAIN_SSH_USER}/packages/${packagesEnv}/${packagesBranch}'
scp \$SSH_ARGS -r ${packagesDir}/*.deb '${VULCAIN_SSH_USER}@${vulcainHost}:/home/${VULCAIN_SSH_USER}/packages/${packagesEnv}/${packagesBranch}/'
"""
}
}