.drone.yml 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. kind: pipeline
  2. type: docker
  3. name: default
  4. # 触发分支
  5. trigger:
  6. branch:
  7. - master
  8. - develop
  9. steps:
  10. # 获取缓存 (首次部署注释掉此处)
  11. - name: restore-cache
  12. image: drillster/drone-volume-cache
  13. settings:
  14. restore: true
  15. mount:
  16. - /root/.m2/repository
  17. volumes:
  18. - name: repository
  19. path: /cache
  20. # 打包 (prod)
  21. - name: build-prod
  22. image: matderosa/maven-3.8-openjdk-17-gcc8.5
  23. volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
  24. - name: maven-cache
  25. path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
  26. # (/app/build/ 对应的是 /home/www/project/DaoguCms/ 目录)
  27. - name: maven-build
  28. path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
  29. commands:
  30. - mvn clean package -P prod
  31. # (此时拷贝的内容是仓库分支拉下来的代码)
  32. - mkdir -p /app/build/target
  33. # 将打包好的 Jar包 拷贝到指定目录
  34. - cp target/test.jar /app/build/target/test.jar
  35. # 将配置文件从最新的分支 拷贝到目标目录
  36. - cp Dockerfile /app/build/Dockerfile
  37. - cp docker-compose.yml /app/build/docker-compose.yml
  38. when:
  39. branch:
  40. master
  41. # 打包 (develop)
  42. # - 在同个服务器时,docker-compose.yml 需要修改服务名
  43. - name: build-dev
  44. image: matderosa/maven-3.8-openjdk-17-gcc8.5
  45. volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
  46. - name: maven-cache
  47. path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
  48. # (/app/build/ 对应的是 /home/DaoguCms/ 目录)
  49. - name: maven-build-dev
  50. path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
  51. commands:
  52. - mvn clean package -P dev
  53. # (此时拷贝的内容是仓库分支拉下来的代码)
  54. - mkdir -p /app/build/target
  55. # 将打包好的 Jar包 拷贝到指定目录
  56. - cp target/test-dev.jar /app/build/target/test-dev.jar
  57. # 将配置文件从最新的分支 拷贝到目标目录
  58. - cp Dockerfile /app/build/Dockerfile
  59. - cp docker-compose.yml /app/build/docker-compose.yml
  60. when:
  61. branch:
  62. develop
  63. # # 更新缓存
  64. # - name: rebuild-cache
  65. # image: drillster/drone-volume-cache
  66. # settings:
  67. # rebuild: true
  68. # mount:
  69. # - /root/.m2/repository
  70. # volumes:
  71. # - name: repository
  72. # path: /cache
  73. # 传输 (master)
  74. - name: scp-master
  75. image: appleboy/drone-scp
  76. settings:
  77. port: 22
  78. host:
  79. from_secret: daogucms_ssh_host
  80. username:
  81. from_secret: daogucms_ssh_username
  82. password:
  83. from_secret: daogucms_ssh_password
  84. command_timeout: 5m
  85. source:
  86. - target/test.jar
  87. target: /home/app/
  88. when:
  89. branch: master
  90. path:
  91. - "!db/**"
  92. - "!README.md"
  93. # 部署 (prod)
  94. - name: deploy-ssh-prod
  95. image: appleboy/drone-ssh
  96. settings:
  97. port: 22
  98. host:
  99. from_secret: daogucms_ssh_host
  100. username:
  101. from_secret: daogucms_ssh_username
  102. password:
  103. from_secret: daogucms_ssh_password
  104. command_timeout: 1m
  105. script:
  106. # (此时是在 SSH登录服务器 的作用域)
  107. # Docker 启动
  108. - cd /home/app
  109. # 根据 Dockerfile 配置创建镜像 (名称需要小写)
  110. - sudo docker build -t test .
  111. # 停止容器
  112. - sudo docker-compose down
  113. # 启动容器 (根据 docker-compose.yml 配置)
  114. - sudo docker-compose up -d
  115. - sudo docker image prune -f
  116. - sudo echo "Docker App started."
  117. when:
  118. branch: master
  119. path:
  120. - "!db/**"
  121. - "!README.md"
  122. # ------------------------------------------------------------------------------
  123. # 传输 (develop)
  124. - name: scp-develop
  125. image: appleboy/drone-scp
  126. settings:
  127. port: 22
  128. host:
  129. from_secret: daogucms_ssh_host
  130. username:
  131. from_secret: daogucms_ssh_username
  132. password:
  133. from_secret: daogucms_ssh_password
  134. command_timeout: 5m
  135. source:
  136. - target/test-dev.jar
  137. target: /home/app/
  138. when:
  139. branch: develop
  140. path:
  141. - "!db/**"
  142. - "!README.md"
  143. # 部署 (develop)
  144. - name: deploy-ssh-dev
  145. image: appleboy/drone-ssh
  146. settings:
  147. port: 22
  148. host:
  149. from_secret: daogucms_ssh_host
  150. username:
  151. from_secret: daogucms_ssh_username
  152. password:
  153. from_secret: daogucms_ssh_password
  154. command_timeout: 1m
  155. script:
  156. - cd /home/app
  157. - sudo docker build -t test-dev .
  158. - sudo docker-compose down
  159. - sudo docker-compose up -d
  160. - sudo docker image prune -f
  161. - sudo echo "Docker App started."
  162. when:
  163. branch: develop
  164. # ------------------------------------------------------------------------------
  165. # 清除冗余镜像
  166. - name: cleanup
  167. image: docker:dind
  168. volumes:
  169. - name: docker-sock
  170. path: /var/run/docker.sock
  171. when:
  172. status: [ success ]
  173. commands:
  174. # 删除1小时前创建的未使用镜像
  175. - docker image prune -f --filter "until=1h"
  176. volumes: # 定义流水线挂载目录,用于共享数据
  177. - name: maven-build
  178. host:
  179. path: /home/app # 从宿主机中挂载的目录
  180. - name: maven-build-dev
  181. host:
  182. path: /home/app # 从宿主机中挂载的目录
  183. - name: maven-cache
  184. host:
  185. path: /root/docker/maven/cache
  186. - name: docker-sock
  187. host:
  188. path: /var/run/docker.sock