stages.docker.nodejs.groovy 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. sharedLibsPath = "${env.WORKSPACE}/sharedLibs"
  2. backup_destination = '/var/jenkins_home/backups'
  3. backup_targetFile = 'dockerImage.tar'
  4. // 获取镜像URL
  5. generateFullImageUri = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  6. return "${DOCKER.registry}/${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  7. }
  8. // 获取镜像名
  9. generateImageName = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
  10. return "${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
  11. }
  12. def generateImageName(String imageName, String base_branch, String BUILD_NUMBER) {
  13. return "${imageName}:${base_branch}-${BUILD_NUMBER}"
  14. }
  15. def generateDockerfile(Object SERVICE, String pathOfDockerfile='projdir') {
  16. def module = SERVICE.module == null ? '' : (SERVICE.module[-1] == '/' ? SERVICE.module : SERVICE.module + '/')
  17. echo "-----> Generating Dockerfile: ${pathOfDockerfile}/Dockerfile ..."
  18. sh """cat > ${pathOfDockerfile}/Dockerfile<<EOF
  19. FROM node:14-slim as BUILD
  20. LABEL stage=STATICRES-BUILD
  21. COPY ./admin /admin
  22. WORKDIR /admin
  23. RUN npm config set registry https://registry.npm.taobao.org && npm install && npm run build
  24. FROM nginx:1.23-alpine as FINAL
  25. # configs for default
  26. COPY ./default.conf /etc/nginx/conf.d
  27. COPY ./html /usr/share/nginx/html
  28. # configs for partner.hobbystocks.cn
  29. COPY ./partner.hobbystocks.cn.conf /etc/nginx/conf.d
  30. COPY --from=BUILD /admin/dist /usr/share/nginx/partner/admin
  31. EOF
  32. """
  33. return pathOfDockerfile
  34. }
  35. def buildDockerImage(Object SERVICE, Object DOCKER, String base_branch, projDir='projdir', String filter2Remove=null) {
  36. def imageUri = generateFullImageUri(DOCKER, base_branch, BUILD_NUMBER)
  37. echo "-----> Building docker image: ${imageUri} ..."
  38. dir(projDir) {
  39. docker.withRegistry("http://${DOCKER.registry}", "${DOCKER.push_credentialId}") {
  40. def imageName = generateImageName(DOCKER, base_branch, BUILD_NUMBER)
  41. def image = docker.build(imageName)
  42. image.push()
  43. sh "docker rmi ${imageName}"
  44. if(filter2Remove != null)
  45. sh "docker image prune --filter label=${filter2Remove} -f"
  46. }
  47. }
  48. return imageUri
  49. }
  50. def cleanDockerImage(String dockerImgName) {
  51. sh "docker rmi ${dockerImgName}"
  52. }
  53. // Jenkins pipeline stages
  54. def execute(CONFIG, base_branch, closures=[:]) {
  55. stage('source code check out') {
  56. println "loading ${sharedLibsPath}/gitUtil.groovy..."
  57. def gitUtils = load "${sharedLibsPath}/gitUtil.groovy"
  58. COMMIT_SHA = closures.GITCLONE == null ? gitUtils.clone(CONFIG.git, base_branch) : closures.GITCLONE()
  59. }
  60. stage("docker image build") {
  61. def projDir = 'projdir'
  62. if (closures.GENERATEDOCKERFILE != null)
  63. projDir = closures.GENERATEDOCKERFILE()
  64. else
  65. projDir = generateDockerfile(CONFIG.service) //default
  66. if (closures.BUILDIMAGE != null)
  67. imageUri = closures.BUILDIMAGE()
  68. else
  69. imageUri = buildDockerImage(CONFIG.service, CONFIG.docker, base_branch, projDir, 'stage=STATICRES-BUILD')
  70. }
  71. stage("run docker container") {
  72. if(closures.DOCKERRUN != null){
  73. closures.DOCKERRUN()
  74. return
  75. }
  76. }
  77. }
  78. return this