Compare commits
2 Commits
v0.0.0-202
...
main
Author | SHA1 | Date |
---|---|---|
徐晓伟 | 9a00cb52ed | |
徐晓伟 | f2454e84f6 |
|
@ -544,6 +544,7 @@ COPYRIGHT:
|
|||
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
|
||||
--owned 当前用户明确拥有的项目。 (default: false)
|
||||
--sort value 按照 asc 或者 desc 排序 (default: "desc")
|
||||
--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)
|
||||
|
@ -694,6 +695,7 @@ COPYRIGHT:
|
|||
多个数字(使用英文逗号隔开):1,2,3,7,8,15
|
||||
支持范围:5-10,
|
||||
支持范围方向选择:-10(小于等于10,即:从 0 到 10),214-(大于等于214,即:从 214 到 214 + 10000,数据范围不超过 10000)
|
||||
--allow-failure 允许失败 (default: false)
|
||||
--help, -h show help
|
||||
```
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@ func DeleteJobs() *cli.Command {
|
|||
Name: "job",
|
||||
Aliases: []string{"jobs"},
|
||||
Usage: "根据项目路径/ID、流水线IID范围删除作业产物和作业日志(混合命令,多接口命令,立即删除)",
|
||||
Flags: append(flag.CommonTokenRequired(), flag.Sort(), flag.Page(), flag.PerPage(), flag.Id(true), flag.IIdRange(true)),
|
||||
Flags: append(flag.CommonTokenRequired(), flag.Sort(), flag.Page(), flag.PerPage(), flag.Id(true),
|
||||
flag.IIdRange(true), flag.AllowFailure()),
|
||||
Action: func(context *cli.Context) error {
|
||||
var baseUrl = context.String(constant.BaseUrl)
|
||||
var token = context.String(constant.Token)
|
||||
|
@ -27,6 +28,7 @@ func DeleteJobs() *cli.Command {
|
|||
var page = context.Int(constant.Page)
|
||||
var perPage = context.Int(constant.PerPage)
|
||||
var iidRanges = context.StringSlice(constant.IIdRange)
|
||||
var allowFailure = context.Bool(constant.AllowFailure)
|
||||
fmt.Println(iidRanges)
|
||||
|
||||
gitClient, err := gitlab.NewClient(token, gitlab.WithBaseURL(baseUrl))
|
||||
|
@ -45,7 +47,7 @@ func DeleteJobs() *cli.Command {
|
|||
return nil
|
||||
}
|
||||
|
||||
err = DeleteJobsRecursion(gitClient, id, page, perPage, sortStr, iids)
|
||||
err = DeleteJobsRecursion(gitClient, id, page, perPage, sortStr, iids, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -55,7 +57,7 @@ func DeleteJobs() *cli.Command {
|
|||
}
|
||||
}
|
||||
|
||||
func DeleteJobsRecursion(gitClient *gitlab.Client, id interface{}, page int, perPage int, sort string, iids []int) error {
|
||||
func DeleteJobsRecursion(gitClient *gitlab.Client, id interface{}, page int, perPage int, sort string, iids []int, allowFailure bool) error {
|
||||
|
||||
pipelineInfos, response, err := pipelines.ListProjectPipelines(gitClient, id, page, perPage, sort)
|
||||
|
||||
|
@ -78,26 +80,26 @@ func DeleteJobsRecursion(gitClient *gitlab.Client, id interface{}, page int, per
|
|||
if iidsMin == pipelineInfo.IID {
|
||||
// 等于最小值,删除最小值
|
||||
iids = iids[1:]
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfo.ID, 1, 100)
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfo.ID, 1, 100, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if pipelineInfo.IID == iidsMax {
|
||||
// 等于最大值
|
||||
iids = iids[:len(iids)-1]
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfo.ID, 1, 100)
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfo.ID, 1, 100, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if iidsMin < pipelineInfo.IID {
|
||||
// 大于最小值
|
||||
err = jobsForExecute(&iids, pipelineInfo.IID, gitClient, id, pipelineInfo.ID)
|
||||
err = jobsForExecute(&iids, pipelineInfo.IID, gitClient, id, pipelineInfo.ID, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if pipelineInfo.IID < iidsMax {
|
||||
// 小于最大值
|
||||
err = jobsForExecute(&iids, pipelineInfo.IID, gitClient, id, pipelineInfo.ID)
|
||||
err = jobsForExecute(&iids, pipelineInfo.IID, gitClient, id, pipelineInfo.ID, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -115,7 +117,7 @@ func DeleteJobsRecursion(gitClient *gitlab.Client, id interface{}, page int, per
|
|||
}
|
||||
|
||||
if len(pipelineInfos) > 0 {
|
||||
err := DeleteJobsRecursion(gitClient, id, page+1, perPage, sort, iids)
|
||||
err := DeleteJobsRecursion(gitClient, id, page+1, perPage, sort, iids, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -124,13 +126,16 @@ func DeleteJobsRecursion(gitClient *gitlab.Client, id interface{}, page int, per
|
|||
return nil
|
||||
}
|
||||
|
||||
func jobsForExecute(iids *[]int, pipelineInfoIId int, gitClient *gitlab.Client, id interface{}, pipelineInfoId int) error {
|
||||
func jobsForExecute(iids *[]int, pipelineInfoIId int, gitClient *gitlab.Client, id interface{}, pipelineInfoId int, allowFailure bool) error {
|
||||
for i := 0; i < len(*iids); i++ {
|
||||
if (*iids)[i] == pipelineInfoIId {
|
||||
fmt.Printf("数组中包含%d\n", pipelineInfoIId)
|
||||
*iids = append((*iids)[:i], (*iids)[i+1:]...)
|
||||
err := ExecuteDeleteJobs(gitClient, id, pipelineInfoId, 1, 100)
|
||||
err := ExecuteDeleteJobs(gitClient, id, pipelineInfoId, 1, 100, allowFailure)
|
||||
if err != nil {
|
||||
if allowFailure {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
break
|
||||
|
@ -139,7 +144,7 @@ func jobsForExecute(iids *[]int, pipelineInfoIId int, gitClient *gitlab.Client,
|
|||
return nil
|
||||
}
|
||||
|
||||
func ExecuteDeleteJobs(gitClient *gitlab.Client, id interface{}, pipelineInfoId int, page int, perPage int) error {
|
||||
func ExecuteDeleteJobs(gitClient *gitlab.Client, id interface{}, pipelineInfoId int, page int, perPage int, allowFailure bool) error {
|
||||
fmt.Printf("执行删除 %d \n", pipelineInfoId)
|
||||
|
||||
opt := &gitlab.ListJobsOptions{
|
||||
|
@ -160,13 +165,16 @@ func ExecuteDeleteJobs(gitClient *gitlab.Client, id interface{}, pipelineInfoId
|
|||
|
||||
_, response, err = gitClient.Jobs.EraseJob(id, job.ID)
|
||||
if err != nil {
|
||||
if allowFailure {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
log.Printf("Delete Project %s Job %d Response StatusCode: %d\n", id, job.ID, response.Response.StatusCode)
|
||||
}
|
||||
|
||||
if len(jobs) == perPage {
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfoId, page+1, perPage)
|
||||
err = ExecuteDeleteJobs(gitClient, id, pipelineInfoId, page+1, perPage, allowFailure)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -11,7 +11,8 @@ func Delete() *cli.Command {
|
|||
Name: "mix-delete",
|
||||
Aliases: []string{"mix-rm"},
|
||||
Usage: "删除(混合命令,多接口命令)",
|
||||
Flags: append(flag.Common(), flag.Sort(), flag.Page(), flag.PerPage(), flag.Id(false), flag.IIdRange(false)),
|
||||
Flags: append(flag.Common(), flag.Sort(), flag.Page(), flag.PerPage(), flag.Id(false),
|
||||
flag.IIdRange(false), flag.AllowFailure()),
|
||||
Subcommands: []*cli.Command{
|
||||
DeleteArtifacts(),
|
||||
DeleteAllArtifacts(),
|
||||
|
|
|
@ -15,12 +15,13 @@ func List() *cli.Command {
|
|||
return &cli.Command{
|
||||
Name: "list",
|
||||
Usage: "列出所有项目",
|
||||
Flags: append(flag.Common(), flag.Sort(), flag.Page(), flag.PerPage(), flag.PrintJson(), flag.PrintTime(),
|
||||
flag.Search(), flag.SearchNamespaces(),
|
||||
Flags: append(flag.Common(), flag.Owned(true), flag.Sort(), flag.Page(), flag.PerPage(),
|
||||
flag.PrintJson(), flag.PrintTime(), flag.Search(), flag.SearchNamespaces(),
|
||||
flag.OrderBy(OrderByUsage)),
|
||||
Action: func(context *cli.Context) error {
|
||||
var baseUrl = context.String(constant.BaseUrl)
|
||||
var token = context.String(constant.Token)
|
||||
var owned = context.Bool(constant.Owned)
|
||||
var sort = context.String(constant.Sort)
|
||||
var page = context.Int(constant.Page)
|
||||
var perPage = context.Int(constant.PerPage)
|
||||
|
@ -43,6 +44,7 @@ func List() *cli.Command {
|
|||
Sort: &sort,
|
||||
Search: &search,
|
||||
SearchNamespaces: &searchNamespaces,
|
||||
Owned: &owned,
|
||||
OrderBy: &orderBy,
|
||||
}
|
||||
projects, response, err := gitClient.Projects.ListProjects(opt)
|
||||
|
|
|
@ -18,8 +18,8 @@ func Projects() *cli.Command {
|
|||
Name: "project",
|
||||
Aliases: []string{"projects", "p"},
|
||||
Usage: "项目 API,中文文档:https://docs.gitlab.cn/jh/api/projects.html",
|
||||
Flags: append(flag.Common(), flag.Sort(), flag.Page(), flag.PerPage(), flag.PrintJson(), flag.PrintTime(),
|
||||
flag.Search(), flag.SearchNamespaces(),
|
||||
Flags: append(flag.Common(), flag.Owned(false), flag.Sort(), flag.Page(), flag.PerPage(),
|
||||
flag.PrintJson(), flag.PrintTime(), flag.Search(), flag.SearchNamespaces(),
|
||||
flag.OrderBy(OrderByUsage)),
|
||||
Subcommands: []*cli.Command{
|
||||
List(),
|
||||
|
|
Loading…
Reference in New Issue