.drone.yml 4.9 KB

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