|
|
@@ -2,202 +2,68 @@ kind: pipeline
|
|
|
type: docker
|
|
|
name: default
|
|
|
|
|
|
-# 触发分支
|
|
|
trigger:
|
|
|
branch:
|
|
|
- master
|
|
|
- develop
|
|
|
|
|
|
steps:
|
|
|
-
|
|
|
- # 获取缓存 (首次部署注释掉此处)
|
|
|
- - name: restore-cache
|
|
|
- image: drillster/drone-volume-cache
|
|
|
- settings:
|
|
|
- restore: true
|
|
|
- mount:
|
|
|
- - /root/.m2/repository
|
|
|
- volumes:
|
|
|
- - name: repository
|
|
|
- path: /cache
|
|
|
-
|
|
|
- # 打包 (prod)
|
|
|
- - name: build-prod
|
|
|
+ # 构建 jar
|
|
|
+ - name: maven-build
|
|
|
image: maven:3.8-openjdk-17
|
|
|
- volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
|
|
|
+ volumes:
|
|
|
- name: maven-cache
|
|
|
- path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
|
|
|
- # (/app/build/ 对应的是 /home/www/project/DaoguCms/ 目录)
|
|
|
- - name: maven-build
|
|
|
- path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
|
|
|
+ path: /root/.m2
|
|
|
+ - name: build-output
|
|
|
+ path: /app/build
|
|
|
commands:
|
|
|
- mvn clean package -P prod
|
|
|
- # (此时拷贝的内容是仓库分支拉下来的代码)
|
|
|
- mkdir -p /app/build/target
|
|
|
- # 将打包好的 Jar包 拷贝到指定目录
|
|
|
- cp target/test.jar /app/build/target/test.jar
|
|
|
- # 将配置文件从最新的分支 拷贝到目标目录
|
|
|
- - cp Dockerfile /app/build/Dockerfile
|
|
|
- - cp docker-compose.yml /app/build/docker-compose.yml
|
|
|
- when:
|
|
|
- branch:
|
|
|
- master
|
|
|
-
|
|
|
- # 打包 (develop)
|
|
|
- # - 在同个服务器时,docker-compose.yml 需要修改服务名
|
|
|
- - name: build-dev
|
|
|
- image: maven:3.8-openjdk-17
|
|
|
- volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
|
|
|
- - name: maven-cache
|
|
|
- path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
|
|
|
- # (/app/build/ 对应的是 /home/DaoguCms/ 目录)
|
|
|
- - name: maven-build-dev
|
|
|
- path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
|
|
|
- commands:
|
|
|
- - mvn clean package -P dev
|
|
|
- # (此时拷贝的内容是仓库分支拉下来的代码)
|
|
|
- - mkdir -p /app/build/target
|
|
|
- # 将打包好的 Jar包 拷贝到指定目录
|
|
|
- - cp target/test-dev.jar /app/build/target/test-dev.jar
|
|
|
- # 将配置文件从最新的分支 拷贝到目标目录
|
|
|
- cp Dockerfile /app/build/Dockerfile
|
|
|
- cp docker-compose.yml /app/build/docker-compose.yml
|
|
|
- when:
|
|
|
- branch:
|
|
|
- develop
|
|
|
|
|
|
- # # 更新缓存
|
|
|
- # - name: rebuild-cache
|
|
|
- # image: drillster/drone-volume-cache
|
|
|
- # settings:
|
|
|
- # rebuild: true
|
|
|
- # mount:
|
|
|
- # - /root/.m2/repository
|
|
|
- # volumes:
|
|
|
- # - name: repository
|
|
|
- # path: /cache
|
|
|
-
|
|
|
- # 传输 (master)
|
|
|
- - name: scp-master
|
|
|
+ # 上传到服务器
|
|
|
+ - name: scp-upload
|
|
|
image: appleboy/drone-scp
|
|
|
settings:
|
|
|
- port: 22
|
|
|
host:
|
|
|
from_secret: ssh_host
|
|
|
username:
|
|
|
from_secret: ssh_user
|
|
|
password:
|
|
|
from_secret: ssh_pwd
|
|
|
- command_timeout: 5m
|
|
|
+ port: 22
|
|
|
source:
|
|
|
- - target/test.jar
|
|
|
+ - /app/build/target/test.jar
|
|
|
+ - /app/build/Dockerfile
|
|
|
+ - /app/build/docker-compose.yml
|
|
|
target: /home/app/
|
|
|
- when:
|
|
|
- branch: master
|
|
|
- path:
|
|
|
- - "!db/**"
|
|
|
- - "!README.md"
|
|
|
|
|
|
- # 部署 (prod)
|
|
|
- - name: deploy-ssh-prod
|
|
|
+ # 部署容器
|
|
|
+ - name: deploy
|
|
|
image: appleboy/drone-ssh
|
|
|
settings:
|
|
|
- port: 22
|
|
|
host:
|
|
|
from_secret: ssh_host
|
|
|
username:
|
|
|
from_secret: ssh_user
|
|
|
password:
|
|
|
from_secret: ssh_pwd
|
|
|
- command_timeout: 1m
|
|
|
- script:
|
|
|
- # (此时是在 SSH登录服务器 的作用域)
|
|
|
- # Docker 启动
|
|
|
- - cd /home/app
|
|
|
- # 根据 Dockerfile 配置创建镜像 (名称需要小写)
|
|
|
- - sudo docker build -t test .
|
|
|
- # 停止容器
|
|
|
- - sudo docker-compose down
|
|
|
- # 启动容器 (根据 docker-compose.yml 配置)
|
|
|
- - sudo docker-compose up -d
|
|
|
- - sudo docker image prune -f
|
|
|
- - sudo echo "Docker App started."
|
|
|
- when:
|
|
|
- branch: master
|
|
|
- path:
|
|
|
- - "!db/**"
|
|
|
- - "!README.md"
|
|
|
-
|
|
|
- # ------------------------------------------------------------------------------
|
|
|
-
|
|
|
- # 传输 (develop)
|
|
|
- - name: scp-develop
|
|
|
- image: appleboy/drone-scp
|
|
|
- settings:
|
|
|
port: 22
|
|
|
- host:
|
|
|
- from_secret: ssh_host
|
|
|
- username:
|
|
|
- from_secret: ssh_user
|
|
|
- password:
|
|
|
- from_secret: ssh_pwd
|
|
|
command_timeout: 5m
|
|
|
- source:
|
|
|
- - target/test-dev.jar
|
|
|
- target: /home/app/
|
|
|
- when:
|
|
|
- branch: develop
|
|
|
- path:
|
|
|
- - "!db/**"
|
|
|
- - "!README.md"
|
|
|
-
|
|
|
- # 部署 (develop)
|
|
|
- - name: deploy-ssh-dev
|
|
|
- image: appleboy/drone-ssh
|
|
|
- settings:
|
|
|
- port: 22
|
|
|
- host:
|
|
|
- from_secret: ssh_host
|
|
|
- username:
|
|
|
- from_secret: ssh_user
|
|
|
- password:
|
|
|
- from_secret: ssh_pwd
|
|
|
- command_timeout: 1m
|
|
|
script:
|
|
|
- cd /home/app
|
|
|
- - sudo docker build -t test-dev .
|
|
|
- - sudo docker-compose down
|
|
|
+ - sudo docker-compose down || true
|
|
|
+ - sudo docker-compose build --no-cache
|
|
|
- sudo docker-compose up -d
|
|
|
- sudo docker image prune -f
|
|
|
- - sudo echo "Docker App started."
|
|
|
- when:
|
|
|
- branch: develop
|
|
|
-
|
|
|
- # ------------------------------------------------------------------------------
|
|
|
+ - echo "🚀 App 已部署完成"
|
|
|
|
|
|
- # 清除冗余镜像
|
|
|
- - name: cleanup
|
|
|
- image: docker:dind
|
|
|
- volumes:
|
|
|
- - name: docker-sock
|
|
|
- path: /var/run/docker.sock
|
|
|
- when:
|
|
|
- status: [ success ]
|
|
|
- commands:
|
|
|
- # 删除1小时前创建的未使用镜像
|
|
|
- - docker image prune -f --filter "until=1h"
|
|
|
-
|
|
|
-
|
|
|
-volumes: # 定义流水线挂载目录,用于共享数据
|
|
|
- - name: maven-build
|
|
|
- host:
|
|
|
- path: /home/app # 从宿主机中挂载的目录
|
|
|
- - name: maven-build-dev
|
|
|
- host:
|
|
|
- path: /home/app # 从宿主机中挂载的目录
|
|
|
+volumes:
|
|
|
- name: maven-cache
|
|
|
host:
|
|
|
path: /root/docker/maven/cache
|
|
|
- - name: docker-sock
|
|
|
+ - name: build-output
|
|
|
host:
|
|
|
- path: /var/run/docker.sock
|
|
|
+ path: /home/app
|