使用场景:由于特殊原因,前端文件构建必须使用阿里云的云效流水线进行构建,但是构建后的文件,只能存储到 oss 里面或者自身的流水线中,这里以存储到 oss 里面为例。使用 go 写一个获取文件名和文件的命令。

    // go 获取 oss 文件名称和文件

    package main
    
    import (
        "flag"
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "os"
        "strings"
    )
    
    func handleError(err error) {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    
    func main() {
        accessKeyId := "xxxx"
        accessKeySecret := "xxxx"
        endpoint := flag.String("ep", "http://oss-cn-shanghai.aliyuncs.com", "aliyun OSS endpoint")
        bucketName := flag.String("bn", "", "aliyun OSS BucketName")
        objectName := flag.String("on", "", "aliyun oss objectName")
        downloadedFileName := flag.String("df", "", "downloadedFileName")
        ossPrefix := flag.String("op", "", "ossPrefix")
        action := flag.String("ac", "getFile", "download or getFile")
    
        client, err := oss.New(*endpoint, accessKeyId, accessKeySecret)
        flag.Parse()
    
        if err != nil {
            handleError(err)
        }
        bucket, err := client.Bucket(*bucketName)
        if err != nil {
            handleError(err)
        }
        if *action == "download" {
            err = bucket.GetObjectToFile(*objectName, *downloadedFileName)
            if err != nil {
                handleError(err)
            }
        }
        if *action == "getFile" {
            lsRes, err := bucket.ListObjects(oss.MaxKeys(10), oss.Prefix(*ossPrefix))
            if err != nil {
                fmt.Println("Error:", err)
                os.Exit(-1)
            }
            var test string
            for _, object := range lsRes.Objects {
                arr := strings.Split(object.Key, "/")
                test = test + arr[len(arr)-1] + "\n"
            }
            fmt.Println(test)
        }
    }

    // jenkinsfile

    pipeline {
        agent {
            label 'host235'
        }
        stages {
            stage('选择发布版本') {
                agent {
                    label 'host235'
                }
                steps {
                    script {
                        LIST = sh (script: 'getAliyunOss -bn="xxx-xxx-xxx-log" -op="A-build-package/xxx-xxx-xxx-stag" -ac="getFile"', returnStdout: true)
                        env.RELEASE_SCOPE = input message: '请选择发布版本', ok: '发布',
                        parameters: [choice(name: 'RELEASE_SCOPE', choices: LIST, description: '是否发布到 Stag 环境?')]
                    }
                }
            }
            stage('部署到 Stag 环境') {
                agent {
                    label 'host235'
                }
                steps {
                    script {
                        sh "rm -rf ./*.tar.gz"
                        sh "echo $RELEASE_SCOPE"
                        RELEASE = sh (script: "echo $RELEASE_SCOPE | cut -d '-' -f5-13 | cut -d '.' -f1-5", returnStdout: true).trim()
                        sh "echo $RELEASE"
                        sh """ getAliyunOss  -bn="xxx-xxx-xxx-log" -on="A-build-package/xxx-xxx-xxx-stag/${RELEASE_SCOPE}" -df="${RELEASE_SCOPE}" -ac="download" """
                        sh "rm -rf /data/www/xxx-xxx-xxx/* && tar zxvf ${RELEASE_SCOPE}  --strip-components 2 -C /data/www/xxx-xxx-xxx && ls -al /data/www/xxx-xxx-xxx"
                    }
                }
            }
        }
    }