Jenkinsfile 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!groovy
  2. def dockerVersions = ['19.03.8']
  3. def baseImages = ['alpine', 'debian']
  4. def pythonVersions = ['py37']
  5. pipeline {
  6. agent none
  7. options {
  8. skipDefaultCheckout(true)
  9. buildDiscarder(logRotator(daysToKeepStr: '30'))
  10. timeout(time: 2, unit: 'HOURS')
  11. timestamps()
  12. }
  13. stages {
  14. stage('Build test images') {
  15. // TODO use declarative 1.5.0 `matrix` once available on CI
  16. parallel {
  17. stage('alpine') {
  18. agent {
  19. label 'ubuntu && amd64 && !zfs'
  20. }
  21. steps {
  22. buildImage('alpine')
  23. }
  24. }
  25. stage('debian') {
  26. agent {
  27. label 'ubuntu && amd64 && !zfs'
  28. }
  29. steps {
  30. buildImage('debian')
  31. }
  32. }
  33. }
  34. }
  35. stage('Test') {
  36. steps {
  37. // TODO use declarative 1.5.0 `matrix` once available on CI
  38. script {
  39. def testMatrix = [:]
  40. baseImages.each { baseImage ->
  41. dockerVersions.each { dockerVersion ->
  42. pythonVersions.each { pythonVersion ->
  43. testMatrix["${baseImage}_${dockerVersion}_${pythonVersion}"] = runTests(dockerVersion, pythonVersion, baseImage)
  44. }
  45. }
  46. }
  47. parallel testMatrix
  48. }
  49. }
  50. }
  51. }
  52. }
  53. def buildImage(baseImage) {
  54. def scmvar = checkout(scm)
  55. def imageName = "dockerbuildbot/compose:${baseImage}-${scmvar.GIT_COMMIT}"
  56. image = docker.image(imageName)
  57. withDockerRegistry(credentialsId:'dockerbuildbot-index.docker.io') {
  58. try {
  59. image.pull()
  60. } catch (Exception exc) {
  61. ansiColor('xterm') {
  62. sh """docker build -t ${imageName} \\
  63. --target build \\
  64. --build-arg BUILD_PLATFORM="${baseImage}" \\
  65. --build-arg GIT_COMMIT="${scmvar.GIT_COMMIT}" \\
  66. .\\
  67. """
  68. sh "docker push ${imageName}"
  69. }
  70. echo "${imageName}"
  71. return imageName
  72. }
  73. }
  74. }
  75. def runTests(dockerVersion, pythonVersion, baseImage) {
  76. return {
  77. stage("python=${pythonVersion} docker=${dockerVersion} ${baseImage}") {
  78. node("ubuntu && amd64 && !zfs") {
  79. def scmvar = checkout(scm)
  80. def imageName = "dockerbuildbot/compose:${baseImage}-${scmvar.GIT_COMMIT}"
  81. def storageDriver = sh(script: "docker info -f \'{{.Driver}}\'", returnStdout: true).trim()
  82. echo "Using local system's storage driver: ${storageDriver}"
  83. withDockerRegistry(credentialsId:'dockerbuildbot-index.docker.io') {
  84. sh """docker run \\
  85. -t \\
  86. --rm \\
  87. --privileged \\
  88. --volume="\$(pwd)/.git:/code/.git" \\
  89. --volume="/var/run/docker.sock:/var/run/docker.sock" \\
  90. -e "TAG=${imageName}" \\
  91. -e "STORAGE_DRIVER=${storageDriver}" \\
  92. -e "DOCKER_VERSIONS=${dockerVersion}" \\
  93. -e "BUILD_NUMBER=${env.BUILD_NUMBER}" \\
  94. -e "PY_TEST_VERSIONS=${pythonVersion}" \\
  95. --entrypoint="script/test/ci" \\
  96. ${imageName} \\
  97. --verbose
  98. """
  99. }
  100. }
  101. }
  102. }
  103. }