.drone.yml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. ###################################################################################################################################################
  2. # #
  3. # #
  4. # #
  5. # #
  6. ###################################################################################################################################################
  7. # 生产环境配置
  8. # 1.打包构建release-omega-project-server
  9. kind: pipeline
  10. type: docker
  11. name: release-omega-project-server
  12. volumes: # 声明数据卷
  13. - name: build-artifacts
  14. host:
  15. path: /home/ABServer/drone/webroot/release-omega-project-server
  16. - name: dockerfile-source
  17. host:
  18. path: /home/ABServer/drone/config/omega-dockerfile
  19. - name: docker-socket
  20. host:
  21. path: /var/run/docker.sock
  22. - name: timezone
  23. host:
  24. path: /etc/localtime
  25. - name: delpoyment
  26. host:
  27. path: /home/ABServer/drone/config/shell
  28. # 启用代码拉取
  29. clone:
  30. disable: false
  31. steps:
  32. # 阶段1: .NET SDK 构建项目
  33. - name: build-project
  34. image: mcr.microsoft.com/dotnet/sdk:7.0
  35. pull: if-not-exists
  36. volumes: # 挂载数据卷
  37. # 共享卷:最终产物存放路径
  38. - name: build-artifacts
  39. path: /context
  40. # 挂载 dockerfile 目录
  41. - name: dockerfile-source
  42. path: /dockerfiles
  43. working_dir: /drone/src
  44. commands: # 执行命令
  45. # 1. 清空共享卷旧文件
  46. - rm -rf /context/*
  47. # 2. 配置 NuGet 国内源
  48. - mkdir -p ~/.nuget/NuGet
  49. - echo '<?xml version="1.0" encoding="utf-8"?><configuration><packageSources><add key="huaweicloud" value="https://repo.huaweicloud.com/repository/nuget/v3/index.json" /></packageSources></configuration>' > ~/.nuget/NuGet/NuGet.Config
  50. # 3. 编译项目
  51. - dotnet publish -c Release -o ./publish-output
  52. # 4. 复制构建产物到共享目录
  53. - cp -rv ./publish-output/* /context/
  54. - cp -rf /dockerfiles/template-example.dockerfile /context/Dockerfile
  55. - cp -rf /dockerfiles/fonts /context/fonts/
  56. - sed -i 's/{ImageName}/OmegaProject/g' /context/Dockerfile
  57. # 5. 列出共享目录文件
  58. - ls -laR /context
  59. # 阶段2: Docker构建并推送镜像
  60. - name: docker-build-push
  61. image: docker:24.0-cli
  62. depends_on: [ build-project ]
  63. pull: if-not-exists
  64. volumes:
  65. - name: build-artifacts
  66. path: /context
  67. - name: docker-socket
  68. path: /var/run/docker.sock
  69. - name: timezone
  70. path: /etc/localtime
  71. - name: delpoyment
  72. path: /home
  73. environment:
  74. HARBOR_USER:
  75. from_secret: harbor_robot
  76. HARBOR_PASS:
  77. from_secret: harbor_token
  78. commands:
  79. - cd /context
  80. - TAG=prod-$(date +%Y%m%d%H%M%S)-${DRONE_COMMIT_SHA:0:10}
  81. - TAG_FILE="/home/${DRONE_BUILD_NUMBER}.txt"
  82. - echo "$TAG" > "$TAG_FILE"
  83. - docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" harbor.kexiaoshuang.com
  84. - docker build -t "harbor.kexiaoshuang.com/omega/omega-project:$TAG" .
  85. - docker push "harbor.kexiaoshuang.com/omega/omega-project:$TAG"
  86. - docker rmi "harbor.kexiaoshuang.com/omega/omega-project:$TAG"
  87. - echo "TAG_FILE=$TAG_FILE"
  88. - cat "$TAG_FILE"
  89. trigger:
  90. branch: [ release-omega-project-server ]
  91. event: [ push ]
  92. ###################################################################################################################################################
  93. # #
  94. # #
  95. # #
  96. # #
  97. ###################################################################################################################################################
  98. # 测试环境配置
  99. # 1.打包构建test-omega-project-server
  100. ---
  101. kind: pipeline
  102. type: docker
  103. name: test-omega-project-server
  104. volumes: # 声明数据卷
  105. - name: build-artifacts
  106. host:
  107. path: /home/ABServer/drone/webroot/test-omega-project-server
  108. - name: dockerfile-source
  109. host:
  110. path: /home/ABServer/drone/config/omega-dockerfile
  111. - name: docker-socket
  112. host:
  113. path: /var/run/docker.sock
  114. - name: timezone
  115. host:
  116. path: /etc/localtime
  117. - name: delpoyment
  118. host:
  119. path: /home/ABServer/drone/config/shell
  120. # 启用代码拉取
  121. clone:
  122. disable: false
  123. steps:
  124. # 阶段1: .NET SDK 构建项目
  125. - name: build-project
  126. image: mcr.microsoft.com/dotnet/sdk:7.0
  127. pull: if-not-exists
  128. volumes: # 挂载数据卷
  129. # 共享卷:最终产物存放路径
  130. - name: build-artifacts
  131. path: /context
  132. # 挂载 dockerfile 目录
  133. - name: dockerfile-source
  134. path: /dockerfiles
  135. working_dir: /drone/src
  136. commands: # 执行命令
  137. # 1. 清空共享卷旧文件
  138. - rm -rf /context/*
  139. # 2. 配置 NuGet 国内源
  140. - mkdir -p ~/.nuget/NuGet
  141. - echo '<?xml version="1.0" encoding="utf-8"?><configuration><packageSources><add key="huaweicloud" value="https://repo.huaweicloud.com/repository/nuget/v3/index.json" /></packageSources></configuration>' > ~/.nuget/NuGet/NuGet.Config
  142. # 3. 编译项目
  143. - dotnet publish -c Release -o ./publish-output
  144. # 4. 复制构建产物到共享目录
  145. - cp -rv ./publish-output/* /context/
  146. - cp -rf /dockerfiles/template-example.dockerfile /context/Dockerfile
  147. - cp -rf /dockerfiles/fonts /context/fonts/
  148. - sed -i 's/{ImageName}/OmegaProject/g' /context/Dockerfile
  149. # 5. 列出共享目录文件
  150. - ls -laR /context
  151. # 阶段2: Docker构建并推送镜像
  152. - name: docker-build-push
  153. image: docker:24.0-cli
  154. depends_on: [ build-project ]
  155. pull: if-not-exists
  156. volumes:
  157. - name: build-artifacts
  158. path: /context
  159. - name: docker-socket
  160. path: /var/run/docker.sock
  161. - name: timezone
  162. path: /etc/localtime
  163. - name: delpoyment
  164. path: /home
  165. environment:
  166. HARBOR_USER:
  167. from_secret: harbor_robot
  168. HARBOR_PASS:
  169. from_secret: harbor_token
  170. commands:
  171. - cd /context
  172. - TAG=test-$(date +%Y%m%d%H%M%S)-${DRONE_COMMIT_SHA:0:10}
  173. - TAG_FILE="/home/${DRONE_BUILD_NUMBER}.txt"
  174. - echo "$TAG" > "$TAG_FILE"
  175. - docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" harbor.kexiaoshuang.com
  176. - docker build -t "harbor.kexiaoshuang.com/test/omega-project:$TAG" .
  177. - docker push "harbor.kexiaoshuang.com/test/omega-project:$TAG"
  178. - docker rmi "harbor.kexiaoshuang.com/test/omega-project:$TAG"
  179. - echo "TAG_FILE=$TAG_FILE"
  180. - cat "$TAG_FILE"
  181. # 阶段四:测试环境部署服务
  182. - name: trigger-deploy
  183. image: curlimages/curl:latest
  184. depends_on: [ docker-build-push ]
  185. volumes:
  186. - name: delpoyment
  187. path: /shared
  188. commands:
  189. - TAG_FILE="/shared/${DRONE_BUILD_NUMBER}.txt"
  190. - test -f "$TAG_FILE"
  191. - TAG=$(cat "$TAG_FILE")
  192. - echo "TAG=$TAG"
  193. - sh /shared/trigger-deploy-omega.sh $TAG omega-project omega omega
  194. trigger:
  195. branch: [ test-omega-project-server ]
  196. event: [ push ]