Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KubeSphere
kubesphere
提交
46e06487
K
kubesphere
项目概览
KubeSphere
/
kubesphere
通知
138
Star
32
Fork
5
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kubesphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
46e06487
编写于
3月 24, 2021
作者:
K
KubeSphere CI Bot
提交者:
GitHub
3月 24, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3522 from LinuxSuRen/fix-pipeline-runs-paging
Fix the Pipeline runs paging issues caused by BlueOcean plugin
上级
8d968055
a2ef07ed
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
172 addition
and
5 deletion
+172
-5
pkg/simple/client/devops/jenkins/pipeline.go
pkg/simple/client/devops/jenkins/pipeline.go
+66
-5
pkg/simple/client/devops/jenkins/pipeline_test.go
pkg/simple/client/devops/jenkins/pipeline_test.go
+106
-0
未找到文件。
pkg/simple/client/devops/jenkins/pipeline.go
浏览文件 @
46e06487
...
...
@@ -25,6 +25,7 @@ import (
"kubesphere.io/kubesphere/pkg/simple/client/devops"
"net/http"
"net/url"
"strconv"
"strings"
"time"
)
...
...
@@ -169,6 +170,14 @@ func (p *Pipeline) GetPipelineRun() (*devops.PipelineRun, error) {
}
func
(
p
*
Pipeline
)
ListPipelineRuns
()
(
*
devops
.
PipelineRunList
,
error
)
{
// prefer to use listPipelineRunsByRemotePaging once the corresponding issues from BlueOcean fixed
return
p
.
listPipelineRunsByLocalPaging
()
}
// listPipelineRunsByRemotePaging get the pipeline runs with pagination by remote (Jenkins BlueOcean plugin)
// get the pagination information from the server side is better than the local side, but the API has some issues
// see also https://github.com/kubesphere/kubesphere/issues/3507
func
(
p
*
Pipeline
)
listPipelineRunsByRemotePaging
()
(
*
devops
.
PipelineRunList
,
error
)
{
res
,
err
:=
p
.
Jenkins
.
SendPureRequest
(
p
.
Path
,
p
.
HttpParameters
)
if
err
!=
nil
{
klog
.
Error
(
err
)
...
...
@@ -190,13 +199,65 @@ func (p *Pipeline) ListPipelineRuns() (*devops.PipelineRunList, error) {
return
&
pipelineRunList
,
err
}
func
(
p
*
Pipeline
)
searchPipelineRunsCount
()
(
int
,
error
)
{
// listPipelineRunsByLocalPaging should be a temporary solution
// see also https://github.com/kubesphere/kubesphere/issues/3507
func
(
p
*
Pipeline
)
listPipelineRunsByLocalPaging
()
(
runList
*
devops
.
PipelineRunList
,
err
error
)
{
desiredStart
,
desiredLimit
:=
p
.
parsePaging
()
var
pageUrl
*
url
.
URL
// get all Pipeline runs
if
pageUrl
,
err
=
p
.
resetPaging
(
0
,
10000
);
err
!=
nil
{
return
}
res
,
err
:=
p
.
Jenkins
.
SendPureRequest
(
pageUrl
.
Path
,
p
.
HttpParameters
)
if
err
!=
nil
{
klog
.
Error
(
err
)
return
nil
,
err
}
runList
=
&
devops
.
PipelineRunList
{
Items
:
make
([]
devops
.
PipelineRun
,
0
),
}
if
err
=
json
.
Unmarshal
(
res
,
&
runList
.
Items
);
err
!=
nil
{
klog
.
Error
(
err
)
return
nil
,
err
}
// set the total count number
runList
.
Total
=
len
(
runList
.
Items
)
// keep the desired data/
if
desiredStart
+
1
>=
runList
.
Total
{
// beyond the boundary, return an empty
return
}
endIndex
:=
runList
.
Total
if
desiredStart
+
desiredLimit
<
endIndex
{
endIndex
=
desiredStart
+
desiredLimit
}
runList
.
Items
=
runList
.
Items
[
desiredStart
:
endIndex
]
return
}
// resetPaging reset the paging setting from request, support start, limit
func
(
p
*
Pipeline
)
resetPaging
(
start
,
limit
int
)
(
path
*
url
.
URL
,
err
error
)
{
query
,
_
:=
ParseJenkinsQuery
(
p
.
HttpParameters
.
Url
.
RawQuery
)
query
.
Set
(
"start"
,
"0"
)
query
.
Set
(
"limit"
,
"1000"
)
query
.
Set
(
"depth"
,
"-1"
)
query
.
Set
(
"start"
,
strconv
.
Itoa
(
start
))
query
.
Set
(
"limit"
,
strconv
.
Itoa
(
limit
))
p
.
HttpParameters
.
Url
.
RawQuery
=
query
.
Encode
()
u
,
err
:=
url
.
Parse
(
p
.
Path
)
path
,
err
=
url
.
Parse
(
p
.
Path
)
return
}
func
(
p
*
Pipeline
)
parsePaging
()
(
start
,
limit
int
)
{
query
,
_
:=
ParseJenkinsQuery
(
p
.
HttpParameters
.
Url
.
RawQuery
)
start
,
_
=
strconv
.
Atoi
(
query
.
Get
(
"start"
))
limit
,
_
=
strconv
.
Atoi
(
query
.
Get
(
"limit"
))
return
}
func
(
p
*
Pipeline
)
searchPipelineRunsCount
()
(
int
,
error
)
{
u
,
err
:=
p
.
resetPaging
(
0
,
1000
)
if
err
!=
nil
{
return
0
,
err
}
...
...
pkg/simple/client/devops/jenkins/pipeline_test.go
0 → 100644
浏览文件 @
46e06487
package
jenkins
import
(
"fmt"
"github.com/stretchr/testify/assert"
"kubesphere.io/kubesphere/pkg/simple/client/devops"
"net/url"
"strconv"
"testing"
)
func
TestResetPaging
(
t
*
testing
.
T
)
{
table
:=
[]
struct
{
path
string
rawQuery
string
start
int
limit
int
hasErr
bool
message
string
}{{
start
:
0
,
limit
:
10
,
hasErr
:
false
,
message
:
"without query, should no errors"
,
},
{
path
:
"/fake/path"
,
rawQuery
:
"?start=1&limit1"
,
start
:
0
,
limit
:
10
,
hasErr
:
false
,
message
:
"without a query"
,
},
{
path
:
"/fake/path"
,
rawQuery
:
"?start=1&limit1"
,
start
:
3
,
limit
:
13
,
hasErr
:
false
,
message
:
"without a query"
,
}}
for
index
,
item
:=
range
table
{
pip
:=
&
Pipeline
{
Path
:
item
.
path
,
HttpParameters
:
&
devops
.
HttpParameters
{
Url
:
&
url
.
URL
{
Path
:
item
.
path
,
RawQuery
:
item
.
rawQuery
,
},
},
}
resultPath
,
err
:=
pip
.
resetPaging
(
item
.
start
,
item
.
limit
)
if
item
.
hasErr
{
assert
.
NotNil
(
t
,
err
,
printTestMessage
(
index
,
item
.
message
))
}
else
{
assert
.
Nil
(
t
,
err
,
printTestMessage
(
index
,
item
.
message
))
assert
.
Equal
(
t
,
item
.
path
,
resultPath
.
Path
,
printTestMessage
(
index
,
item
.
message
))
assert
.
Equal
(
t
,
strconv
.
Itoa
(
item
.
start
),
pip
.
HttpParameters
.
Url
.
Query
()
.
Get
(
"start"
),
printTestMessage
(
index
,
item
.
message
))
assert
.
Equal
(
t
,
strconv
.
Itoa
(
item
.
limit
),
pip
.
HttpParameters
.
Url
.
Query
()
.
Get
(
"limit"
),
printTestMessage
(
index
,
item
.
message
))
}
}
}
func
TestParsePaging
(
t
*
testing
.
T
)
{
table
:=
[]
struct
{
targetUrl
string
start
int
limit
int
message
string
}{{
targetUrl
:
"http://localhost?start=0&limit=0"
,
start
:
0
,
limit
:
0
,
message
:
"should be success"
,
},
{
targetUrl
:
"http://localhost?start=1&limit=10"
,
start
:
1
,
limit
:
10
,
message
:
"should be success"
,
},
{
targetUrl
:
"http://localhost?start=5&limit=55"
,
start
:
5
,
limit
:
55
,
message
:
"should be success"
,
}}
for
index
,
item
:=
range
table
{
pipUrl
,
_
:=
url
.
Parse
(
item
.
targetUrl
)
pip
:=
&
Pipeline
{
HttpParameters
:
&
devops
.
HttpParameters
{
Url
:
pipUrl
,
},
}
resultStart
,
resultLimit
:=
pip
.
parsePaging
()
assert
.
Equal
(
t
,
item
.
start
,
resultStart
,
printTestMessage
(
index
,
item
.
message
))
assert
.
Equal
(
t
,
item
.
limit
,
resultLimit
,
printTestMessage
(
index
,
item
.
message
))
}
}
func
printTestMessage
(
index
int
,
message
string
)
string
{
return
fmt
.
Sprintf
(
"index: %d, message: %s"
,
index
,
message
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录