一、场景说明
在设计CICD流程中,需要将安卓的
二、实现方式
- 创建阿里云子账号,获取子账号
AccessKey
- 创建
Bucket
,并授权OSS读写权限 - 通过Go调用
OSS-SDK
进行实现文件的上传下载功能
三、动手实践
1、创建子账号


- 然后给这个用户添加OSS权限即可,这里我就不截图了
2、创建Bucke文章来源(Source):浅时光博客 t
- 创建好Bucket之后给对应的用户授予读写权限
原文链接:https://www.dqzboy.com 即可


3、编写工具代码
3.1:主要功能实现代码
说明:
- 我们主要需要导入阿里云oss-sdb的模块:
github.com/aliyun/aliyun-oss-go-sdk/oss
- 定义子账号的
AccessKey
和Endpoint
变量;在项目下创建etc目录并创建一个.secret.env
文件,文件里原文链接:https://www.dqzboy.com 面定义内容如下:
export ALI_AK="AccessKey ID"
export ALI_SK="AccessKey Secret"
export ALI_OSS_ENDPOINT="Endpoint"
主要功能实现代码:
- 本代码已经上传至GitHub:仓库地址

$ go mod init OssUploader
$ go get github.com/aliyun/aliyun-oss-go-sdk/oss
package main
import (
"flag"
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
var (
conf = NewDefaultConfig()
)
func NewDefaultConfig() *Config {
return &Config{
//这里填写上传到Bucket的名称
BucketName: "dqzboy",
}
}
type Config struct {
Endpoint string
AK string
SK string
BucketName string
}
func (c *Config) Validate() error {
if c.Endpoint == "" {
return fmt.Errorf("OSS Endpoint 必须")
}
if c.AK == "" {
return fmt.Errorf("AccessKey ID 必须")
}
if c.SK == "" {
return fmt.Errorf("AccessKey Secret 必须")
}
return nil
}
func LoadConfigFromEnv() {
conf.Endpoint = os.Getenv("ALI_OSS_ENDPOINT")
conf.AK = os.Getenv("ALI_AK")
conf.SK = os.Getenv("ALI_SK")
}
func UploadFile(filename string) (downloadURL string, err error) {
client, err := oss.New(conf.Endpoint, conf.AK, conf.SK)
if err != nil {
err = fmt.Errorf("new client error, %s", err)
return
}
bucket, err := client.Bucket(conf.BucketName)
if err != nil {
err = fmt.Errorf("get bucket %s error, %s", conf.BucketName, err)
return
}
err = bucket.PutObjectFromFile(filename, filename)
if err != nil {
err = fmt.Errorf("upload file %s error, %s", filename, err)
return
}
// 生成下载链接
return bucket.SignURL(filename, oss.HTTPGet, 60*60*24*3)
}
//定义文件变量
var (
fileName string
help bool
)
//声明CLI的参数
func init() {
flag.StringVar(&fileName, "f","","请输入需要上传的文件的路径")
flag.BoolVar(&help,"help",false,"打印本工具的使用说明")
}
//命令执行 帮助提示
func usage() {
fmt.Fprintf(os.Stderr, `cloud-station version: 0.0.1
Usage: cloud-station [-h] -f <uplaod_file_path>
Options:
`)
//如果选项错误,返回默认提示信息
flag.PrintDefaults()
}
// LoadArgsFromCLI 负责接收用户传入的参数
func LoadArgsFromCLI() {
//通过标准库flag parse解析CLI参数
flag.Parse()
//打印说明信息
if help {
usage()
os.Exit(0)
}
}
func main() {
LoadConfigFromEnv()
//校验配置
if err := conf.Validate();err != nil {
fmt.Println(err)
os.Exit(1)
}
//接收用户参数
LoadArgsFromCLI()
//上传文件
downloadURL, err := UploadFile(fileName)
if err != nil {
fmt.Println(err)
os.Exit(2)
}
//正常退出
fmt.Printf("文 件: %s 上传成功\n", fileName)
// 打印下载链接
fmt.Printf("下载链接: %s\n", downloadURL)
fmt.Println("\n注意: 文件下载有效期为1天, 保存时间为3天, 请及时下载")
os.Exit(0)
}
3.2:运行代码测试
$ source etc/.secret.env
$ go build -o upload-oss.exe main.go
$ ./upload-oss.exe -f upload-oss.exe

3.3:登入OSS检查

- 测试没问题之后,现在我们通过交叉编译,生成可在Linux系统下执行的二进制文件
$ env GOOS=linux GOARCH=amd64 go build -o upload-oss main.go
四、最后总结
以上就是通过Go代码实现文件上传OSS的小工具的开发,然后将最后build的二进制执行文件上传到构建机上,然后在执行CICD时去调用该执行文件进行上传我们需要上传的文件到OSS存储中去,然后并将下载链接通过企业微信或则钉钉机器人的方式推送出去;Jenkins消息推送工具可以查看本人的GitHhb仓库进行下载改造,仓库地址:点击跳转下载
必须 注册 为本站用户, 登录 后才可以发表评论!