.drone.yml 4.5 KB

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