Jenkinsfile 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!groovy
  2. def image
  3. def buildImage = { ->
  4. wrappedNode(label: "ubuntu && !zfs", cleanWorkspace: true) {
  5. stage("build image") {
  6. checkout(scm)
  7. def imageName = "dockerbuildbot/compose:${gitCommit()}"
  8. image = docker.image(imageName)
  9. try {
  10. image.pull()
  11. } catch (Exception exc) {
  12. image = docker.build(imageName, ".")
  13. image.push()
  14. }
  15. }
  16. }
  17. }
  18. def get_versions = { int number ->
  19. def docker_versions
  20. wrappedNode(label: "ubuntu && !zfs") {
  21. def result = sh(script: """docker run --rm \\
  22. --entrypoint=/code/.tox/py27/bin/python \\
  23. ${image.id} \\
  24. /code/script/test/versions.py -n ${number} docker/docker-ce recent
  25. """, returnStdout: true
  26. )
  27. docker_versions = result.split()
  28. }
  29. return docker_versions
  30. }
  31. def runTests = { Map settings ->
  32. def dockerVersions = settings.get("dockerVersions", null)
  33. def pythonVersions = settings.get("pythonVersions", null)
  34. if (!pythonVersions) {
  35. throw new Exception("Need Python versions to test. e.g.: `runTests(pythonVersions: 'py27,py36')`")
  36. }
  37. if (!dockerVersions) {
  38. throw new Exception("Need Docker versions to test. e.g.: `runTests(dockerVersions: 'all')`")
  39. }
  40. { ->
  41. wrappedNode(label: "ubuntu && !zfs", cleanWorkspace: true) {
  42. stage("test python=${pythonVersions} / docker=${dockerVersions}") {
  43. checkout(scm)
  44. def storageDriver = sh(script: 'docker info | awk -F \': \' \'$1 == "Storage Driver" { print $2; exit }\'', returnStdout: true).trim()
  45. echo "Using local system's storage driver: ${storageDriver}"
  46. sh """docker run \\
  47. -t \\
  48. --rm \\
  49. --privileged \\
  50. --volume="\$(pwd)/.git:/code/.git" \\
  51. --volume="/var/run/docker.sock:/var/run/docker.sock" \\
  52. -e "TAG=${image.id}" \\
  53. -e "STORAGE_DRIVER=${storageDriver}" \\
  54. -e "DOCKER_VERSIONS=${dockerVersions}" \\
  55. -e "BUILD_NUMBER=\$BUILD_TAG" \\
  56. -e "PY_TEST_VERSIONS=${pythonVersions}" \\
  57. --entrypoint="script/test/ci" \\
  58. ${image.id} \\
  59. --verbose
  60. """
  61. }
  62. }
  63. }
  64. }
  65. buildImage()
  66. def testMatrix = [failFast: true]
  67. def docker_versions = get_versions(2)
  68. for (int i = 0; i < docker_versions.length; i++) {
  69. def dockerVersion = docker_versions[i]
  70. testMatrix["${dockerVersion}_py27"] = runTests([dockerVersions: dockerVersion, pythonVersions: "py27"])
  71. testMatrix["${dockerVersion}_py36"] = runTests([dockerVersions: dockerVersion, pythonVersions: "py36"])
  72. testMatrix["${dockerVersion}_py37"] = runTests([dockerVersions: dockerVersion, pythonVersions: "py37"])
  73. }
  74. parallel(testMatrix)