Jenkinsfile 3.9 KB

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