######################################################################################################### # 1.打包构建lhb-gateway kind: pipeline type: docker name: lhb-gateway-prod volumes: - name: mvn_repo host: path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn - name: build-artifacts host: path: /home/ABServer/webroot/lhb-gateway - name: dockerfile-source host: path: /home/ABServer/config/docker - name: timezone host: path: /etc/localtime - name: docker-socket host: path: /var/run/docker.sock clone: disable: false steps: # 阶段1: Maven构建 - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists volumes: - name: mvn_repo path: /usr/share/maven/repo - name: mvn_config path: /usr/share/maven/conf commands: - mvn clean package -Dmaven.test.skip=true -P prod - echo "===== 构建产物验证 =====" - ls -l lhb-gateway/target/*.jar - '[ -d lhb-gateway/target/lib ] || exit 1' - '[ -d lhb-gateway/target/config ] || exit 1' # 阶段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: - rm -rf /context/* - cp -v lhb-gateway/target/*.jar /context/ - cp -rv lhb-gateway/target/lib /context/ - cp -rv lhb-gateway/target/config /context/ - cp /dockerfiles/template-min.dockerfile /context/Dockerfile - sed -i 's/{Xms}/1024m/g' /context/Dockerfile - sed -i 's/{Xmx}/1024m/g' /context/Dockerfile - sed -i 's/{ImageName}/lhb-gateway/g' /context/Dockerfile - echo -e "*\n!*.jar\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.kexiaoshuang.com - cd /context - TAG=$(date +%Y%m%d%H%M%S) - docker build -t "harbor.kexiaoshuang.com/laihaoba/lhb-gateway:$TAG" . - docker push "harbor.kexiaoshuang.com/laihaoba/lhb-gateway:$TAG" - docker rmi "harbor.kexiaoshuang.com/laihaoba/lhb-gateway:$TAG" trigger: event: [ push ] branch: [ release-lhb-gateway ] ######################################################################################################### #2.打包构建lhb-quartz-prod --- kind: pipeline type: docker name: lhb-quartz-prod volumes: - name: mvn_repo host: path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn - name: build-artifacts host: path: /home/ABServer/webroot/lhb-quartz - name: dockerfile-source host: path: /home/ABServer/config/docker - name: timezone host: path: /etc/localtime - name: docker-socket host: path: /var/run/docker.sock clone: disable: false steps: # 阶段1: Maven构建 - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists volumes: - name: mvn_repo path: /usr/share/maven/repo - name: mvn_config path: /usr/share/maven/conf commands: - mvn clean package -Dmaven.test.skip=true -P prod - echo "===== 构建产物验证 =====" - ls -l lhb-quartz/target/*.jar - '[ -d lhb-quartz/target/lib ] || exit 1' - '[ -d lhb-quartz/target/config ] || exit 1' # 阶段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: - rm -rf /context/* - cp -v lhb-quartz/target/*.jar /context/ - cp -rv lhb-quartz/target/lib /context/ - cp -rv lhb-quartz/target/config /context/ - cp /dockerfiles/template-min.dockerfile /context/Dockerfile - sed -i 's/{Xms}/256m/g' /context/Dockerfile - sed -i 's/{Xmx}/256m/g' /context/Dockerfile - sed -i 's/{ImageName}/lhb-quartz/g' /context/Dockerfile - echo -e "*\n!*.jar\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.kexiaoshuang.com - cd /context - TAG=$(date +%Y%m%d%H%M%S) - docker build -t "harbor.kexiaoshuang.com/laihaoba/lhb-quartz:$TAG" . - docker push "harbor.kexiaoshuang.com/laihaoba/lhb-quartz:$TAG" - docker rmi "harbor.kexiaoshuang.com/laihaoba/lhb-quartz:$TAG" trigger: event: [ push ] branch: [ release-lhb-quartz ] ########################################################################################################### # 3.打包构建lhb-system-prod --- kind: pipeline type: docker name: lhb-system-prod # 定义所有 Volume 映射 volumes: - name: mvn_repo host: path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn - name: build-artifacts # 构建产物临时目录 host: path: /home/ABServer/webroot/lhb-system - name: dockerfile-source host: path: /home/ABServer/config/docker - name: timezone host: path: /etc/localtime - name: docker-socket host: path: /var/run/docker.sock clone: disable: false steps: # 阶段1: Maven 构建 - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists volumes: - name: mvn_repo path: /usr/share/maven/repo - name: mvn_config path: /usr/share/maven/conf commands: - mvn clean package -Dmaven.test.skip=true -P prod - echo "===== 构建产物生成验证 =====" - ls -l lhb-system/lhb-system-biz/target/*.jar - '[ -d lhb-system/lhb-system-biz/target/lib ] || exit 1' - '[ -d lhb-system/lhb-system-biz/target/config ] || exit 1' # 阶段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: - rm -rf /context/* - cp -v lhb-system/lhb-system-biz/target/*.jar /context/ - cp -rv lhb-system/lhb-system-biz/target/lib /context/ - cp -rv lhb-system/lhb-system-biz/target/config /context/ - cp /dockerfiles/template-biz-min.dockerfile /context/Dockerfile - sed -i 's/{Xms}/512m/g' /context/Dockerfile - sed -i 's/{Xmx}/512m/g' /context/Dockerfile - sed -i 's/{ImageName}/lhb-system/g' /context/Dockerfile - echo -e "*\n!*.jar\n!lib/\n!config/\n!Dockerfile" > /context/.dockerignore - echo "===== 构建上下文文件列表 =====" - ls -laR /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.kexiaoshuang.com - cd /context - TAG=$(date +%Y%m%d%H%M%S) - docker build -t "harbor.kexiaoshuang.com/laihaoba/lhb-system:$TAG" . - docker push "harbor.kexiaoshuang.com/laihaoba/lhb-system:$TAG" - docker rmi "harbor.kexiaoshuang.com/laihaoba/lhb-system:$TAG" trigger: event: [ push ] branch: [ release-lhb-system ] ########################################################################################################### # 4.打包构建lhb-basic --- kind: pipeline type: docker name: lhb-basic-prod # 定义所有 Volume 映射 volumes: - name: mvn_repo host: path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn - name: build-artifacts # 构建产物临时目录 host: path: /home/ABServer/webroot/lhb-basic - name: dockerfile-source host: path: /home/ABServer/config/docker - name: timezone host: path: /etc/localtime - name: docker-socket host: path: /var/run/docker.sock clone: disable: false steps: # 阶段1: Maven 构建 - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists volumes: - name: mvn_repo path: /usr/share/maven/repo - name: mvn_config path: /usr/share/maven/conf commands: - mvn clean package -Dmaven.test.skip=true -P prod - echo "===== 构建产物生成验证 =====" - ls -l lhb-basic/lhb-basic-biz/target/*.jar - '[ -d lhb-basic/lhb-basic-biz/target/lib ] || exit 1' - '[ -d lhb-basic/lhb-basic-biz/target/config ] || exit 1' # 阶段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: - rm -rf /context/* - cp -v lhb-basic/lhb-basic-biz/target/*.jar /context/ - cp -rv lhb-basic/lhb-basic-biz/target/lib /context/ - cp -rv lhb-basic/lhb-basic-biz/target/config /context/ - cp /dockerfiles/template-biz-min.dockerfile /context/Dockerfile - sed -i 's/{Xms}/512m/g' /context/Dockerfile - sed -i 's/{Xmx}/512m/g' /context/Dockerfile - sed -i 's/{ImageName}/lhb-basic/g' /context/Dockerfile - echo -e "*\n!*.jar\n!lib/\n!config/\n!Dockerfile" > /context/.dockerignore - echo "===== 构建上下文文件列表 =====" - ls -laR /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.kexiaoshuang.com - cd /context - TAG=$(date +%Y%m%d%H%M%S) - docker build -t "harbor.kexiaoshuang.com/laihaoba/lhb-basic:$TAG" . - docker push "harbor.kexiaoshuang.com/laihaoba/lhb-basic:$TAG" - docker rmi "harbor.kexiaoshuang.com/laihaoba/lhb-basic:$TAG" trigger: event: [ push ] branch: [ release-lhb-basic ] ############################################################################################ # 测试分支打包 # 1.lhb-gateway-test --- kind: pipeline type: docker name: lhb-gateway-test volumes: # 声明数据卷 - name: mvn_repo # 数据卷名称 # Host Volume, 挂载到宿主机上的卷轴 host: # 宿主机的绝对路径 path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn/ - name: targetDir host: path: /lhb-gateway clone: disable: false # 启用代码拉取 steps: - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists depends_on: [clone] # 依赖的步骤 volumes: # 挂载数据卷 - name: mvn_repo # 数据卷名称 path: /usr/share/maven/repo # 容器内目录 绝对路径 - name: targetDir path: /drone/src/dist/ - name: mvn_config path: /usr/share/maven/conf/ commands: # 执行命令 - rm -rf /drone/src/dist/* - mvn clean package -Dmaven.test.skip=true -P test - cp /drone/src/lhb-gateway/target/*.jar /drone/src/dist/ && cp -r /drone/src/lhb-gateway/target/lib /drone/src/dist/ && cp -r /drone/src/lhb-gateway/target/config /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: /lhb-gateway # 容器内目录 绝对路径 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /lhb-gateway/*.jar - /lhb-gateway/lib - /lhb-gateway/config - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project] # 依赖的步骤 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m script: - echo ====开始部署======= - cd /home/ABServer/ - cp -r /home/ABServer/deploy-ready/lhb-gateway /home/ABServer/webroot/ - docker stop lhb-gateway && docker rm lhb-gateway && docker-compose up -d lhb-gateway # - docker restart nodeServer1 - echo ====部署成功======= trigger: branch: include: - test-gateway event: include: - pull_request - push ############################################################################################ --- kind: pipeline type: docker name: lhb-quartz-test volumes: # 声明数据卷 - name: mvn_repo # 数据卷名称 # Host Volume, 挂载到宿主机上的卷轴 host: # 宿主机的绝对路径 path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn/ - name: targetDir host: path: /lhb-quartz clone: disable: false # 启用代码拉取 steps: - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists depends_on: [clone] # 依赖的步骤 volumes: # 挂载数据卷 - name: mvn_repo # 数据卷名称 path: /usr/share/maven/repo # 容器内目录 绝对路径 - name: targetDir path: /drone/src/dist/ - name: mvn_config path: /usr/share/maven/conf/ commands: # 执行命令 - rm -rf /drone/src/dist/* - mvn clean package -Dmaven.test.skip=true -P test - cp /drone/src/lhb-quartz/target/*.jar /drone/src/dist/ && cp -r /drone/src/lhb-quartz/target/lib /drone/src/dist/ && cp -r /drone/src/lhb-quartz/target/config /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: /lhb-quartz # 容器内目录 绝对路径 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /lhb-quartz/*.jar - /lhb-quartz/lib - /lhb-quartz/config - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project] # 依赖的步骤 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m script: - echo ====开始部署======= - cd /home/ABServer/ - rm -rf /home/ABServer/webroot/lhb-quartz/* - cp -r /home/ABServer/deploy-ready/lhb-quartz /home/ABServer/webroot/ - docker restart lhb-quartz - rm -rf /home/ABServer/deploy-ready/lhb-quartz/* # - docker restart nodeServer1 - echo ====部署成功======= trigger: branch: include: - test-quartz event: include: - pull_request - push ############################################################################################ --- kind: pipeline type: docker name: lhb-system-test volumes: # 声明数据卷 - name: mvn_repo # 数据卷名称 # Host Volume, 挂载到宿主机上的卷轴 host: # 宿主机的绝对路径 path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn/ - name: targetDir host: path: /lhb-system clone: disable: false # 启用代码拉取 steps: - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists depends_on: [clone] # 依赖的步骤 volumes: # 挂载数据卷 - name: mvn_repo # 数据卷名称 path: /usr/share/maven/repo # 容器内目录 绝对路径 - name: targetDir path: /drone/src/lhb/dist/ - name: mvn_config path: /usr/share/maven/conf/ commands: # 执行命令 - rm -rf /drone/src/lhb/dist/* - mvn clean package -Dmaven.test.skip=true -P test - cp /drone/src/lhb-system/lhb-system-biz/target/*.jar /drone/src/lhb/dist/ && cp -r /drone/src/lhb-system/lhb-system-biz/target/lib /drone/src/lhb/dist/ && cp -r /drone/src/lhb-system/lhb-system-biz/target/config /drone/src/lhb/dist/ # 复制文件 when: status: - success # 当前步骤成功时执行 - name: scp-project image: appleboy/drone-scp pull: if-not-exists depends_on: [build-project] # 依赖的步骤 volumes: # 挂载数据卷 - name: targetDir # 数据卷名称 path: /lhb-system # 容器内目录 绝对路径 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /lhb-system/*.jar - /lhb-system/lib - /lhb-system/config - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project] # 依赖的步骤 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m script: - echo ====开始部署======= - cd /home/ABServer/ - rm -rf /home/ABServer/webroot/lhb-system/* - cp -r /home/ABServer/deploy-ready/lhb-system /home/ABServer/webroot/ - docker stop lhb-system && docker rm lhb-system && docker-compose up -d lhb-system - rm -rf /home/ABServer/deploy-ready/lhb-system/* # - docker restart nodeServer1 - echo ====部署成功======= trigger: branch: include: - test-system event: include: - pull_request - push ############################################################################################ --- kind: pipeline type: docker name: lhb-basic-test volumes: # 声明数据卷 - name: mvn_repo # 数据卷名称 # Host Volume, 挂载到宿主机上的卷轴 host: # 宿主机的绝对路径 path: /home/ABServer/cache/mvn_repo - name: mvn_config host: path: /home/ABServer/config/mvn/ - name: targetDir host: path: /lhb-basic clone: disable: false # 启用代码拉取 steps: - name: build-project image: maven:3.9.4-amazoncorretto-17 pull: if-not-exists depends_on: [clone] # 依赖的步骤 volumes: # 挂载数据卷 - name: mvn_repo # 数据卷名称 path: /usr/share/maven/repo # 容器内目录 绝对路径 - name: targetDir path: /drone/src/lhb/dist/ - name: mvn_config path: /usr/share/maven/conf/ commands: # 执行命令 - rm -rf /drone/src/lhb/dist/* - mvn clean package -Dmaven.test.skip=true -P test - cp /drone/src/lhb-basic/lhb-basic-biz/target/*.jar /drone/src/lhb/dist/ && cp -r /drone/src/lhb-basic/lhb-basic-biz/target/lib /drone/src/lhb/dist/ && cp -r /drone/src/lhb-basic/lhb-basic-biz/target/config /drone/src/lhb/dist/ # 复制文件 when: status: - success # 当前步骤成功时执行 - name: scp-project image: appleboy/drone-scp pull: if-not-exists depends_on: [build-project] # 依赖的步骤 volumes: # 挂载数据卷 - name: targetDir # 数据卷名称 path: /lhb-basic # 容器内目录 绝对路径 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m target: /home/ABServer/deploy-ready/ source: - echo ====开始拷贝======= - /lhb-basic/*.jar - /lhb-basic/lib - /lhb-basic/config - echo ====结束拷贝======= when: status: - success # 当前步骤成功时执行 - name: deploy-project image: appleboy/drone-ssh pull: if-not-exists depends_on: [scp-project] # 依赖的步骤 settings: host: from_secret: host username: from_secret: username password: from_secret: userpwd port: 22 command_timeout: 2m script: - echo ====开始部署======= - cd /home/ABServer/ - rm -rf /home/ABServer/webroot/lhb-basic/* - cp -r /home/ABServer/deploy-ready/lhb-basic /home/ABServer/webroot/ - docker stop lhb-basic && docker rm lhb-basic && docker-compose up -d lhb-basic - rm -rf /home/ABServer/deploy-ready/lhb-basic/* # - docker restart nodeServer1 - echo ====部署成功======= trigger: branch: include: - test-basic event: include: - pull_request - push