提交 3b2e2087 编写于 作者: 徐晓伟's avatar 徐晓伟

作业产物 API: 获取(下载)作业产物

上级 69e328f9
......@@ -325,18 +325,19 @@ COPYRIGHT:
gitlab-go job-artifact command [command options] [arguments...]
COMMANDS:
get 获取作业产物(未完成)
get 获取(下载)作业产物
download, dl 下载产物归档文件(未完成)
delete, rm 删除作业产物
delete-project, delete-projects, rm-p 删除项目产物
help, h Shows a list of commands or help for one command
OPTIONS:
--base-url value 实例地址,例如:https://gitlab.xuxiaowei.com.cn/api/v4 (default: "https://gitlab.com/api/v4") [%CI_API_V4_URL%]
--token value your_access_token
--id value 项目 ID 或 URL 编码的路径
--job-id value 作业 ID
--help, -h show help
--base-url value 实例地址,例如:https://gitlab.xuxiaowei.com.cn/api/v4 (default: "https://gitlab.com/api/v4") [%CI_API_V4_URL%]
--token value your_access_token
--id value 项目 ID 或 URL 编码的路径
--job-id value 作业 ID
--artifacts-name value 保存产物名称(保存到系统磁盘的名称) (default: "artifacts.zip")
--help, -h show help
```
- [job - 作业 API](https://docs.gitlab.cn/jh/api/jobs.html)
......
......@@ -8,6 +8,7 @@ const (
Repository = "repository"
TagName = "tag-name"
JobId = "job-id"
ArtifactsName = "artifacts-name"
Sort = "sort"
SortDefault = "desc"
Page = "page"
......
......@@ -92,6 +92,14 @@ func JobId(required bool) cli.Flag {
}
}
func ArtifactsName() cli.Flag {
return &cli.StringFlag{
Name: constant.ArtifactsName,
Value: "artifacts.zip",
Usage: "保存产物名称(保存到系统磁盘的名称)",
}
}
func Page() cli.Flag {
return &cli.IntFlag{
Name: constant.Page,
......
......@@ -6,7 +6,9 @@ import (
"github.com/xanzy/go-gitlab"
"github.com/xuxiaowei-com-cn/gitlab-go/constant"
"github.com/xuxiaowei-com-cn/gitlab-go/flag"
"io"
"log"
"os"
)
// JobsArtifacts 作业产物 API https://docs.gitlab.cn/jh/api/job_artifacts.html
......@@ -15,16 +17,49 @@ func JobsArtifacts() *cli.Command {
Name: "job-artifact",
Aliases: []string{"job-artifacts", "ja"},
Usage: "作业产物 API,中文文档:https://docs.gitlab.cn/jh/api/job_artifacts.html",
Flags: append(flag.Common(), flag.Id(false), flag.JobId(false)),
Flags: append(flag.Common(), flag.Id(false), flag.JobId(false), flag.ArtifactsName()),
Subcommands: []*cli.Command{
{
Name: "get",
Usage: "获取作业产物(未完成)",
Flags: append(flag.Common(), flag.Id(true), flag.JobId(false)),
Usage: "获取(下载)作业产物",
Flags: append(flag.Common(), flag.Id(true), flag.JobId(true), flag.ArtifactsName()),
Action: func(context *cli.Context) error {
log.Printf("获取作业产物")
var baseUrl = context.String(constant.BaseUrl)
var token = context.String(constant.Token)
var id = context.String(constant.Id)
var jobId = context.Int(constant.JobId)
var artifactsName = context.String(constant.ArtifactsName)
return fmt.Errorf("未完成")
gitClient, err := gitlab.NewClient(token, gitlab.WithBaseURL(baseUrl))
if err != nil {
return err
}
artifactsReader, response, err := gitClient.Jobs.GetJobArtifacts(id, jobId)
log.Printf("Response StatusCode: %d\n", response.Response.StatusCode)
if err != nil {
return err
}
log.Printf("Get Job Artifacts End")
// 读取构件数据
artifactsData, err := io.ReadAll(artifactsReader)
if err != nil {
return err
}
log.Printf("Read All Reader End")
// 将构件数据保存到文件
err = os.WriteFile(artifactsName, artifactsData, 0644)
if err != nil {
return err
}
log.Printf("Write File End")
return nil
},
},
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册