center_download.go 2.3 KB
Newer Older
1 2 3
package cmd

import (
LinuxSuRen's avatar
LinuxSuRen 已提交
4
	"fmt"
5
	"go.uber.org/zap"
6
	"net/http"
LinuxSuRen's avatar
LinuxSuRen 已提交
7 8
	"os"
	"path/filepath"
9

10
	"github.com/jenkins-zh/jenkins-cli/app/i18n"
LinuxSuRen's avatar
LinuxSuRen 已提交
11

12 13 14 15 16 17
	"github.com/jenkins-zh/jenkins-cli/client"
	"github.com/spf13/cobra"
)

// CenterDownloadOption as the options of download command
type CenterDownloadOption struct {
18 19 20
	LTS     bool
	Mirror  string
	Version string
21

22
	Output       string
LinuxSuRen's avatar
LinuxSuRen 已提交
23
	ShowProgress bool
24 25 26 27 28 29 30 31

	RoundTripper http.RoundTripper
}

var centerDownloadOption CenterDownloadOption

func init() {
	centerCmd.AddCommand(centerDownloadCmd)
32 33
	centerDownloadCmd.Flags().BoolVarP(&centerDownloadOption.LTS, "lts", "", true,
		i18n.T("If you want to download Jenkins as LTS"))
34
	centerDownloadCmd.Flags().StringVarP(&centerDownloadOption.Version, "war-version", "", "",
35 36 37 38 39 40 41
		i18n.T("Version of the Jenkins which you want to download"))
	centerDownloadCmd.Flags().StringVarP(&centerDownloadOption.Mirror, "mirror", "m", "default",
		i18n.T("The mirror site of Jenkins"))
	centerDownloadCmd.Flags().BoolVarP(&centerDownloadOption.ShowProgress, "progress", "p", true,
		i18n.T("If you want to show the download progress"))
	centerDownloadCmd.Flags().StringVarP(&centerDownloadOption.Output, "output", "o", "jenkins.war",
		i18n.T("The file of output"))
42 43 44 45
}

var centerDownloadCmd = &cobra.Command{
	Use:   "download",
46 47
	Short: i18n.T("Download Jenkins"),
	Long:  i18n.T(`Download Jenkins from a mirror site. You can get more mirror sites from https://jenkins-zh.cn/tutorial/management/mirror/`),
LinuxSuRen's avatar
LinuxSuRen 已提交
48 49 50 51
	RunE: func(cmd *cobra.Command, _ []string) error {
		return centerDownloadOption.DownloadJenkins()
	},
}
52

LinuxSuRen's avatar
LinuxSuRen 已提交
53 54 55 56 57 58
// DownloadJenkins download the Jenkins
func (c *CenterDownloadOption) DownloadJenkins() (err error) {
	parentDir := filepath.Dir(c.Output)
	if err = os.MkdirAll(parentDir, os.FileMode(0755)); err != nil {
		return
	}
59

LinuxSuRen's avatar
LinuxSuRen 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
	mirrorSite := getMirror(c.Mirror)
	if mirrorSite == "" {
		err = fmt.Errorf("cannot found Jenkins mirror by: %s", c.Mirror)
		return
	}

	jClient := &client.UpdateCenterManager{
		MirrorSite: mirrorSite,
		JenkinsCore: client.JenkinsCore{
			RoundTripper: c.RoundTripper,
		},
		LTS:          c.LTS,
		Version:      c.Version,
		Output:       c.Output,
		ShowProgress: c.ShowProgress,
	}

77 78 79
	jenkinsWarURL := jClient.GetJenkinsWarURL()
	logger.Info("prepare to download jenkins.war", zap.String("URL", jenkinsWarURL))

LinuxSuRen's avatar
LinuxSuRen 已提交
80 81
	err = jClient.DownloadJenkins()
	return
82
}