.ymdrone.yml 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. kind: pipeline
  2. type: docker
  3. name: ym-config-deploy
  4. volumes: # 声明数据卷
  5. - name: build-artifacts
  6. host:
  7. path: /home/ABServer/webroot/omega-config-server
  8. - name: dockerfile-source
  9. host:
  10. path: /home/ABServer/dockfile
  11. - name: timezone
  12. host:
  13. path: /etc/localtime
  14. - name: docker-socket
  15. host:
  16. path: /var/run/docker.sock
  17. clone:
  18. disable: false # 启用代码拉取
  19. steps:
  20. # 阶段1: 构建
  21. - name: build-project
  22. image: mcr.microsoft.com/dotnet/sdk:7.0
  23. volumes:
  24. - name: build-artifacts
  25. path: /drone/src/dist/
  26. pull: if-not-exists
  27. depends_on: [clone] # 依赖的步骤
  28. commands: # 执行命令
  29. - echo '' > ~/.nuget/NuGet/NuGet.Config
  30. - echo '<?xml version="1.0" encoding="utf-8"?><configuration><packageSources><add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /></packageSources></configuration>' > ~/.nuget/NuGet/NuGet.Config
  31. - rm -rf /drone/src/dist/*
  32. - dotnet publish -c release -o ./publish -r linux-x64
  33. - cp -r ./publish/* /drone/src/dist/ # 复制文件
  34. - ls -alR /drone/src/dist/
  35. when:
  36. status:
  37. - success # 当前步骤成功时执行
  38. # 阶段2: 准备Docker上下文(关键修正部分)
  39. - name: prepare-docker-context
  40. image: alpine:3.21.3
  41. depends_on: [ build-project ]
  42. volumes:
  43. - name: build-artifacts
  44. path: /context
  45. - name: dockerfile-source
  46. path: /dockerfiles
  47. commands:
  48. - cp /dockerfiles/omega-template.dockerfile /context/Dockerfile
  49. - cp -r /dockerfiles/fonts /context/fonts
  50. - sed -i 's/{ImageName}/OmegaConfig/g' /context/Dockerfile
  51. # - echo -e "*\n!*.dll\n!lib/\n!config/\n!Dockerfile" > /context/.dockerignore
  52. - ls -alR /context
  53. # 阶段3: 构建并推送镜像
  54. - name: docker-build-push
  55. image: docker:24.0-cli
  56. depends_on: [ prepare-docker-context ]
  57. volumes:
  58. - name: build-artifacts
  59. path: /context
  60. - name: timezone
  61. path: /etc/localtime
  62. - name: docker-socket
  63. path: /var/run/docker.sock
  64. environment:
  65. HARBOR_USER:
  66. from_secret: harbor_robot
  67. HARBOR_PASS:
  68. from_secret: harbor_token
  69. SERVER_NAME: omega-config-server
  70. commands:
  71. - docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" harbor.seasidecity.cn
  72. - cd /context
  73. - ls .
  74. - TAG=prod-$(date +%Y%m%d%H%M%S)
  75. - docker build -t "harbor.seasidecity.cn/omega/$$SERVER_NAME:$TAG" .
  76. - docker push "harbor.seasidecity.cn/omega/$$SERVER_NAME:$TAG"
  77. - docker rmi "harbor.seasidecity.cn/omega/$$SERVER_NAME:$TAG"
  78. trigger:
  79. branch:
  80. - prod-config
  81. event:
  82. - push