3
0

imageBuilder.groovy 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // 获取镜像URL
  2. generateFullImageUri = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  3. return "${DOCKER.registry}/${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  4. }
  5. // 获取镜像名
  6. generateImageName = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  7. return "${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  8. }
  9. def generateDockerfile(String JAR, String module, String pathOfDockerfile='projdir') {
  10. module = module == null ? '' : (module[-1] == '/' ? module : module + '/')
  11. sh """cat > ${pathOfDockerfile}/Dockerfile<<EOF
  12. FROM openjdk:8-alpine as final
  13. ADD ${module}target/${JAR} /app/target/${JAR}
  14. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx1024m","-Dserver.port=80","-jar","/app/target/${JAR}", "--spring.config.location=file:/app/configs/application.yml"]
  15. EOF
  16. """
  17. return pathOfDockerfile
  18. }
  19. // 项目自带Dockerfile的时候,只需返回项目路径
  20. generateNodeJsDockerFile = { ... args ->
  21. return 'projdir'
  22. }
  23. // Maven工程生成.jar
  24. def buildJar(String path='projdir') {
  25. echo "-----> Building java package ..."
  26. dir(path){
  27. sh '$MAVEN_HOME/bin/mvn clean package -Dmaven.test.skip=true'
  28. }
  29. return path
  30. }
  31. def cleanJar(String path='projdir') {
  32. echo "-----> Clean java package ..."
  33. dir(path){
  34. sh '$MAVEN_HOME/bin/mvn clean'
  35. }
  36. return path
  37. }
  38. // 构建Docker镜像
  39. def buildDockerImage(Object SERVICE, Object DOCKER, String base_branch, Closure dockerfile=null, String filter2Remove=null) {
  40. def imageUri = generateFullImageUri(DOCKER, base_branch, BUILD_NUMBER)
  41. echo "-----> Building docker image: ${imageUri} ..."
  42. def projDir = 'projdir'
  43. if (dockerfile != null)
  44. projDir = dockerfile(SERVICE.jar, SERVICE.module)
  45. else
  46. projDir = generateDockerfile(SERVICE.jar, SERVICE.module)
  47. dir(projDir) {
  48. docker.withRegistry("http://${DOCKER.registry}", "${DOCKER.push_credentialId}") {
  49. def imageName = generateImageName(DOCKER, base_branch, BUILD_NUMBER)
  50. def image = docker.build(imageName)
  51. image.push()
  52. sh "docker rmi ${imageName}"
  53. sh "docker rmi ${imageUri}"
  54. if(filter2Remove != null)
  55. sh "docker image prune --filter label=${filter2Remove} -f"
  56. }
  57. }
  58. return imageUri
  59. }
  60. return this