stages.docker.groovy 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. sharedLibsPath = "${env.WORKSPACE}/sharedLibs"
  2. // 获取镜像URL
  3. generateFullImageUri = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  4. return "${DOCKER.registry}/${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  5. }
  6. // 获取镜像名
  7. generateImageName = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  8. return "${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  9. }
  10. // 生成Dockerfile
  11. def generateDockerfile(Object SERVICE, String pathOfDockerfile='projdir') {
  12. def module = SERVICE.module == null ? '' : (SERVICE.module[-1] == '/' ? SERVICE.module : SERVICE.module + '/')
  13. echo "-----> Generating Dockerfile: ${pathOfDockerfile}/Dockerfile ..."
  14. sh """cat > ${pathOfDockerfile}/Dockerfile<<EOF
  15. FROM openjdk:8-alpine as final
  16. ADD ${module}target/${SERVICE.jar} /app/target/${SERVICE.jar}
  17. EOF
  18. """
  19. return pathOfDockerfile
  20. }
  21. // Maven工程生成.jar
  22. def buildJar(String path='projdir') {
  23. echo "-----> Building java package ..."
  24. dir(path){
  25. sh '$MAVEN_HOME/bin/mvn clean package -Dmaven.test.skip=true'
  26. }
  27. return path
  28. }
  29. def cleanJar(String path='projdir') {
  30. echo "-----> Clean java package ..."
  31. dir(path){
  32. sh '$MAVEN_HOME/bin/mvn clean'
  33. }
  34. return path
  35. }
  36. // 构建Docker镜像
  37. def buildDockerImage(Object SERVICE, Object DOCKER, String base_branch, projDir='projdir', String filter2Remove=null) {
  38. def imageUri = generateFullImageUri(DOCKER, base_branch, BUILD_NUMBER)
  39. echo "-----> Building docker image: ${imageUri} ..."
  40. dir(projDir) {
  41. docker.withRegistry("http://${DOCKER.registry}", "${DOCKER.push_credentialId}") {
  42. def imageName = generateImageName(DOCKER, base_branch, BUILD_NUMBER)
  43. def image = docker.build(imageName)
  44. image.push()
  45. sh "docker rmi ${imageName}"
  46. sh "docker rmi ${imageUri}"
  47. if(filter2Remove != null)
  48. sh "docker image prune --filter label=${filter2Remove} -f"
  49. }
  50. }
  51. return imageUri
  52. }
  53. def dockerRun(Object CONFIG, String docker_image_uri) {
  54. def DOCKER_OPTS = "-H tcp://10.172.9.200:2375"
  55. sh "if [ \$(docker ${DOCKER_OPTS} ps -aq --filter name=${CONFIG.service.name}) ]; then docker ${DOCKER_OPTS} rm -f -v ${CONFIG.service.name};fi"
  56. sh "docker ${DOCKER_OPTS} login -u ryo.hune@gmail.com -p QAZwsx117 registry.cn-shanghai.aliyuncs.com"
  57. def EXEC = "docker ${DOCKER_OPTS} run -d --restart=always -p 80:80 -e TZ=Asia/Shanghai --name ${CONFIG.service.name} ${docker_image_uri} " +
  58. "java -Djava.awt.headless=true -Dserver.port=80 -jar /app/target/${CONFIG.service.jar}"
  59. echo "$EXEC"
  60. sh "$EXEC"
  61. }
  62. // Jenkins pipeline stages
  63. // closures = [
  64. // GITCLONE: { -> },
  65. // GENERATEDOCKERFILE: { -> },
  66. // BUILDIMAGE: { -> },
  67. // DOCKERRUN: { -> }
  68. //]
  69. def execute(CONFIG, base_branch, closures=[:]) {
  70. stage('source code check out') {
  71. println "loading ${sharedLibsPath}/gitUtil.groovy..."
  72. def gitUtils = load "${sharedLibsPath}/gitUtil.groovy"
  73. println closures.GITCLONE == null
  74. COMMIT_SHA = closures.GITCLONE == null ? gitUtils.clone(CONFIG.git, base_branch) : closures.GITCLONE()
  75. }
  76. stage("docker image build") {
  77. def projDir = 'projdir'
  78. if (closures.BUILDJAR != null)
  79. projDir = closures.BUILDJAR()
  80. else
  81. projDir = buildJar(projDir)
  82. if (closures.GENERATEDOCKERFILE != null)
  83. projDir = closures.GENERATEDOCKERFILE()
  84. else
  85. projDir = generateDockerfile(CONFIG.service)
  86. if (closures.BUILDIMAGE != null)
  87. imageUri = closures.BUILDIMAGE()
  88. else
  89. imageUri = buildDockerImage(CONFIG.service, CONFIG.docker, base_branch, projDir)
  90. if (closures.CLEANJAR != null)
  91. closures.CLEANJAR()
  92. else
  93. cleanJar(projDir)
  94. }
  95. stage("run docker container") {
  96. if(closures.DOCKERRUN != null){
  97. closures.DOCKERRUN()
  98. return
  99. }
  100. dockerRun(CONFIG, imageUri)
  101. }
  102. }
  103. return this