.gitlab-ci.yml 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # java 项目的CI/CD过程分为4个阶段,测试->编译源码->编译镜像->部署镜像
  2. stages:
  3. - test
  4. - build_src
  5. - build_image
  6. - deploy
  7. # 编译全局变量定义
  8. variables:
  9. # Docker私有仓库地址
  10. REGISTRY_URL: "registry.c2cloud.cn"
  11. # Docker私有仓库地址
  12. TENANT: "unicom"
  13. # 镜像名称(一般直接使用项目名称)
  14. # FIXME: 起好名字
  15. PROJECT_NAME: "smc-secretkey"
  16. REGISTRY_USERNAME: "dzqdsybzh"
  17. REGISTRY_PASSWORD: "DIVynd903"
  18. # 所有分支都要做单元测试
  19. unit_test:
  20. stage: test
  21. # 使用带有maven标签的runner来执行编译
  22. tags:
  23. - maven
  24. script:
  25. - export LANGUAGE="en_US.utf8"
  26. - export LANG="en_US.utf8"
  27. build_war:
  28. stage: build_src
  29. tags:
  30. - maven
  31. script:
  32. - export LANGUAGE="en_US.utf8"
  33. - export LANG="en_US.utf8"
  34. - mvn clean package -U -Dmaven.test.skip=true
  35. artifacts:
  36. paths:
  37. # 将编译产物上传到gitlab,给后续其他stage使用,war包的名称不做限制,各个项目在自己的Dockerfile中做好合适的组装脚本即可
  38. # FIXME:根据项目目录结构配置
  39. - target/*.jar
  40. # 编译产生的war包只在gitlab保存一天,这里可以改得更短,比如 1 hour
  41. expire_in: 1 day
  42. # 只有release分支和打的tag要编译war包
  43. only:
  44. - /^release/.*$/
  45. - tags
  46. # 编译release分支的镜像,release分支是用于发布的分支,系统集成测试在这个分支做
  47. # TODO 编译分支的镜像需要手动清理
  48. build_release_docker_images:
  49. stage: build_image
  50. tags:
  51. - docker
  52. services:
  53. - docker:dind
  54. dependencies:
  55. - build_war
  56. before_script:
  57. - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD $REGISTRY_URL
  58. script:
  59. # 使用编译id作为镜像tag,而不是分支名称,避免重复导致仓库中有很多无id的镜像
  60. # FIXME:根据项目目录结构配置
  61. - docker build -t $REGISTRY_URL/$TENANT/$PROJECT_NAME:release.$CI_BUILD_ID .
  62. - docker push $REGISTRY_URL/$TENANT/$PROJECT_NAME:release.$CI_BUILD_ID
  63. only:
  64. - /^release/.*$/
  65. # 编译正式版本镜像,只有在打tag时触发,会自动生成docker镜像并push到私服,镜像的tag即git的tag名称
  66. build_tag_docker_images:
  67. stage: build_image
  68. tags:
  69. - docker
  70. services:
  71. - docker:dind
  72. dependencies:
  73. - build_war
  74. before_script:
  75. - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD $REGISTRY_URL
  76. script:
  77. # tag名称中不能包含/
  78. # FIXME:根据项目目录结构配置
  79. - docker build -t $REGISTRY_URL/$TENANT/$PROJECT_NAME:$CI_BUILD_TAG .
  80. - docker push $REGISTRY_URL/$TENANT/$PROJECT_NAME:$CI_BUILD_TAG
  81. only:
  82. - tags