首页 编程笔记

drone CI/CD 时的特殊配置

pyweeX 发布于 08-25
编程笔记
pyweeX

我这里的情况比较特殊,一般使用 drone 都比较简单化,因为我这里比较特殊,所以 pipeline 的 type 设置为了 exec,也就是宿主机执行。

这就导致了里面的所有 steps 都不可能使用 docker image,原本我这里有一个逻辑,就是当流程中的任意一项执行失败的时候,就会拉取一个镜像发送邮件,但现在是 exec 模式,所以无法拉取,这就导致项目构建失败。所以需要拆分流水线,经过多次尝试配置,这次终于配置成功,以下是完整代码:

  1. kind: pipeline
  2. type: exec
  3. name: CI-building
  4. clone:
  5. disable: true
  6. environment:
  7. GOOS: linux
  8. GOARCH: amd64
  9. GOPROXY: https://proxy.golang.com.cn,direct
  10. GONOPROXY: gitea.xxx.com
  11. GOPRIVATE: gitea.xxx.com
  12. steps:
  13. - name: CI
  14. environment:
  15. GOPROXY: https://proxy.golang.com.cn,direct
  16. GONOPROXY: gitea.xxx.com
  17. GOPRIVATE: gitea.xxx.com
  18. GOPATH: /root/go
  19. PROJECT_API_NAME:
  20. from_secret: PROJECT_API_NAME
  21. PROJECT_RPC_NAME:
  22. from_secret: PROJECT_RPC_NAME
  23. DOMAIN_PREFIX:
  24. from_secret: STAGE_DOMAIN_PREFIX
  25. command_timeout: 360s
  26. commands:
  27. - pwd
  28. - cd /xxx/app_project/${DRONE_REPO_NAME}
  29. - git config --global url."https://alanal:Alanal126com@gitea.xxx.com".insteadOf "https://gitea.xxx.com"
  30. #- git remote add origin https://userName:pwd@gitea.xxx.com/xxxpower/${DRONE_REPO_NAME}.git
  31. - git checkout -- .
  32. - git pull
  33. - git switch ${DRONE_COMMIT_BRANCH}
  34. #- git branch --set-upstream-to=origin/${DRONE_COMMIT_BRANCH} ${DRONE_COMMIT_BRANCH}
  35. - git pull
  36. - export PATH=$PATH:/usr/local/go/bin
  37. - go env
  38. - go version
  39. - go mod tidy
  40. - go build -ldflags="-s -w" -o ./app api/*.go
  41. - docker build -f api/Dockerfile -t $${PROJECT_API_NAME}:latest .
  42. - docker tag $${PROJECT_API_NAME}:latest harbor.xxx.com/xxx/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10}
  43. - docker login harbor.xxx.com -u admin -p Harborxxx
  44. - docker push harbor.xxx.com/xxx/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10}
  45. - echo "API构建完成, 你可以通过 docker pull harbor.xxx.com/xxx/$PROJECT_API_NAME:${DRONE_COMMIT:0:10} 获取镜像"
  46. - |
  47. if [ -d "rpc" ]; then
  48. go build -ldflags="-s -w" -o ./rpc_app rpc/*.go
  49. docker build -f rpc/Dockerfile -t $${PROJECT_RPC_NAME}:latest .
  50. docker tag $${PROJECT_RPC_NAME}:latest harbor.xxx.com/xxx/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10}
  51. docker push harbor.xxx.com/xxx/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10}
  52. rm -rf ./rpc_app
  53. echo "RPC构建完成, 你可以通过 docker pull harbor.xxx.com/xxx/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10} 获取镜像"
  54. fi
  55. - name: stage-publish
  56. environment:
  57. PROJECT_API_NAME:
  58. from_secret: PROJECT_API_NAME
  59. PROJECT_RPC_NAME:
  60. from_secret: PROJECT_RPC_NAME
  61. DOMAIN_PREFIX:
  62. from_secret: STAGE_DOMAIN_PREFIX
  63. when:
  64. branch:
  65. - develop
  66. commands:
  67. - echo ">>>>>>>>>>>>>>>>>>>>"
  68. - echo 1 $DOMAIN_PREFIX 2
  69. - cd /xxx/app_project/${DRONE_REPO_NAME}
  70. - docker compose down
  71. - export DOMAIN_PREFIX=$DOMAIN_PREFIX
  72. - export GIT_COMMIT=${DRONE_COMMIT:0:10}
  73. - export ENV=""
  74. - |
  75. if [ -d "rpc" ]; then
  76. echo $PROJECT_RPC_NAME 12345
  77. docker tag $PROJECT_RPC_NAME:latest harbor.xxx.com/xxx/$PROJECT_RPC_NAME:${DRONE_COMMIT:0:10}
  78. docker push harbor.xxx.com/xxx/$PROJECT_RPC_NAME:${DRONE_COMMIT:0:10}
  79. docker images | grep $${PROJECT_RPC_NAME} | awk '{print $3}' | xargs docker rmi -f
  80. fi
  81. - docker images | grep $${PROJECT_API_NAME} | awk '{print $3}' | xargs docker rmi -f
  82. - docker compose up -d
  83. volumes:
  84. - name: docker-sock
  85. host:
  86. path: /var/run/docker.sock
  87. trigger:
  88. branch:
  89. - develop
  90. - master
  91. event:
  92. include:
  93. - push
  94. - custom
  95. - merge_request
  96. ---
  97. kind: pipeline
  98. type: docker
  99. name: CI-Master-publish
  100. depends_on:
  101. - CI-building
  102. steps:
  103. - name: prod-publish
  104. image: appleboy/drone-ssh
  105. environment:
  106. PROD_DOMAIN_PREFIX:
  107. from_secret: PROD_DOMAIN_PREFIX
  108. PROJECT_API_NAME:
  109. from_secret: PROJECT_API_NAME
  110. PROJECT_RPC_NAME:
  111. from_secret: PROJECT_RPC_NAME
  112. settings:
  113. host:
  114. from_secret: PROD_HOST_IP
  115. username:
  116. from_secret: PROD_HOST_NAME
  117. password:
  118. from_secret: PROD_HOST_PWD
  119. port: 22
  120. command_timeout: 360s
  121. envs: [PROJECT_API_NAME,PROD_DOMAIN_PREFIX,PROJECT_RPC_NAME]
  122. script:
  123. - bash
  124. - cd /xxx/app_project/${DRONE_REPO_NAME}
  125. - git pull https://xxx:xxx@gitea.xxx.com/xxxpower/${DRONE_REPO_NAME}.git
  126. - docker login harbor.xxx.com -u admin -p Harborxxx
  127. - git pull origin
  128. - git branch
  129. - git fetch origin
  130. - git checkout master
  131. - export ENV="-prod"
  132. - export DOMAIN_PREFIX=$${PROD_DOMAIN_PREFIX}
  133. - export GIT_COMMIT=${DRONE_COMMIT:0:10}
  134. # - docker compose down
  135. # - docker images | grep $${PROJECT_API_NAME} | awk '{print $3}' | xargs docker rmi -f
  136. # - docker images | grep $${PROJECT_RPC_NAME} | awk '{print $3}' | xargs docker rmi -f
  137. - docker compose up -d
  138. retry:
  139. limit: 2
  140. delay: 360s
  141. volumes:
  142. - name: docker-sock
  143. host:
  144. path: /var/run/docker.sock
  145. trigger:
  146. branch:
  147. - master
  148. event:
  149. include:
  150. - push
  151. - custom
  152. - merge_request
  153. ---
  154. kind: pipeline
  155. type: docker
  156. name: promote/rollback
  157. steps:
  158. - name: stage-rollback
  159. image: appleboy/drone-ssh
  160. environment:
  161. PROJECT_API_NAME:
  162. from_secret: PROJECT_API_NAME
  163. PROJECT_RPC_NAME:
  164. from_secret: PROJECT_RPC_NAME
  165. DOMAIN_PREFIX:
  166. from_secret: DOMAIN_PREFIX
  167. settings:
  168. host:
  169. from_secret: STAGE_HOST_IP
  170. username:
  171. from_secret: STAGE_HOST_NAME
  172. password:
  173. from_secret: STAGE_HOST_PWD
  174. port: 22
  175. command_timeout: 300s
  176. envs: [PROJECT_API_NAME,STAGE_DOMAIN_PREFIX,PROJECT_RPC_NAME]
  177. script:
  178. - cd /xxx/app_project/${DRONE_REPO_NAME}
  179. - export GIT_COMMIT=${DRONE_COMMIT:0:10}
  180. - export DOMAIN_PREFIX=$${STAGE_DOMAIN_PREFIX}
  181. - export ENV=""
  182. - docker compose down
  183. - docker compose up -d
  184. - echo "版本已经更新到 ${DRONE_COMMIT:0:10}, ${DRONE_COMMIT_MESSAGE}"
  185. when:
  186. branch:
  187. - develop
  188. - name: prod-rollback
  189. image: appleboy/drone-ssh
  190. environment:
  191. PROJECT_API_NAME:
  192. from_secret: PROJECT_API_NAME
  193. PROJECT_RPC_NAME:
  194. from_secret: PROJECT_RPC_NAME
  195. DOMAIN_PREFIX:
  196. from_secret: DOMAIN_PREFIX
  197. settings:
  198. host:
  199. from_secret: PROD_HOST_IP
  200. username:
  201. from_secret: PROD_HOST_NAME
  202. password:
  203. from_secret: PROD_HOST_PWD
  204. port: 22
  205. command_timeout: 300s
  206. envs: [PROJECT_API_NAME,DOMAIN_PREFIX,PROJECT_RPC_NAME]
  207. script:
  208. - cd /xxx/app_project/${DRONE_REPO_NAME}
  209. - export GIT_COMMIT=${DRONE_COMMIT:0:10}
  210. - export DOMAIN_PREFIX=$${DOMAIN_PREFIX}
  211. - export ENV="-prod"
  212. - docker compose down
  213. - docker compose up -d
  214. - echo "版本已经更新到 ${DRONE_COMMIT:0:10}, ${DRONE_COMMIT_MESSAGE}"
  215. when:
  216. branch:
  217. - master
  218. volumes:
  219. - name: docker-sock
  220. host:
  221. path: /var/run/docker.sock
  222. trigger:
  223. branch:
  224. - develop
  225. - master
  226. event:
  227. - rollback
  228. - promote
  229. ---
  230. kind: pipeline
  231. type: docker
  232. name: CI-notify
  233. clone:
  234. disable: true
  235. steps:
  236. - name: notify
  237. image: drillster/drone-email
  238. settings:
  239. host:
  240. username:
  241. password: xxx2023
  242. port: 465
  243. from:
  244. trigger:
  245. status:
  246. - failure
  247. depends_on:
  248. - CI-building

声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。

讨论 支持 Markdown 语法 点击演示
回复
评论预览框

开发者

开发者·注册登录
  • 获取验证码
  • 取消