未验证 提交 6fe9fc2f 编写于 作者: JenkinsInChina's avatar JenkinsInChina 提交者: GitHub

Improve plugin upload command (#440)

* Improve plugin upload command

* Optimize code lines

* Update root.go

* Format code lines
上级 6d696925
......@@ -5,7 +5,6 @@ import (
"github.com/jenkins-zh/jenkins-cli/app/cmd/common"
"github.com/jenkins-zh/jenkins-cli/app/i18n"
"io/ioutil"
"log"
"net/http"
"os"
"path/filepath"
......@@ -90,14 +89,16 @@ var pluginUploadCmd = &cobra.Command{
Example: ` jcli plugin upload --remote https://server/sample.hpi
jcli plugin upload sample.hpi
jcli plugin upload sample.hpi --show-progress=false`,
PreRun: func(cmd *cobra.Command, args []string) {
PreRunE: func(cmd *cobra.Command, args []string) (err error) {
if pluginUploadOption.Remote != "" {
file, err := ioutil.TempFile(".", "jcli-plugin")
if err != nil {
log.Fatal(err)
var file *os.File
if file, err = ioutil.TempFile(".", "jcli-plugin"); err != nil {
return
}
defer os.Remove(file.Name())
defer func() {
_ = os.Remove(file.Name())
}()
if pluginUploadOption.RemoteJenkins != "" {
if jenkins := findJenkinsByName(pluginUploadOption.RemoteJenkins); jenkins != nil {
......@@ -116,12 +117,12 @@ jcli plugin upload sample.hpi --show-progress=false`,
Debug: rootOptions.Debug,
}
if err := downloader.DownloadFile(); err != nil {
log.Fatal(err)
}
err = downloader.DownloadFile()
} else if len(args) == 0 {
if !pluginUploadOption.SkipPreHook {
executePreCmd(cmd, args, os.Stdout)
if err = executePreCmd(cmd, args, os.Stdout); err != nil {
return
}
}
path, _ := os.Getwd()
......@@ -133,13 +134,15 @@ jcli plugin upload sample.hpi --show-progress=false`,
} else {
pluginUploadOption.pluginFilePath = args[0]
}
return
},
PostRun: func(cmd *cobra.Command, args []string) {
PostRunE: func(cmd *cobra.Command, args []string) (err error) {
if pluginUploadOption.SkipPostHook {
return
}
executePostCmd(cmd, args, cmd.OutOrStdout())
err = executePostCmd(cmd, args, cmd.OutOrStdout())
return
},
ValidArgsFunction: pluginUploadOption.HPICompletion,
RunE: func(cmd *cobra.Command, _ []string) (err error) {
......@@ -154,7 +157,9 @@ jcli plugin upload sample.hpi --show-progress=false`,
getCurrentJenkinsAndClient(&(jclient.JenkinsCore))
if pluginUploadOption.Remote != "" {
defer os.Remove(pluginUploadOption.pluginFilePath)
defer func() {
_ = os.Remove(pluginUploadOption.pluginFilePath)
}()
}
err = jclient.Upload(pluginUploadOption.pluginFilePath)
......
package cmd
import (
"bufio"
"fmt"
"github.com/google/go-github/v29/github"
"github.com/jenkins-zh/jenkins-cli/app/cmd/common"
"golang.org/x/text/encoding/simplifiedchinese"
"io"
"log"
"os"
......@@ -293,6 +295,7 @@ func executePreCmd(cmd *cobra.Command, _ []string, writer io.Writer) (err error)
continue
}
logger.Debug("execute pre-cmd", zap.String("command", hook.Command))
if err = execute(hook.Command, writer); err != nil {
return
}
......@@ -313,6 +316,7 @@ func executePostCmd(cmd *cobra.Command, _ []string, writer io.Writer) (err error
continue
}
logger.Debug("execute post-cmd", zap.String("command", hook.Command))
if err = execute(hook.Command, writer); err != nil {
return
}
......@@ -322,18 +326,66 @@ func executePostCmd(cmd *cobra.Command, _ []string, writer io.Writer) (err error
func execute(command string, writer io.Writer) (err error) {
array := strings.Split(command, " ")
cmd := exec.Command(array[0], array[1:]...)
if err = cmd.Start(); err == nil {
if err = cmd.Wait(); err == nil {
var data []byte
if data, err = cmd.Output(); err == nil {
_, _ = writer.Write(data)
}
err = execCommand(array[0], array[1:], writer)
return
}
const (
UTF8 = "UTF-8"
GB18030 = "GB18030"
)
func execCommand(commandName string, params []string, writer io.Writer) (err error) {
cmd := exec.Command(commandName, params...)
var stdout io.ReadCloser
var stderr io.ReadCloser
if stdout, err = cmd.StdoutPipe(); err != nil {
return
}
if stderr, err = cmd.StderrPipe(); err != nil {
return
}
go handlerErr(stderr, writer)
if err = cmd.Start(); err != nil {
return
}
in := bufio.NewScanner(stdout)
for in.Scan() {
cmdRe := ConvertByte2String(in.Bytes(), "GB18030")
if _, err = writer.Write([]byte(cmdRe + "\n")); err != nil {
return
}
}
err = cmd.Wait()
return
}
func handlerErr(errReader io.ReadCloser, writer io.Writer) {
in := bufio.NewScanner(errReader)
for in.Scan() {
cmdRe := ConvertByte2String(in.Bytes(), "GB18030")
_, _ = writer.Write([]byte(cmdRe + "\n"))
}
}
// ConvertByte2String convert byte to string
func ConvertByte2String(byte []byte, charset string) string {
var str string
switch charset {
case GB18030:
var decodeBytes, _ = simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
str = string(decodeBytes)
case UTF8:
fallthrough
default:
str = string(byte)
}
return str
}
// Deprecated, please replace this with getCurrentJenkinsAndClient
func getCurrentJenkinsAndClientOrDie(jclient *client.JenkinsCore) (jenkins *JenkinsServer) {
jenkins = getCurrentJenkinsFromOptionsOrDie()
......
......@@ -18,7 +18,7 @@ type PrintOption struct {
// SelfUpgradeOption is the option for self upgrade command
type SelfUpgradeOption struct {
ShowProgress bool
Privilege bool
Privilege bool
GitHubClient *github.Client
RoundTripper http.RoundTripper
......
......@@ -57,9 +57,9 @@ type IdentityBuild struct {
// IdentityCause carray a identity cause
type IdentityCause struct {
UUID string `json:"uuid"`
UUID string `json:"uuid"`
ShortDescription string `json:"shortDescription"`
Message string
Message string
}
// BuildAndReturn trigger a job then returns the build info
......
......@@ -29,6 +29,7 @@ require (
github.com/zalando/go-keyring v0.0.0-20200121091418-667557018717
go.uber.org/zap v1.15.0
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59
golang.org/x/text v0.3.2
gopkg.in/src-d/go-git.v4 v4.13.1
gopkg.in/yaml.v2 v2.3.0
moul.io/http2curl v1.0.0
......
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/AlecAivazis/survey/v2 v2.0.7 h1:+f825XHLse/hWd2tE/V5df04WFGimk34Eyg/z35w/rc=
github.com/AlecAivazis/survey/v2 v2.0.7/go.mod h1:mlizQTaPjnR4jcpwRSaSlkbsRfYFEyKgLQvYTzxxiHA=
github.com/AlecAivazis/survey/v2 v2.0.8 h1:zVjWKN+JIAfmrq6nGWG3DfLS8ypEBhxYy0p7FM+riFk=
github.com/AlecAivazis/survey/v2 v2.0.8/go.mod h1:9FJRdMdDm8rnT+zHVbvQT2RTSTLq0Ttd6q3Vl2fahjk=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
......@@ -158,8 +156,6 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y=
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
......@@ -190,7 +186,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册