Просмотр исходного кода

1.部署静态文件到 OSS bucket 前先删除 bucket 中现有的文件
2.批量删除文件在 AliyunOss#deleteObjects 方法中实现, 删除文件相关代码已注释, 尚未启用

reghao 7 месяцев назад
Родитель
Сommit
e6cc9836c4

+ 32 - 0
mgr/src/main/java/cn/reghao/devops/mgr/aliyun/service/AliyunOss.java

@@ -10,6 +10,8 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import java.io.*;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.FileVisitResult;
 import java.nio.file.FileVisitor;
 import java.nio.file.Files;
@@ -112,6 +114,36 @@ public class AliyunOss {
         ossClient.deleteObject(bucketName, objectName);
     }
 
+    public void deleteObjects(String bucketName, String prefix) {
+        // 删除目录及目录下的所有文件
+        String nextMarker = null;
+        ObjectListing objectListing = null;
+        do {
+            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
+                    .withPrefix(prefix)
+                    .withMarker(nextMarker);
+            objectListing = ossClient.listObjects(listObjectsRequest);
+            if (objectListing.getObjectSummaries().size() > 0) {
+                List<String> keys = new ArrayList<>();
+                for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
+                    log.info("key name in bucket {} -> {}", bucketName, s.getKey());
+                    keys.add(s.getKey());
+                }
+
+                /*DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType("url");
+                DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
+                List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
+                for(String obj : deletedObjects) {
+                    String deleteObj =  URLDecoder.decode(obj, StandardCharsets.UTF_8);
+                    System.out.println(deleteObj);
+                    log.info("delete object {} in bucket {}", deleteObj, bucketName);
+                }*/
+            }
+
+            nextMarker = objectListing.getNextMarker();
+        } while (objectListing.isTruncated());
+    }
+
     public void close() {
         ossClient.shutdown();
     }

+ 4 - 0
mgr/src/main/java/cn/reghao/devops/mgr/app/service/bd/task/OssDeployTask.java

@@ -43,6 +43,10 @@ public class OssDeployTask implements Runnable {
         if (destDir.exists()) {
             log.error("start oss deploy task with appId {}", appId);
             String bucketName = machineId.split("\\.")[1];
+            // 匹配 bucket 下的所有文件
+            String prefix = "";
+            // 删除 bucket 下的所有文件
+            aliyunOss.deleteObjects(bucketName, prefix);
             List<String> failedList = aliyunOss.uploadDir(bucketName, destDirPath);
 
             EvtAppStatResult deployResult = new EvtAppStatResult(appId, machineId);

+ 11 - 0
mgr/src/test/java/cn/reghao/devops/mgr/devops/AppConfigTest.java

@@ -1,6 +1,7 @@
 package cn.reghao.devops.mgr.devops;
 
 import cn.reghao.devops.mgr.MgrApplication;
+import cn.reghao.devops.mgr.aliyun.service.AliyunOss;
 import cn.reghao.devops.mgr.app.db.repository.AppBuildingRepository;
 import cn.reghao.devops.mgr.app.db.repository.AppDeployingRepository;
 import cn.reghao.devops.mgr.app.db.repository.config.AppConfigRepository;
@@ -169,4 +170,14 @@ public class AppConfigTest {
         System.out.println("---------------------------");
         set.forEach(System.out::println);
     }
+
+    @Autowired
+    AliyunOss aliyunOss;
+    @Test
+    public void aliyunTest() {
+        String bucketName = "iquizoo-nztp";
+        // 匹配 bucket 下的所有文件
+        String prefix = "";
+        aliyunOss.deleteObjects(bucketName, prefix);
+    }
 }