xiehuanqun 1 месяц назад
Родитель
Сommit
ae06ed7127
1 измененных файлов с 182 добавлено и 50 удалено
  1. 182 50
      .drone.yml

+ 182 - 50
.drone.yml

@@ -1,71 +1,203 @@
 kind: pipeline
 type: docker
-name: test-pipeline
+name: default
 
-# 关闭自动设置Git镜像
-# 此处可以不设置,将获取最新的git镜像
-clone:
-  disable: true
+# 触发分支
+trigger:
+  branch:
+    - master
+    - develop
 
 steps:
-  # 设置Git镜像版本,下载仓库文件
-  # 如果上面没有设置clone,此处需要删除(如果不删除,在pipeline中将多一个clone,pipeline会出错)
-  - name: clone
-    image: drone/git:1.2.1
 
-  # 构建和编译Java项目
-  - name: maven-build
-    image: maven:3.8.4
+  # 获取缓存 (首次部署注释掉此处)
+  - name: restore-cache
+    image: drillster/drone-volume-cache
+    settings:
+      restore: true
+      mount:
+        - /root/.m2/repository
     volumes:
-      # Maven缓存目录
-      - name: mvn-cache
-        path: /root/.m2
+      - name: repository
+        path: /cache
 
-    # 在Docker容器内执行的命令
+  # 打包 (prod)
+  - name: build-prod
+    image: matderosa/maven-3.8-openjdk-17-gcc8.5
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
+      - name: maven-cache
+        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
+      # (/app/build/ 对应的是 /home/www/project/DaoguCms/ 目录)
+      - name: maven-build
+        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
     commands:
-      - mvn clean install
+      - 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: matderosa/maven-3.8-openjdk-17-gcc8.5
+    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
+    image: appleboy/drone-scp
+    settings:
+      port: 22
+      host:
+        from_secret: daogucms_ssh_host
+      username:
+        from_secret: daogucms_ssh_username
+      password:
+        from_secret: daogucms_ssh_password
+      command_timeout: 5m
+      source:
+        - target/test.jar
+      target: /home/app/
+    when:
+      branch: master
+      path:
+        - "!db/**"
+        - "!README.md"
+
+  # 部署 (prod)
+  - name: deploy-ssh-prod
+    image: appleboy/drone-ssh
+    settings:
+      port: 22
+      host:
+        from_secret: daogucms_ssh_host
+      username:
+        from_secret: daogucms_ssh_username
+      password:
+        from_secret: daogucms_ssh_password
+      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"
+
+  # ------------------------------------------------------------------------------
 
-  # 发布项目
-  - name: test
-    image: appleboy/drone-ssh:1.6.4
+  # 传输 (develop)
+  - name: scp-develop
+    image: appleboy/drone-scp
     settings:
-      # 部署主机的IP  11
-      host: 8.155.171.167
-      # 部署主机的登录账号,需从Drone中获取密钥名ssh_user的值,创建方式见下面
+      port: 22
+      host:
+        from_secret: daogucms_ssh_host
       username:
-        from_secret: ssh_user
-      # 部署主机的登录密码,需从Drone中获取密钥名ssh_pwd的值,创建方式见下面
+        from_secret: daogucms_ssh_username
       password:
-        from_secret: ssh_pwd
-      # 端口号
+        from_secret: daogucms_ssh_password
+      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
-      # 设置超时
-      command_timeout: 10m
-      # 编写脚本,可根据具体情况编写
+      host:
+        from_secret: daogucms_ssh_host
+      username:
+        from_secret: daogucms_ssh_username
+      password:
+        from_secret: daogucms_ssh_password
+      command_timeout: 1m
       script:
-        # 进入宿主机的“/home/app”目录(注意:先在宿主机上创建app目录)
         - cd /home/app
-        # 删除jar包,我测试的工程名是test
-        # - rm -rf test.0.0.1-SNAPSHOT.jar
-        # 将编译后的jar包复制到"/home/app"下
-        - cp /home/mvn/.m2/repository/com/feiyi/project/test/0.0.1-SNAPSHOT/test-0.0.1-SNAPSHOT.jar .
-        # 执行"/home/app"下的脚本(注意:需要在“/home/app”目录下创建dayunhui.sh文件)
-        - export PATH=$PATH:/usr/local/jdk1.8.0_401/bin
-        - sh test.sh restart
-        #- nohup java -jar /home/app/test-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null &
+        - sudo docker build -t test-dev .
+        - sudo docker-compose down
+        - sudo docker-compose up -d
+        - sudo docker image prune -f
+        - sudo echo "Docker App started."
+    when:
+      branch: develop
 
-        #- export PATH=$PATH:/usr/local/jdk1.8.0_401/bin
+  # ------------------------------------------------------------------------------
 
-        # - java -jar /home/app/test-0.0.1-SNAPSHOT.jar
+  # 清除冗余镜像
+  - 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"
 
 
-# 挂载宿主机目录,对应"mvn-cache"的Maven容器的目录
-volumes:
-  - name: mvn-cache
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: maven-build
     host:
-      path: /home/mvn/.m2
-
-# 对应Gogs仓库分支
-trigger:
-  branch:
-    - master
+      path: /home/app # 从宿主机中挂载的目录
+  - name: maven-build-dev
+    host:
+      path: /home/app # 从宿主机中挂载的目录
+  - name: maven-cache
+    host:
+      path: /root/docker/maven/cache
+  - name: docker-sock
+    host:
+      path: /var/run/docker.sock