Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jenkinsci
sub-group
Jenkins Cli
提交
d5a0ac35
J
Jenkins Cli
项目概览
jenkinsci
/
sub-group
/
Jenkins Cli
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jenkins Cli
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d5a0ac35
编写于
7月 18, 2019
作者:
LinuxSuRen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support to build a job with parameters
上级
070ad591
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
111 addition
and
2 deletion
+111
-2
app/cmd/job_build.go
app/cmd/job_build.go
+41
-1
client/job.go
client/job.go
+70
-1
未找到文件。
app/cmd/job_build.go
浏览文件 @
d5a0ac35
package
cmd
package
cmd
import
(
import
(
"encoding/json"
"fmt"
"fmt"
"log"
"github.com/AlecAivazis/survey"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
)
)
...
@@ -40,6 +43,43 @@ var jobBuildCmd = &cobra.Command{
...
@@ -40,6 +43,43 @@ var jobBuildCmd = &cobra.Command{
jclient
.
Proxy
=
jenkins
.
Proxy
jclient
.
Proxy
=
jenkins
.
Proxy
jclient
.
ProxyAuth
=
jenkins
.
ProxyAuth
jclient
.
ProxyAuth
=
jenkins
.
ProxyAuth
jclient
.
Build
(
jobOption
.
Name
)
paramDefs
:=
[]
client
.
ParameterDefinition
{}
hasParam
:=
false
if
job
,
err
:=
jclient
.
GetJob
(
jobOption
.
Name
);
err
==
nil
{
fmt
.
Println
(
job
.
Property
)
if
len
(
job
.
Property
)
!=
0
{
for
_
,
pro
:=
range
job
.
Property
{
if
len
(
pro
.
ParameterDefinitions
)
==
0
{
continue
}
if
data
,
err
:=
json
.
MarshalIndent
(
pro
.
ParameterDefinitions
,
""
,
" "
);
err
==
nil
{
content
:=
string
(
data
)
prompt
:=
&
survey
.
Editor
{
Message
:
"Edit your pipeline script"
,
FileName
:
"*.sh"
,
Default
:
content
,
AppendDefault
:
true
,
}
if
err
=
survey
.
AskOne
(
prompt
,
&
content
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
if
err
=
json
.
Unmarshal
([]
byte
(
content
),
&
paramDefs
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
hasParam
=
true
break
}
}
}
if
hasParam
{
jclient
.
BuildWithParams
(
jobOption
.
Name
,
paramDefs
)
}
else
{
jclient
.
Build
(
jobOption
.
Name
)
}
},
},
}
}
client/job.go
浏览文件 @
d5a0ac35
...
@@ -78,7 +78,7 @@ func (q *JobClient) Build(jobName string) (err error) {
...
@@ -78,7 +78,7 @@ func (q *JobClient) Build(jobName string) (err error) {
code
:=
response
.
StatusCode
code
:=
response
.
StatusCode
var
data
[]
byte
var
data
[]
byte
data
,
err
=
ioutil
.
ReadAll
(
response
.
Body
)
data
,
err
=
ioutil
.
ReadAll
(
response
.
Body
)
if
code
==
20
0
{
if
code
==
20
1
{
// Jenkins will send redirect by this api
fmt
.
Println
(
"build successfully"
)
fmt
.
Println
(
"build successfully"
)
}
else
{
}
else
{
log
.
Fatal
(
string
(
data
))
log
.
Fatal
(
string
(
data
))
...
@@ -131,6 +131,56 @@ func (q *JobClient) GetBuild(jobName string, id int) (job *JobBuild, err error)
...
@@ -131,6 +131,56 @@ func (q *JobClient) GetBuild(jobName string, id int) (job *JobBuild, err error)
return
return
}
}
func
(
q
*
JobClient
)
BuildWithParams
(
jobName
string
,
parameters
[]
ParameterDefinition
)
(
err
error
)
{
jobItems
:=
strings
.
Split
(
jobName
,
" "
)
path
:=
""
for
_
,
item
:=
range
jobItems
{
path
=
fmt
.
Sprintf
(
"%s/job/%s"
,
path
,
item
)
}
api
:=
fmt
.
Sprintf
(
"%s/%s/build"
,
q
.
URL
,
path
)
var
(
req
*
http
.
Request
response
*
http
.
Response
)
var
paramJSON
[]
byte
if
len
(
parameters
)
==
1
{
paramJSON
,
err
=
json
.
Marshal
(
parameters
[
0
])
}
else
{
paramJSON
,
err
=
json
.
Marshal
(
parameters
)
}
formData
:=
url
.
Values
{
"json"
:
{
fmt
.
Sprintf
(
"{
\"
parameter
\"
: %s}"
,
string
(
paramJSON
))}}
payload
:=
strings
.
NewReader
(
formData
.
Encode
())
req
,
err
=
http
.
NewRequest
(
"POST"
,
api
,
payload
)
if
err
==
nil
{
q
.
AuthHandle
(
req
)
}
else
{
return
}
if
err
=
q
.
CrumbHandle
(
req
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
req
.
Header
.
Add
(
"Content-Type"
,
"application/x-www-form-urlencoded"
)
client
:=
q
.
GetClient
()
if
response
,
err
=
client
.
Do
(
req
);
err
==
nil
{
code
:=
response
.
StatusCode
var
data
[]
byte
data
,
err
=
ioutil
.
ReadAll
(
response
.
Body
)
if
code
==
201
{
// Jenkins will send redirect by this api
fmt
.
Println
(
"build successfully"
)
}
else
{
log
.
Fatal
(
string
(
data
))
}
}
else
{
log
.
Fatal
(
err
)
}
return
}
func
(
q
*
JobClient
)
GetJob
(
name
string
)
(
job
*
Job
,
err
error
)
{
func
(
q
*
JobClient
)
GetJob
(
name
string
)
(
job
*
Job
,
err
error
)
{
jobItems
:=
strings
.
Split
(
name
,
" "
)
jobItems
:=
strings
.
Split
(
name
,
" "
)
path
:=
""
path
:=
""
...
@@ -339,6 +389,25 @@ type Job struct {
...
@@ -339,6 +389,25 @@ type Job struct {
NextBuildNumber
int
NextBuildNumber
int
URL
string
URL
string
Buildable
bool
Buildable
bool
Property
[]
ParametersDefinitionProperty
}
type
ParametersDefinitionProperty
struct
{
ParameterDefinitions
[]
ParameterDefinition
}
type
ParameterDefinition
struct
{
Description
string
Name
string
`json:"name"`
Type
string
Value
string
`json:"value"`
DefaultParameterValue
DefaultParameterValue
}
type
DefaultParameterValue
struct
{
Description
string
Value
string
}
}
type
SimpleJobBuild
struct
{
type
SimpleJobBuild
struct
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录