阿里云官方API
https://help.aliyun.com/document_detail/88601.html
已服务运行
https://blog.csdn.net/daily886/article/details/103366145
参考
https://blog.csdn.net/qq_36034503/article/details/123696273
jenkins
https://blog.csdn.net/xujiamin0022016/article/details/108859168
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// 判断当前环境是否有 Git
if _, err := exec.LookPath("git"); err != nil {
fmt.Println("当前没有Git环境,建议你安装一下Git环境")
return
}
// 执行 git clone 命令克隆代码仓库,并输入账户密码
cmd := exec.Command("git", "clone", "-b", "oss", "xxxx", "D:/impromptu")
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = append(cmd.Env, "GIT_TERMINAL_PROMPT=1")
cmd.Env = append(cmd.Env, "GIT_ASKPASS=")
cmd.Run()
fmt.Println("Repository cloned successfully")
}
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("xxx", "xxxx", "xxxx")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "oss-cicd"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 获取要删除的所有对象列表。
marker := oss.Marker("")
for {
// 列举Bucket中的所有对象。
lsRes, err := bucket.ListObjects(oss.MaxKeys(1000), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 遍历对象列表并依次删除每个对象。
for _, object := range lsRes.Objects {
err = bucket.DeleteObject(object.Key)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object deleted successfully:", object.Key)
}
// 如果Bucket中还有更多的对象需要列举,则更新marker继续列举。
if lsRes.IsTruncated {
marker = oss.Marker(lsRes.NextMarker)
} else {
break
}
}
// 上传本地文件到OSS。
localPath := "D:/impromptu/index.html"
objectName := "index.html"
err = bucket.PutObjectFromFile(objectName, localPath)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Objects uploaded successfully")
}
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
const (
DEFAULT_OSS_WIN_STORAGE = "D:/"
DEFAULT_OSS_LINUX_STORAGE = "/"
)
func main() {
endpoint := "https://oss-cn-shanghai.aliyuncs.com"
accessKeyId := "LTAI5tQaUtLg1VeZRtJwSdrf"
accessKeySecret := "SrFkyaVu2pxffqzxotG0lbdn6KWEJL"
bucketName := "oss-cicd"
client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 获取要删除的所有对象列表。
marker := oss.Marker("")
for {
// 列举Bucket中的所有对象。
lsRes, err := bucket.ListObjects(oss.MaxKeys(1000), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 遍历对象列表并依次删除每个对象。
for _, object := range lsRes.Objects {
err = bucket.DeleteObject(object.Key)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object deleted successfully:", object.Key)
}
// 如果Bucket中还有更多的对象需要列举,则更新marker继续列举。
if lsRes.IsTruncated {
marker = oss.Marker(lsRes.NextMarker)
} else {
break
}
}
// 文件上传路径和 OSS 目录名称。
fileUploadPath := "D:/impromptu/"
ossDir := ""
err = filepath.Walk(fileUploadPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
// 如果是目录,则在OSS上创建同名目录。
dirName := strings.TrimPrefix(strings.ReplaceAll(path, "\\", "/"), fileUploadPath)
if dirName == "" {
return nil
}
ossPath := filepath.ToSlash(filepath.Join(ossDir, dirName)) + "/"
fmt.Printf("Creating directory %s\n", ossPath)
err = bucket.PutObject(ossPath, strings.NewReader(""))
if err != nil {
return err
}
} else {
// 如果是文件,则上传到OSS。
fileName := strings.TrimPrefix(strings.ReplaceAll(path, "\\", "/"), fileUploadPath)
ossPath := filepath.ToSlash(filepath.Join(ossDir, fileName))
fmt.Printf("Uploading file %s to %s\n", path, ossPath)
err = bucket.PutObjectFromFile(ossPath, path)
if err != nil {
return err
}
}
return nil
})
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("All objects uploaded successfully.")
}