Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徐晓伟工作室
gitlab-go
提交
677cfeb0
G
gitlab-go
项目概览
徐晓伟工作室
/
gitlab-go
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-go
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
677cfeb0
编写于
10月 17, 2023
作者:
徐晓伟
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
作业 API: 列出项目作业: 补充参数,优化打印
上级
ed202749
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
179 addition
and
20 deletion
+179
-20
README.md
README.md
+2
-0
jobs/jobs.go
jobs/jobs.go
+177
-20
未找到文件。
README.md
浏览文件 @
677cfeb0
...
...
@@ -359,6 +359,8 @@ COPYRIGHT:
--token value your_access_token
--page value 页码(默认:1),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 1)
--per-page value 每页列出的项目数(默认:20;最大:100),中文文档 https://docs.gitlab.cn/jh/api/rest/index.html#pagination (default: 20)
--print-json 打印 JSON (default: false)
--print-time 打印时间 (default: false)
--sort value 按照 asc 或者 desc 排序 (default: "desc")
--id value 项目 ID 或 URL 编码的路径
--scope value 要显示的作业范围。以下之一或数组:created、pending、running、failed、success、canceled、skipped、waiting_for_resource 或 manual。范围如果未提供,则返回所有作业。
...
...
jobs/jobs.go
浏览文件 @
677cfeb0
package
jobs
import
(
"encoding/json"
"fmt"
"github.com/urfave/cli/v2"
"github.com/xanzy/go-gitlab"
"github.com/xuxiaowei-com-cn/gitlab-go/constant"
...
...
@@ -19,14 +21,14 @@ func Jobs() *cli.Command {
Name
:
"job"
,
Aliases
:
[]
string
{
"jobs"
,
"j"
},
Usage
:
"作业 API,中文文档:https://docs.gitlab.cn/jh/api/jobs.html"
,
Flags
:
append
(
flag
.
Common
(),
flag
.
Page
(),
flag
.
PerPage
(),
flag
.
Sort
(),
flag
.
Id
(
false
),
flag
.
Scope
(
ScopeValue
,
ScopeUsage
)),
Flags
:
append
(
flag
.
Common
(),
flag
.
Page
(),
flag
.
PerPage
(),
flag
.
PrintJson
(),
flag
.
PrintTime
(
),
flag
.
S
ort
(),
flag
.
Id
(
false
),
flag
.
S
cope
(
ScopeValue
,
ScopeUsage
)),
Subcommands
:
[]
*
cli
.
Command
{
{
Name
:
"list"
,
Usage
:
"列出项目作业"
,
Flags
:
append
(
flag
.
Common
(),
flag
.
Page
(),
flag
.
PerPage
(),
flag
.
Sort
(),
flag
.
Id
(
true
),
flag
.
Scope
(
ScopeValue
,
ScopeUsage
)),
Flags
:
append
(
flag
.
Common
(),
flag
.
Page
(),
flag
.
PerPage
(),
flag
.
PrintJson
(),
flag
.
PrintTime
(
),
flag
.
S
ort
(),
flag
.
Id
(
true
),
flag
.
S
cope
(
ScopeValue
,
ScopeUsage
)),
Action
:
func
(
context
*
cli
.
Context
)
error
{
var
baseUrl
=
context
.
String
(
constant
.
BaseUrl
)
var
token
=
context
.
String
(
constant
.
Token
)
...
...
@@ -34,33 +36,170 @@ func Jobs() *cli.Command {
var
page
=
context
.
Int
(
constant
.
Page
)
var
perPage
=
context
.
Int
(
constant
.
PerPage
)
var
scope
=
context
.
StringSlice
(
constant
.
Scope
)
var
printJson
=
context
.
Bool
(
constant
.
PrintJson
)
var
printTime
=
context
.
Bool
(
constant
.
PrintTime
)
gitClient
,
err
:=
gitlab
.
NewClient
(
token
,
gitlab
.
WithBaseURL
(
baseUrl
))
if
err
!=
nil
{
return
err
}
var
bsvs
[]
gitlab
.
BuildStateValue
for
_
,
str
:=
range
scope
{
bsv
:=
gitlab
.
BuildStateValue
(
str
)
bsvs
=
append
(
bsvs
,
bsv
)
}
opt
:=
&
gitlab
.
ListJobsOptions
{
Scope
:
&
bsvs
,
ListOptions
:
gitlab
.
ListOptions
{
Page
:
page
,
PerPage
:
perPage
,
},
}
jobs
,
response
,
err
:=
gitClient
.
Jobs
.
ListProjectJobs
(
id
,
opt
)
jobs
,
response
,
err
:=
ListProjectJobs
(
gitClient
,
id
,
scope
,
page
,
perPage
)
if
err
!=
nil
{
return
err
}
log
.
Printf
(
"Response StatusCode: %d
\n
"
,
response
.
Response
.
StatusCode
)
for
index
,
job
:=
range
jobs
{
log
.
Printf
(
"Index: %d,
\t
ID: %d,
\t
Name: %s,
\t
ProjectID: %d,
\t
Status: %s,
\t
CreatedAt: %s
\n
"
,
index
,
job
.
ID
,
job
.
Name
,
job
.
Project
.
ID
,
job
.
Status
,
job
.
CreatedAt
)
fmt
.
Println
(
""
)
if
printJson
{
if
printTime
{
for
_
,
job
:=
range
jobs
{
jsonData
,
err
:=
json
.
Marshal
(
job
)
if
err
!=
nil
{
panic
(
err
)
}
log
.
Printf
(
"
\n
%s
\n
"
,
string
(
jsonData
))
fmt
.
Println
(
""
)
}
}
else
{
for
_
,
job
:=
range
jobs
{
jsonData
,
err
:=
json
.
Marshal
(
job
)
if
err
!=
nil
{
panic
(
err
)
}
fmt
.
Printf
(
"%s
\n
"
,
string
(
jsonData
))
fmt
.
Println
(
""
)
}
}
}
else
{
if
printTime
{
for
_
,
job
:=
range
jobs
{
log
.
Printf
(
"ID: %d
\n
"
,
job
.
ID
)
log
.
Printf
(
"Name: %s
\n
"
,
job
.
Name
)
log
.
Printf
(
"Coverage: %f
\n
"
,
job
.
Coverage
)
log
.
Printf
(
"AllowFailure: %t
\n
"
,
job
.
AllowFailure
)
log
.
Printf
(
"CreatedAt: %s
\n
"
,
job
.
CreatedAt
)
log
.
Printf
(
"StartedAt: %s
\n
"
,
job
.
StartedAt
)
log
.
Printf
(
"FinishedAt: %s
\n
"
,
job
.
FinishedAt
)
log
.
Printf
(
"ErasedAt: %s
\n
"
,
job
.
ErasedAt
)
log
.
Printf
(
"Duration: %f
\n
"
,
job
.
Duration
)
log
.
Printf
(
"QueuedDuration: %f
\n
"
,
job
.
QueuedDuration
)
log
.
Printf
(
"ArtifactsExpireAt: %s
\n
"
,
job
.
ArtifactsExpireAt
)
log
.
Printf
(
"TagList: %s
\n
"
,
job
.
TagList
)
log
.
Printf
(
"Ref: %s
\n
"
,
job
.
Ref
)
log
.
Printf
(
"Stage: %s
\n
"
,
job
.
Stage
)
log
.
Printf
(
"Status: %s
\n
"
,
job
.
Status
)
log
.
Printf
(
"FailureReason: %s
\n
"
,
job
.
FailureReason
)
log
.
Printf
(
"Tag: %t
\n
"
,
job
.
Tag
)
log
.
Printf
(
"WebURL: %s
\n
"
,
job
.
WebURL
)
log
.
Printf
(
"Commit.ID: %s
\n
"
,
job
.
Commit
.
ID
)
log
.
Printf
(
"Commit.ShortID: %s
\n
"
,
job
.
Commit
.
ShortID
)
log
.
Printf
(
"Commit.Title: %s
\n
"
,
job
.
Commit
.
Title
)
log
.
Printf
(
"Commit.AuthorName: %s
\n
"
,
job
.
Commit
.
AuthorName
)
log
.
Printf
(
"Commit.AuthorEmail: %s
\n
"
,
job
.
Commit
.
AuthorEmail
)
log
.
Printf
(
"Commit.AuthoredDate: %s
\n
"
,
job
.
Commit
.
AuthoredDate
)
log
.
Printf
(
"Commit.CommitterName: %s
\n
"
,
job
.
Commit
.
CommitterName
)
log
.
Printf
(
"Commit.CommitterEmail: %s
\n
"
,
job
.
Commit
.
CommitterEmail
)
log
.
Printf
(
"Commit.CommittedDate: %s
\n
"
,
job
.
Commit
.
CommittedDate
)
log
.
Printf
(
"Commit.CreatedAt: %s
\n
"
,
job
.
Commit
.
CreatedAt
)
log
.
Printf
(
"Commit.Message: %s
\n
"
,
job
.
Commit
.
Message
)
log
.
Printf
(
"Commit.ParentIDs: %s
\n
"
,
job
.
Commit
.
ParentIDs
)
log
.
Printf
(
"Commit.Stats: %d
\n
"
,
job
.
Commit
.
Stats
)
log
.
Printf
(
"Commit.Status: %d
\n
"
,
job
.
Commit
.
Status
)
log
.
Printf
(
"Commit.LastPipeline: %s
\n
"
,
job
.
Commit
.
LastPipeline
)
log
.
Printf
(
"Commit.ProjectID: %d
\n
"
,
job
.
Commit
.
ProjectID
)
log
.
Printf
(
"Commit.Trailers: %s
\n
"
,
job
.
Commit
.
Trailers
)
log
.
Printf
(
"Commit.WebURL: %s
\n
"
,
job
.
Commit
.
WebURL
)
log
.
Printf
(
"Pipeline.ID: %d
\n
"
,
job
.
Pipeline
.
ID
)
log
.
Printf
(
"Pipeline.ProjectID: %d
\n
"
,
job
.
Pipeline
.
ProjectID
)
log
.
Printf
(
"Pipeline.Ref: %d
\n
"
,
job
.
Pipeline
.
Ref
)
log
.
Printf
(
"Pipeline.Sha: %d
\n
"
,
job
.
Pipeline
.
Sha
)
log
.
Printf
(
"Pipeline.Status: %d
\n
"
,
job
.
Pipeline
.
Status
)
for
index
,
jobArtifact
:=
range
job
.
Artifacts
{
log
.
Printf
(
"Artifacts[%d].FileType: %s
\n
"
,
index
,
jobArtifact
.
FileType
)
log
.
Printf
(
"Artifacts[%d].Filename: %s
\n
"
,
index
,
jobArtifact
.
Filename
)
log
.
Printf
(
"Artifacts[%d].Size: %d
\n
"
,
index
,
jobArtifact
.
Size
)
log
.
Printf
(
"Artifacts[%d].FileFormat: %s
\n
"
,
index
,
jobArtifact
.
FileFormat
)
}
log
.
Printf
(
"ArtifactsFile.Filename: %s
\n
"
,
job
.
ArtifactsFile
.
Filename
)
log
.
Printf
(
"ArtifactsFile.Size: %d
\n
"
,
job
.
ArtifactsFile
.
Size
)
log
.
Printf
(
"Runner.ID: %d
\n
"
,
job
.
Runner
.
ID
)
log
.
Printf
(
"Runner.Description: %s
\n
"
,
job
.
Runner
.
Description
)
log
.
Printf
(
"Runner.Active: %t
\n
"
,
job
.
Runner
.
Active
)
log
.
Printf
(
"Runner.IsShared: %t
\n
"
,
job
.
Runner
.
IsShared
)
log
.
Printf
(
"Runner.Name: %s
\n
"
,
job
.
Runner
.
Name
)
// log.Printf("Project: %s\n", job.Project)
// log.Printf("User: %s\n", job.User)
fmt
.
Println
(
""
)
}
}
else
{
for
_
,
job
:=
range
jobs
{
fmt
.
Printf
(
"ID: %d
\n
"
,
job
.
ID
)
fmt
.
Printf
(
"Name: %s
\n
"
,
job
.
Name
)
fmt
.
Printf
(
"Coverage: %f
\n
"
,
job
.
Coverage
)
fmt
.
Printf
(
"AllowFailure: %t
\n
"
,
job
.
AllowFailure
)
fmt
.
Printf
(
"CreatedAt: %s
\n
"
,
job
.
CreatedAt
)
fmt
.
Printf
(
"StartedAt: %s
\n
"
,
job
.
StartedAt
)
fmt
.
Printf
(
"FinishedAt: %s
\n
"
,
job
.
FinishedAt
)
fmt
.
Printf
(
"ErasedAt: %s
\n
"
,
job
.
ErasedAt
)
fmt
.
Printf
(
"Duration: %f
\n
"
,
job
.
Duration
)
fmt
.
Printf
(
"QueuedDuration: %f
\n
"
,
job
.
QueuedDuration
)
fmt
.
Printf
(
"ArtifactsExpireAt: %s
\n
"
,
job
.
ArtifactsExpireAt
)
fmt
.
Printf
(
"TagList: %s
\n
"
,
job
.
TagList
)
fmt
.
Printf
(
"Ref: %s
\n
"
,
job
.
Ref
)
fmt
.
Printf
(
"Stage: %s
\n
"
,
job
.
Stage
)
fmt
.
Printf
(
"Status: %s
\n
"
,
job
.
Status
)
fmt
.
Printf
(
"FailureReason: %s
\n
"
,
job
.
FailureReason
)
fmt
.
Printf
(
"Tag: %t
\n
"
,
job
.
Tag
)
fmt
.
Printf
(
"WebURL: %s
\n
"
,
job
.
WebURL
)
fmt
.
Printf
(
"Commit.ID: %s
\n
"
,
job
.
Commit
.
ID
)
fmt
.
Printf
(
"Commit.ShortID: %s
\n
"
,
job
.
Commit
.
ShortID
)
fmt
.
Printf
(
"Commit.Title: %s
\n
"
,
job
.
Commit
.
Title
)
fmt
.
Printf
(
"Commit.AuthorName: %s
\n
"
,
job
.
Commit
.
AuthorName
)
fmt
.
Printf
(
"Commit.AuthorEmail: %s
\n
"
,
job
.
Commit
.
AuthorEmail
)
fmt
.
Printf
(
"Commit.AuthoredDate: %s
\n
"
,
job
.
Commit
.
AuthoredDate
)
fmt
.
Printf
(
"Commit.CommitterName: %s
\n
"
,
job
.
Commit
.
CommitterName
)
fmt
.
Printf
(
"Commit.CommitterEmail: %s
\n
"
,
job
.
Commit
.
CommitterEmail
)
fmt
.
Printf
(
"Commit.CommittedDate: %s
\n
"
,
job
.
Commit
.
CommittedDate
)
fmt
.
Printf
(
"Commit.CreatedAt: %s
\n
"
,
job
.
Commit
.
CreatedAt
)
fmt
.
Printf
(
"Commit.Message: %s
\n
"
,
job
.
Commit
.
Message
)
fmt
.
Printf
(
"Commit.ParentIDs: %s
\n
"
,
job
.
Commit
.
ParentIDs
)
fmt
.
Printf
(
"Commit.Stats: %d
\n
"
,
job
.
Commit
.
Stats
)
fmt
.
Printf
(
"Commit.Status: %d
\n
"
,
job
.
Commit
.
Status
)
fmt
.
Printf
(
"Commit.LastPipeline: %s
\n
"
,
job
.
Commit
.
LastPipeline
)
fmt
.
Printf
(
"Commit.ProjectID: %d
\n
"
,
job
.
Commit
.
ProjectID
)
fmt
.
Printf
(
"Commit.Trailers: %s
\n
"
,
job
.
Commit
.
Trailers
)
fmt
.
Printf
(
"Commit.WebURL: %s
\n
"
,
job
.
Commit
.
WebURL
)
fmt
.
Printf
(
"Pipeline.ID: %d
\n
"
,
job
.
Pipeline
.
ID
)
fmt
.
Printf
(
"Pipeline.ProjectID: %d
\n
"
,
job
.
Pipeline
.
ProjectID
)
fmt
.
Printf
(
"Pipeline.Ref: %d
\n
"
,
job
.
Pipeline
.
Ref
)
fmt
.
Printf
(
"Pipeline.Sha: %d
\n
"
,
job
.
Pipeline
.
Sha
)
fmt
.
Printf
(
"Pipeline.Status: %d
\n
"
,
job
.
Pipeline
.
Status
)
for
index
,
jobArtifact
:=
range
job
.
Artifacts
{
fmt
.
Printf
(
"Artifacts[%d].FileType: %s
\n
"
,
index
,
jobArtifact
.
FileType
)
fmt
.
Printf
(
"Artifacts[%d].Filename: %s
\n
"
,
index
,
jobArtifact
.
Filename
)
fmt
.
Printf
(
"Artifacts[%d].Size: %d
\n
"
,
index
,
jobArtifact
.
Size
)
fmt
.
Printf
(
"Artifacts[%d].FileFormat: %s
\n
"
,
index
,
jobArtifact
.
FileFormat
)
}
fmt
.
Printf
(
"ArtifactsFile.Filename: %s
\n
"
,
job
.
ArtifactsFile
.
Filename
)
fmt
.
Printf
(
"ArtifactsFile.Size: %d
\n
"
,
job
.
ArtifactsFile
.
Size
)
fmt
.
Printf
(
"Runner.ID: %d
\n
"
,
job
.
Runner
.
ID
)
fmt
.
Printf
(
"Runner.Description: %s
\n
"
,
job
.
Runner
.
Description
)
fmt
.
Printf
(
"Runner.Active: %t
\n
"
,
job
.
Runner
.
Active
)
fmt
.
Printf
(
"Runner.IsShared: %t
\n
"
,
job
.
Runner
.
IsShared
)
fmt
.
Printf
(
"Runner.Name: %s
\n
"
,
job
.
Runner
.
Name
)
// fmt.Printf("Project: %s\n", job.Project)
// fmt.Printf("User: %s\n", job.User)
fmt
.
Println
(
""
)
}
}
}
return
nil
...
...
@@ -69,3 +208,21 @@ func Jobs() *cli.Command {
},
}
}
func
ListProjectJobs
(
gitClient
*
gitlab
.
Client
,
pid
interface
{},
scope
[]
string
,
page
int
,
perPage
int
)
([]
*
gitlab
.
Job
,
*
gitlab
.
Response
,
error
)
{
var
bsvs
[]
gitlab
.
BuildStateValue
for
_
,
str
:=
range
scope
{
bsv
:=
gitlab
.
BuildStateValue
(
str
)
bsvs
=
append
(
bsvs
,
bsv
)
}
opt
:=
&
gitlab
.
ListJobsOptions
{
Scope
:
&
bsvs
,
ListOptions
:
gitlab
.
ListOptions
{
Page
:
page
,
PerPage
:
perPage
,
},
}
jobs
,
response
,
err
:=
gitClient
.
Jobs
.
ListProjectJobs
(
pid
,
opt
)
return
jobs
,
response
,
err
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录