golang 调用jenkins-job接口,如何传递file类型参数从本地上传文件

Liz8202 · 2023-04-19 17:52:39 · 3756 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-04-19 17:52:39 的主题,其中的信息可能已经有所发展或是发生改变。

运行环境: go 1.19.1 windows/amd64

问题描述: go 调用jenkins api如何进行file类型参数

现有代码

func BuildJob(fileName string,projectCode string){
    //初始化邮箱
    initMail()
    // // 安全员邮箱账号设置
    setSafeEmail(projectCode)

    ctx := context.Background()
    jenkins := gojenkins.CreateJenkins(nil,  "http://" + jenkinsAddr, jenkinsUser, jenkinsPwd)
    _, err := jenkins.Init(ctx)

    if err != nil {
        fmt.Println("********错误创建连接********")
        return
    }

    fmt.Println("********创建jenkins连接成功********")

    if jenkins != nil {
        //如果参数完全一样,会当同一次构建
        queueid, err := jenkins.BuildJob(ctx,jobName, map[string]string{"node":"dwglpt-zcy2","filename":fileName,"project_code":projectCode,"adminEmail":adminEmail,"adminUser":adminUser,"work_order_number":work_order_number})

        if err != nil {
            fmt.Println("********构建任务失败********")
            return
        }

        fmt.Println("queueid:", queueid)

        var buildNumber int64

        //获取构建Num
        for{
            task,_ := jenkins.GetQueueItem(ctx,queueid)
            if task.Raw.Executable.Number != 0 {
                buildNumber = task.Raw.Executable.Number
                break
            }

            time.Sleep(time.Second * 1)
        }

        fmt.Printf("buildNum:%v\n",buildNumber)
        build, err :=  jenkins.GetBuild(ctx,jobName,buildNumber)

        //正则规则,控制台去掉空白字符
        pattern := regexp.MustCompile(`\s+`)
        firstTip := true

        //等待输入验证码
        for {
            if build.IsRunning(ctx) {
                consoleOutput := pattern.ReplaceAllString(build.GetConsoleOutput(ctx),"")
                time.Sleep(time.Second * 5)

                if strings.HasSuffix(consoleOutput,"Inputrequested"){

                    //第一次输入验证码后后续输入验证码
                    if firstTip {
                        fmt.Println("###############请输入验证码###############")
                        firstTip = false
                    } else {
                        fmt.Println("###############验证码输入错误,请重新输入验证码###############")
                    }
                    fmt.Scanf("%s\n",&valiCode)

                    //调用接口进行构建
                    InvokRequest("POST","http://" + jenkinsUser + ":" + jenkinsToken + "@" + jenkinsAddr + "/job/dwglptyq/job/sc-cpjob/" + fmt.Sprintf("%v",buildNumber) + "/wfapi/inputSubmit?inputId=Inputap",valiCode)

                } 
            }else {
                break
            }
        }
        //最终结果信息
        fmt.Printf("********构建号: %d,构建结果: %v********\n", build.GetBuildNumber(), build.GetResult())
    }
}

目前,传递的参数都是字符串类型,因为jenkins job的参数变化,需要将本地的文件通过file参数传到jenkins服务器,当前功能不能满足触发job的条件。 当前jenkins参数界面如图示

image.png

对于红框中的文件参数,我的golang代码应该怎么调整。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3756 次点击  
加入收藏 微博
2 回复  |  直到 2023-06-12 09:12:17
Neightly
Neightly · #1 · 2年之前

盲猜一下,你用的应该是github.com/bndr/gojenkins,API设计得跟Go标准库差远了,gopher style就不要求了(能用就行要啥自行车),关键是还不正交。

你在获取queueid的时候实际使用的是InvokeSimple,说句不好听的就是阉割版。要上传文件就得用Invoke,但是Invoke却给不了你queueid

所以它所谓的封装逻辑只是为了封装而封装,到头来用户还得自己从里面把代码抠出来复制一遍。

Liz8202
Liz8202 · #2 · 2年之前

@Neightly 是的大佬,确实是bnrd/gojenkins

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传