Utilitaires pour la création de pipeline Jenkins dans l’environnement Cadoles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

debian-packaging.jenkinsfile 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. @Library("cadoles") _
  2. pipeline {
  3. agent {
  4. label 'common'
  5. }
  6. environment {
  7. projectDir = "${env.project_name}_${env.BUILD_ID}"
  8. }
  9. stages {
  10. stage("Clone repository") {
  11. steps {
  12. sh 'git config http.postBuffer 524288000'
  13. checkout scm:
  14. [
  15. $class: 'GitSCM',
  16. userRemoteConfigs: [[url: env.repository_url, credentialsId: 'forge-jenkins']],
  17. branches: [[name: env.ref]],
  18. extensions: [
  19. [$class: 'RelativeTargetDirectory', relativeTargetDir: env.projectDir ],
  20. [$class: 'CloneOption', noTags: false, shallow: false, depth: 0, reference: ''],
  21. [$class: 'WipeWorkspace' ]
  22. ]
  23. ],
  24. changelog: false,
  25. poll: false
  26. }
  27. }
  28. stage("Ensure packaging branch") {
  29. steps {
  30. script {
  31. dir(env.projectDir) {
  32. sh 'git checkout "${packageBranch}"'
  33. def commitOrRef = env.commit ? env.commit : env.ref
  34. def branchesWithCommitOrRef = sh(script: "git branch --contains '${commitOrRef}'", returnStdout: true).split(' ')
  35. if (branchesWithCommitOrRef.findAll{env.packageBranch.contains(it)}.any{true}) {
  36. currentBuild.result = 'ABORTED'
  37. error("La référence `${env.ref}` ne fait pas partie de la branche `${env.packageBranch}` !")
  38. }
  39. }
  40. }
  41. }
  42. }
  43. stage("Checkout ref") {
  44. steps {
  45. dir(env.projectDir) {
  46. sh """
  47. git checkout ${env.ref}
  48. """
  49. }
  50. }
  51. }
  52. stage("Build package") {
  53. steps {
  54. script {
  55. dir(env.projectDir) {
  56. // On construit les paquets à partir des informations
  57. // de contexte provenant de CPKG et du webhook
  58. def result = tamarin.buildPackageWithCPKG(
  59. env.packageProfile ? env.packageProfile : "debian",
  60. env.packageArch ? env.packageArch : "",
  61. env.packageBranch ? env.packageBranch : "",
  62. env.baseImage ? env.baseImage : ""
  63. )
  64. // On publie chacun des paquets construits
  65. result.each { r ->
  66. vulcain.publish(
  67. r.packages,
  68. r.env,
  69. env.packageBranch
  70. )
  71. }
  72. // On liste l'ensemble des paquets construits
  73. def publishedPackages = result.collect { r ->
  74. return r.packages.collect { p ->
  75. def file = new File(p)
  76. return "- Paquet `${file.getName()}`, Dépôt `${r.env}`, Distribution `${r.distrib}`"
  77. }
  78. }.transpose().collectMany { it }
  79. // On notifie le canal Rocket.Chat de la publication des paquets
  80. rocketSend (
  81. avatar: 'https://jenkins.cadol.es/static/b5f67753/images/headshot.png',
  82. message: """
  83. Les paquets suivants ont été publiés pour le projet ${env.project_name}:
  84. ${publishedPackages.join('\n')}
  85. [Visualiser le job](${env.RUN_DISPLAY_URL})
  86. @${env.sender_login}
  87. """.stripIndent(),
  88. rawMessage: true
  89. )
  90. if (env.testPackageInstall == 'no') {
  91. println "Test d'intallation des paquets désactivé."
  92. return
  93. }
  94. // Pour chaque construction de paquets...
  95. result.each { r ->
  96. // On essaye de trouver un template de VM compatible
  97. // avec la distribution cible de la construction
  98. def vmTemplate = findMatchingVMTemplate(r.distrib)
  99. if (vmTemplate == null) {
  100. println "Aucun template de VM n'a été trouvé correspondant à la distribution `${r.distrib}`."
  101. return
  102. }
  103. // Pour chaque paquets construits...
  104. r.packages.each { p ->
  105. def packageFullName = new File(p).getName()
  106. def packageRepository = r.distrib.split('-')[1] + '-' + r.env
  107. def packageNameParts = packageFullName.split('_')
  108. def packageName = packageNameParts[0]
  109. def packageVersion = packageNameParts[1]
  110. stage("Test package '${packageName}' installation") {
  111. build job: 'Test de paquet Debian', wait: false, parameters: [
  112. [$class: 'StringParameterValue', name: 'packageName', value: packageName],
  113. [$class: 'StringParameterValue', name: 'packageVersion', value: packageVersion],
  114. [$class: 'StringParameterValue', name: 'packageRepository', value: packageRepository],
  115. [$class: 'StringParameterValue', name: 'vmTemplate', value: vmTemplate]
  116. ]
  117. }
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. post {
  126. always {
  127. sh "rm -rf '${env.projectDir}'"
  128. }
  129. }
  130. }
  131. // Cette fonction fait un simple "mapping"
  132. // entre les distributions cibles des paquets et
  133. // les templates de VM disponibles sur l'OpenNebula
  134. def findMatchingVMTemplate(String distrib) {
  135. def vmTemplatesMap = [
  136. 'eole-2.7.0': 'eolebase-2.7.0-cadoles',
  137. 'eole-2.6.2': 'eolebase-2.6.2-cadoles'
  138. ]
  139. return vmTemplatesMap.get(distrib, null)
  140. }