kind: pipeline type: docker name: ym-gateway-prod volumes: # 声明数据卷 - name: targetDir host: path: /ym-gateway clone: disable: false # 启用代码拉取 steps: - name: build-project image: mcr.microsoft.com/dotnet/sdk:7.0 pull: if-not-exists depends_on: [clone] # 依赖的步骤 volumes: # 挂载数据卷 - name: targetDir path: /drone/src/dist/ commands: # 执行命令 - echo '' > ~/.nuget/NuGet/NuGet.Config - echo '' > ~/.nuget/NuGet/NuGet.Config - rm -rf /drone/src/dist/* - dotnet publish -c release -o ./publish -r linux-x64 - cp -r ./publish/* /drone/src/dist # 复制文件 when: status: - success # 当前步骤成功时执行 - name: scp-project image: appleboy/drone-scp pull: if-not-exists depends_on: [build-project] # 依赖的步骤 volumes: # 挂载数据卷 - name: targetDir # 数据卷名称 path: /ym-gateway # 容器内目录 绝对路径 settings: host: from_secret: ym-gateway-host-a username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /ym-gateway/* - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project] # 依赖的步骤 settings: host: from_secret: ym-gateway-host-a username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m script: - echo ====备份线上文件======= - cp -r /home/ABServer/webroot/ym-gateway /home/ABServer/deploy-bak/ - echo ====开始部署======= - cd /home/ABServer/ - cp -r /home/ABServer/deploy-ready/ym-gateway /home/ABServer/webroot/ - docker restart ym-gateway - echo ====等待容器启动======= - sleep 10 # 等待容器启动 - echo ====部署成功======= when: status: - success # 当前步骤成功时执行 - name: scp-project-b image: appleboy/drone-scp pull: if-not-exists depends_on: [deploy-project] # 依赖的步骤 volumes: # 挂载数据卷 - name: targetDir # 数据卷名称 path: /ym-gateway # 容器内目录 绝对路径 settings: host: from_secret: ym-gateway-host-b username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 10m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /ym-gateway/* - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project-b image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project-b] # 依赖的步骤 settings: host: from_secret: ym-gateway-host-b username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 10m script: - echo ====备份线上文件======= - cp -r /home/ABServer/webroot/ym-gateway /home/ABServer/deploy-bak/ym-gateway - echo ====开始部署======= - cd /home/ABServer/ - cp -r /home/ABServer/deploy-ready/ym-gateway /home/ABServer/webroot/ - docker restart ym-gateway # - docker restart nodeServer1 - echo ====部署成功======= when: status: - success # 当前步骤成功时执行 trigger: branch: - release-ym-gateway event: - push #排除合并请求 exclude: - ref: refs/pull/* --- kind: pipeline type: docker name: ym-gateway-deploy volumes: # 声明数据卷 - name: build-artifacts host: path: /home/ABServer/webroot/ym-gateway - name: dockerfile-source host: path: /home/ABServer/dockfile - name: timezone host: path: /etc/localtime - name: docker-socket host: path: /var/run/docker.sock clone: disable: false # 启用代码拉取 steps: # 阶段1: 构建 - name: build-project image: mcr.microsoft.com/dotnet/sdk:7.0 volumes: - name: build-artifacts path: /drone/src/dist/ pull: if-not-exists depends_on: [clone] # 依赖的步骤 commands: # 执行命令 - echo '' > ~/.nuget/NuGet/NuGet.Config - echo '' > ~/.nuget/NuGet/NuGet.Config - rm -rf /drone/src/dist/* - dotnet publish -c release -o ./publish -r linux-x64 - cp -r ./publish/* /drone/src/dist/ # 复制文件 - ls -alR /drone/src/dist/ when: status: - success # 当前步骤成功时执行 # 阶段2: 准备Docker上下文(关键修正部分) - name: prepare-docker-context image: alpine:3.21.3 depends_on: [ build-project ] volumes: - name: build-artifacts path: /context - name: dockerfile-source path: /dockerfiles commands: - cp /dockerfiles/template.dockerfile /context/Dockerfile - cp -r /dockerfiles/fonts /context/fonts - sed -i 's/{ImageName}/OmegaGateway/g' /context/Dockerfile # - echo -e "*\n!*.dll\n!lib/\n!config/\n!Dockerfile" > /context/.dockerignore - ls -alR /context # 阶段3: 构建并推送镜像 - name: docker-build-push image: docker:24.0-cli depends_on: [ prepare-docker-context ] volumes: - name: build-artifacts path: /context - name: timezone path: /etc/localtime - name: docker-socket path: /var/run/docker.sock environment: HARBOR_USER: from_secret: harbor_robot HARBOR_PASS: from_secret: harbor_token commands: - docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" harbor.seasidecity.cn - cd /context - ls . - TAG=prod-$(date +%Y%m%d%H%M%S) - docker build -t "harbor.seasidecity.cn/omega_lib/ym-gateway:$TAG" . - docker push "harbor.seasidecity.cn/omega_lib/ym-gateway:$TAG" - docker rmi "harbor.seasidecity.cn/omega_lib/ym-gateway:$TAG" trigger: branch: - prod-gateway event: - push