mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-11-30 02:38:17 +08:00
support set maven user setting config
This commit is contained in:
parent
8c47cf8b28
commit
8c912b2b22
@ -25,6 +25,11 @@ import (
|
|||||||
// ClusterInterface -
|
// ClusterInterface -
|
||||||
type ClusterInterface interface {
|
type ClusterInterface interface {
|
||||||
GetClusterInfo(w http.ResponseWriter, r *http.Request)
|
GetClusterInfo(w http.ResponseWriter, r *http.Request)
|
||||||
|
MavenSettingList(w http.ResponseWriter, r *http.Request)
|
||||||
|
MavenSettingAdd(w http.ResponseWriter, r *http.Request)
|
||||||
|
MavenSettingUpdate(w http.ResponseWriter, r *http.Request)
|
||||||
|
MavenSettingDelete(w http.ResponseWriter, r *http.Request)
|
||||||
|
MavenSettingDetail(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
|
|
||||||
//TenantInterface interface
|
//TenantInterface interface
|
||||||
|
@ -82,6 +82,11 @@ func (v2 *V2) eventsRouter() chi.Router {
|
|||||||
func (v2 *V2) clusterRouter() chi.Router {
|
func (v2 *V2) clusterRouter() chi.Router {
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
r.Get("/", controller.GetManager().GetClusterInfo)
|
r.Get("/", controller.GetManager().GetClusterInfo)
|
||||||
|
r.Get("/builder/mavensetting", controller.GetManager().MavenSettingList)
|
||||||
|
r.Post("/builder/mavensetting", controller.GetManager().MavenSettingAdd)
|
||||||
|
r.Get("/builder/mavensetting/{name}", controller.GetManager().MavenSettingDetail)
|
||||||
|
r.Put("/builder/mavensetting/{name}", controller.GetManager().MavenSettingUpdate)
|
||||||
|
r.Delete("/builder/mavensetting/{name}", controller.GetManager().MavenSettingDelete)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/go-chi/chi"
|
||||||
"github.com/goodrain/rainbond/api/handler"
|
"github.com/goodrain/rainbond/api/handler"
|
||||||
|
|
||||||
httputil "github.com/goodrain/rainbond/util/http"
|
httputil "github.com/goodrain/rainbond/util/http"
|
||||||
@ -42,3 +43,61 @@ func (t *ClusterController) GetClusterInfo(w http.ResponseWriter, r *http.Reques
|
|||||||
|
|
||||||
httputil.ReturnSuccess(r, w, nodes)
|
httputil.ReturnSuccess(r, w, nodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MavenSettingList maven setting list
|
||||||
|
func (t *ClusterController) MavenSettingList(w http.ResponseWriter, r *http.Request) {
|
||||||
|
httputil.ReturnSuccess(r, w, handler.GetClusterHandler().MavenSettingList())
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingAdd maven setting add
|
||||||
|
func (t *ClusterController) MavenSettingAdd(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var set handler.MavenSetting
|
||||||
|
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &set, nil); !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := handler.GetClusterHandler().MavenSettingAdd(&set); err != nil {
|
||||||
|
err.Handle(r, w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
httputil.ReturnSuccess(r, w, &set)
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingUpdate maven setting file update
|
||||||
|
func (t *ClusterController) MavenSettingUpdate(w http.ResponseWriter, r *http.Request) {
|
||||||
|
type SettingUpdate struct {
|
||||||
|
Content string `json:"content" validate:"required"`
|
||||||
|
}
|
||||||
|
var su SettingUpdate
|
||||||
|
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &su, nil); !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
set := &handler.MavenSetting{
|
||||||
|
Name: chi.URLParam(r, "name"),
|
||||||
|
Content: su.Content,
|
||||||
|
}
|
||||||
|
if err := handler.GetClusterHandler().MavenSettingUpdate(set); err != nil {
|
||||||
|
err.Handle(r, w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
httputil.ReturnSuccess(r, w, set)
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingDelete maven setting file delete
|
||||||
|
func (t *ClusterController) MavenSettingDelete(w http.ResponseWriter, r *http.Request) {
|
||||||
|
err := handler.GetClusterHandler().MavenSettingDelete(chi.URLParam(r, "name"))
|
||||||
|
if err != nil {
|
||||||
|
err.Handle(r, w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
httputil.ReturnSuccess(r, w, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingDetail maven setting file delete
|
||||||
|
func (t *ClusterController) MavenSettingDetail(w http.ResponseWriter, r *http.Request) {
|
||||||
|
c, err := handler.GetClusterHandler().MavenSettingDetail(chi.URLParam(r, "name"))
|
||||||
|
if err != nil {
|
||||||
|
err.Handle(r, w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
httputil.ReturnSuccess(r, w, c)
|
||||||
|
}
|
||||||
|
@ -3,11 +3,16 @@ package handler
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/goodrain/rainbond/api/model"
|
"github.com/goodrain/rainbond/api/model"
|
||||||
|
"github.com/goodrain/rainbond/api/util"
|
||||||
|
"github.com/goodrain/rainbond/builder/parser/code"
|
||||||
"github.com/shirou/gopsutil/disk"
|
"github.com/shirou/gopsutil/disk"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
@ -16,16 +21,23 @@ import (
|
|||||||
// ClusterHandler -
|
// ClusterHandler -
|
||||||
type ClusterHandler interface {
|
type ClusterHandler interface {
|
||||||
GetClusterInfo() (*model.ClusterResource, error)
|
GetClusterInfo() (*model.ClusterResource, error)
|
||||||
|
MavenSettingAdd(ms *MavenSetting) *util.APIHandleError
|
||||||
|
MavenSettingList() (re []MavenSetting)
|
||||||
|
MavenSettingUpdate(ms *MavenSetting) *util.APIHandleError
|
||||||
|
MavenSettingDelete(name string) *util.APIHandleError
|
||||||
|
MavenSettingDetail(name string) (*MavenSetting, *util.APIHandleError)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClusterHandler -
|
// NewClusterHandler -
|
||||||
func NewClusterHandler(clientset *kubernetes.Clientset) ClusterHandler {
|
func NewClusterHandler(clientset *kubernetes.Clientset, RbdNamespace string) ClusterHandler {
|
||||||
return &clusterAction{
|
return &clusterAction{
|
||||||
|
namespace: RbdNamespace,
|
||||||
clientset: clientset,
|
clientset: clientset,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type clusterAction struct {
|
type clusterAction struct {
|
||||||
|
namespace string
|
||||||
clientset *kubernetes.Clientset
|
clientset *kubernetes.Clientset
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,3 +196,120 @@ func (c *clusterAction) listPods(nodeName string) (pods []corev1.Pod, err error)
|
|||||||
|
|
||||||
return podList.Items, nil
|
return podList.Items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MavenSetting maven setting
|
||||||
|
type MavenSetting struct {
|
||||||
|
Name string `json:"name" validate:"required"`
|
||||||
|
CreateTime string `json:"create_time"`
|
||||||
|
UpdateTime string `json:"update_time"`
|
||||||
|
Content string `json:"content" validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingList maven setting list
|
||||||
|
func (c *clusterAction) MavenSettingList() (re []MavenSetting) {
|
||||||
|
cms, err := c.clientset.CoreV1().ConfigMaps(c.namespace).List(metav1.ListOptions{
|
||||||
|
LabelSelector: "configtype=mavensetting",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("list maven setting config list failure %s", err.Error())
|
||||||
|
}
|
||||||
|
for _, sm := range cms.Items {
|
||||||
|
info := strings.Split(sm.Name, "-")
|
||||||
|
if len(info) > 0 {
|
||||||
|
re = append(re, MavenSetting{
|
||||||
|
Name: info[len(info)-1],
|
||||||
|
CreateTime: sm.CreationTimestamp.Format(time.RFC3339),
|
||||||
|
UpdateTime: sm.Labels["updateTime"],
|
||||||
|
Content: sm.Data["mavensetting"],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingAdd maven setting add
|
||||||
|
func (c *clusterAction) MavenSettingAdd(ms *MavenSetting) *util.APIHandleError {
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, ms.Name))
|
||||||
|
config := &corev1.ConfigMap{}
|
||||||
|
config.Name = realName
|
||||||
|
config.Namespace = c.namespace
|
||||||
|
config.Labels = map[string]string{
|
||||||
|
"creator": "Rainbond",
|
||||||
|
"configtype": "mavensetting",
|
||||||
|
}
|
||||||
|
config.Annotations = map[string]string{
|
||||||
|
"updateTime": time.Now().Format(time.RFC3339),
|
||||||
|
}
|
||||||
|
config.Data = map[string]string{
|
||||||
|
"mavensetting": ms.Content,
|
||||||
|
}
|
||||||
|
_, err := c.clientset.CoreV1().ConfigMaps(c.namespace).Create(config)
|
||||||
|
if err != nil {
|
||||||
|
if apierrors.IsAlreadyExists(err) {
|
||||||
|
return &util.APIHandleError{Code: 400, Err: fmt.Errorf("setting name is exist")}
|
||||||
|
}
|
||||||
|
logrus.Errorf("create maven setting configmap failure %s", err.Error())
|
||||||
|
return &util.APIHandleError{Code: 500, Err: fmt.Errorf("create setting config failure")}
|
||||||
|
}
|
||||||
|
ms.CreateTime = time.Now().Format(time.RFC3339)
|
||||||
|
ms.UpdateTime = time.Now().Format(time.RFC3339)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingUpdate maven setting file update
|
||||||
|
func (c *clusterAction) MavenSettingUpdate(ms *MavenSetting) *util.APIHandleError {
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, ms.Name))
|
||||||
|
sm, err := c.clientset.CoreV1().ConfigMaps(c.namespace).Get(realName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
if apierrors.IsNotFound(err) {
|
||||||
|
return &util.APIHandleError{Code: 404, Err: fmt.Errorf("setting name is not exist")}
|
||||||
|
}
|
||||||
|
logrus.Errorf("get maven setting config list failure %s", err.Error())
|
||||||
|
return &util.APIHandleError{Code: 400, Err: fmt.Errorf("get setting failure")}
|
||||||
|
}
|
||||||
|
if sm.Data == nil {
|
||||||
|
sm.Data = make(map[string]string)
|
||||||
|
}
|
||||||
|
if sm.Annotations == nil {
|
||||||
|
sm.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
sm.Data["mavensetting"] = ms.Content
|
||||||
|
sm.Annotations["updateTime"] = time.Now().Format(time.RFC3339)
|
||||||
|
if _, err := c.clientset.CoreV1().ConfigMaps(c.namespace).Update(sm); err != nil {
|
||||||
|
logrus.Errorf("update maven setting configmap failure %s", err.Error())
|
||||||
|
return &util.APIHandleError{Code: 500, Err: fmt.Errorf("update setting config failure")}
|
||||||
|
}
|
||||||
|
ms.UpdateTime = sm.Annotations["updateTime"]
|
||||||
|
ms.CreateTime = sm.CreationTimestamp.Format(time.RFC3339)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingDelete maven setting file delete
|
||||||
|
func (c *clusterAction) MavenSettingDelete(name string) *util.APIHandleError {
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
err := c.clientset.CoreV1().ConfigMaps(c.namespace).Delete(realName, &metav1.DeleteOptions{})
|
||||||
|
if err != nil {
|
||||||
|
if apierrors.IsNotFound(err) {
|
||||||
|
return &util.APIHandleError{Code: 404, Err: fmt.Errorf("setting not found")}
|
||||||
|
}
|
||||||
|
logrus.Errorf("delete maven setting config list failure %s", err.Error())
|
||||||
|
return &util.APIHandleError{Code: 500, Err: fmt.Errorf("setting delete failure")}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//MavenSettingDetail maven setting file delete
|
||||||
|
func (c *clusterAction) MavenSettingDetail(name string) (*MavenSetting, *util.APIHandleError) {
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
sm, err := c.clientset.CoreV1().ConfigMaps(c.namespace).Get(realName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("get maven setting config failure %s", err.Error())
|
||||||
|
return nil, &util.APIHandleError{Code: 404, Err: fmt.Errorf("setting not found")}
|
||||||
|
}
|
||||||
|
return &MavenSetting{
|
||||||
|
Name: sm.Name,
|
||||||
|
CreateTime: sm.CreationTimestamp.Format(time.RFC3339),
|
||||||
|
UpdateTime: sm.Annotations["updateTime"],
|
||||||
|
Content: sm.Data["mavensetting"],
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
@ -68,7 +68,7 @@ func InitHandle(conf option.Config,
|
|||||||
batchOperationHandler = CreateBatchOperationHandler(mqClient, operationHandler)
|
batchOperationHandler = CreateBatchOperationHandler(mqClient, operationHandler)
|
||||||
defaultAppRestoreHandler = NewAppRestoreHandler()
|
defaultAppRestoreHandler = NewAppRestoreHandler()
|
||||||
defPodHandler = NewPodHandler(statusCli)
|
defPodHandler = NewPodHandler(statusCli)
|
||||||
defClusterHandler = NewClusterHandler(kubeClient)
|
defClusterHandler = NewClusterHandler(kubeClient, conf.RbdNamespace)
|
||||||
|
|
||||||
defaultVolumeTypeHandler = CreateVolumeTypeManger(statusCli)
|
defaultVolumeTypeHandler = CreateVolumeTypeManger(statusCli)
|
||||||
defaultEtcdHandler = NewEtcdHandler(etcdcli)
|
defaultEtcdHandler = NewEtcdHandler(etcdcli)
|
||||||
|
@ -33,11 +33,11 @@ import (
|
|||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/client"
|
|
||||||
"github.com/eapache/channels"
|
"github.com/eapache/channels"
|
||||||
"github.com/fsnotify/fsnotify"
|
"github.com/fsnotify/fsnotify"
|
||||||
"github.com/goodrain/rainbond/builder"
|
"github.com/goodrain/rainbond/builder"
|
||||||
jobc "github.com/goodrain/rainbond/builder/job"
|
jobc "github.com/goodrain/rainbond/builder/job"
|
||||||
|
"github.com/goodrain/rainbond/builder/parser/code"
|
||||||
"github.com/goodrain/rainbond/builder/sources"
|
"github.com/goodrain/rainbond/builder/sources"
|
||||||
"github.com/goodrain/rainbond/event"
|
"github.com/goodrain/rainbond/event"
|
||||||
"github.com/goodrain/rainbond/util"
|
"github.com/goodrain/rainbond/util"
|
||||||
@ -277,23 +277,6 @@ func (s *slugBuild) runBuildJob(re *Request) error {
|
|||||||
}()
|
}()
|
||||||
name := fmt.Sprintf("%s-%s", re.ServiceID, re.DeployVersion)
|
name := fmt.Sprintf("%s-%s", re.ServiceID, re.DeployVersion)
|
||||||
namespace := re.RbdNamespace
|
namespace := re.RbdNamespace
|
||||||
envs := []corev1.EnvVar{
|
|
||||||
{Name: "SLUG_VERSION", Value: re.DeployVersion},
|
|
||||||
{Name: "SERVICE_ID", Value: re.ServiceID},
|
|
||||||
{Name: "TENANT_ID", Value: re.TenantID},
|
|
||||||
{Name: "LANGUAGE", Value: re.Lang.String()},
|
|
||||||
}
|
|
||||||
for k, v := range re.BuildEnvs {
|
|
||||||
envs = append(envs, corev1.EnvVar{Name: k, Value: v})
|
|
||||||
if k == "PROC_ENV" {
|
|
||||||
var mapdata = make(map[string]interface{})
|
|
||||||
if err := json.Unmarshal([]byte(v), &mapdata); err == nil {
|
|
||||||
if runtime, ok := mapdata["runtimes"]; ok {
|
|
||||||
envs = append(envs, corev1.EnvVar{Name: "RUNTIME", Value: runtime.(string)})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
job := corev1.Pod{
|
job := corev1.Pod{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
@ -304,7 +287,35 @@ func (s *slugBuild) runBuildJob(re *Request) error {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
envs := []corev1.EnvVar{
|
||||||
|
{Name: "SLUG_VERSION", Value: re.DeployVersion},
|
||||||
|
{Name: "SERVICE_ID", Value: re.ServiceID},
|
||||||
|
{Name: "TENANT_ID", Value: re.TenantID},
|
||||||
|
{Name: "LANGUAGE", Value: re.Lang.String()},
|
||||||
|
}
|
||||||
|
var mavenSettingName string
|
||||||
|
for k, v := range re.BuildEnvs {
|
||||||
|
if k == "MAVEN_SETTING_NAME" {
|
||||||
|
mavenSettingName = v
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if k == "PROCFILE" {
|
||||||
|
if !strings.HasPrefix(v, "web:") {
|
||||||
|
v = "web: " + v
|
||||||
|
} else if v[4] != ' ' {
|
||||||
|
v = "web: " + v[4:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
envs = append(envs, corev1.EnvVar{Name: k, Value: v})
|
||||||
|
if k == "PROC_ENV" {
|
||||||
|
var mapdata = make(map[string]interface{})
|
||||||
|
if err := json.Unmarshal([]byte(v), &mapdata); err == nil {
|
||||||
|
if runtime, ok := mapdata["runtimes"]; ok {
|
||||||
|
envs = append(envs, corev1.EnvVar{Name: "RUNTIME", Value: runtime.(string)})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
podSpec := corev1.PodSpec{RestartPolicy: corev1.RestartPolicyOnFailure} // only support never and onfailure
|
podSpec := corev1.PodSpec{RestartPolicy: corev1.RestartPolicyOnFailure} // only support never and onfailure
|
||||||
// schedule builder
|
// schedule builder
|
||||||
if re.CacheMode == "hostpath" {
|
if re.CacheMode == "hostpath" {
|
||||||
@ -337,10 +348,14 @@ func (s *slugBuild) runBuildJob(re *Request) error {
|
|||||||
VolumeSource: re.CacheVolumeSource(),
|
VolumeSource: re.CacheVolumeSource(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
container := corev1.Container{
|
||||||
container := corev1.Container{Name: name, Image: builder.BUILDERIMAGENAME, Stdin: true, StdinOnce: true}
|
Name: name,
|
||||||
container.Env = envs
|
Image: builder.BUILDERIMAGENAME,
|
||||||
container.Args = []string{"local"}
|
Stdin: true,
|
||||||
|
StdinOnce: true,
|
||||||
|
Env: envs,
|
||||||
|
Args: []string{"local"},
|
||||||
|
}
|
||||||
slugSubPath := strings.TrimPrefix(re.TGZDir, "/grdata/")
|
slugSubPath := strings.TrimPrefix(re.TGZDir, "/grdata/")
|
||||||
logrus.Debugf("sourceTarFileName is: %s", sourceTarFileName)
|
logrus.Debugf("sourceTarFileName is: %s", sourceTarFileName)
|
||||||
sourceTarPath := strings.TrimPrefix(sourceTarFileName, "/cache/")
|
sourceTarPath := strings.TrimPrefix(sourceTarFileName, "/cache/")
|
||||||
@ -362,6 +377,38 @@ func (s *slugBuild) runBuildJob(re *Request) error {
|
|||||||
SubPath: sourceTarPath,
|
SubPath: sourceTarPath,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
//set maven setting
|
||||||
|
if mavenSettingName != "" && re.Lang.String() == code.JavaMaven.String() {
|
||||||
|
if setting := jobc.GetJobController().GetLanguageBuildSetting(code.JavaMaven, mavenSettingName); setting != "" {
|
||||||
|
podSpec.Volumes = append(podSpec.Volumes, corev1.Volume{
|
||||||
|
Name: "mavensetting",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
ConfigMap: &corev1.ConfigMapVolumeSource{
|
||||||
|
LocalObjectReference: corev1.LocalObjectReference{
|
||||||
|
Name: setting,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
mountPath := "/etc/maven/setting.xml"
|
||||||
|
container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{
|
||||||
|
MountPath: mountPath,
|
||||||
|
SubPath: "mavensetting",
|
||||||
|
Name: "mavensetting",
|
||||||
|
})
|
||||||
|
container.Env = append(container.Env, corev1.EnvVar{
|
||||||
|
Name: "MAVEN_SETTINGS_PATH",
|
||||||
|
Value: mountPath,
|
||||||
|
})
|
||||||
|
container.Env = append(container.Env, corev1.EnvVar{
|
||||||
|
Name: "MAVEN_MIRROR_DISABLE",
|
||||||
|
Value: "true",
|
||||||
|
})
|
||||||
|
logrus.Infof("set maven setting config %s success", mavenSettingName)
|
||||||
|
} else {
|
||||||
|
logrus.Warnf("maven setting config %s not found", mavenSettingName)
|
||||||
|
}
|
||||||
|
}
|
||||||
podSpec.Containers = append(podSpec.Containers, container)
|
podSpec.Containers = append(podSpec.Containers, container)
|
||||||
for _, ha := range re.HostAlias {
|
for _, ha := range re.HostAlias {
|
||||||
podSpec.HostAliases = append(podSpec.HostAliases, corev1.HostAlias{IP: ha.IP, Hostnames: ha.Hostnames})
|
podSpec.HostAliases = append(podSpec.HostAliases, corev1.HostAlias{IP: ha.IP, Hostnames: ha.Hostnames})
|
||||||
@ -425,116 +472,6 @@ func (s *slugBuild) waitingComplete(re *Request, reChan *channels.RingChannel) (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//runBuildContainer The deprecated
|
|
||||||
func (s *slugBuild) runBuildContainer(re *Request) error {
|
|
||||||
envs := []*sources.KeyValue{
|
|
||||||
&sources.KeyValue{Key: "SLUG_VERSION", Value: re.DeployVersion},
|
|
||||||
&sources.KeyValue{Key: "SERVICE_ID", Value: re.ServiceID},
|
|
||||||
&sources.KeyValue{Key: "TENANT_ID", Value: re.TenantID},
|
|
||||||
&sources.KeyValue{Key: "LANGUAGE", Value: re.Lang.String()},
|
|
||||||
}
|
|
||||||
for k, v := range re.BuildEnvs {
|
|
||||||
envs = append(envs, &sources.KeyValue{Key: k, Value: v})
|
|
||||||
if k == "PROC_ENV" {
|
|
||||||
var mapdata = make(map[string]interface{})
|
|
||||||
if err := json.Unmarshal([]byte(v), &mapdata); err == nil {
|
|
||||||
if runtime, ok := mapdata["runtimes"]; ok {
|
|
||||||
envs = append(envs, &sources.KeyValue{Key: "RUNTIME", Value: runtime.(string)})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
containerConfig := &sources.ContainerConfig{
|
|
||||||
Metadata: &sources.ContainerMetadata{
|
|
||||||
Name: re.ServiceID[:8] + "_" + re.DeployVersion,
|
|
||||||
},
|
|
||||||
Image: &sources.ImageSpec{
|
|
||||||
Image: builder.BUILDERIMAGENAME,
|
|
||||||
},
|
|
||||||
Mounts: []*sources.Mount{
|
|
||||||
&sources.Mount{
|
|
||||||
ContainerPath: "/tmp/cache",
|
|
||||||
HostPath: re.CacheDir,
|
|
||||||
Readonly: false,
|
|
||||||
},
|
|
||||||
&sources.Mount{
|
|
||||||
ContainerPath: "/tmp/slug",
|
|
||||||
HostPath: s.tgzDir,
|
|
||||||
Readonly: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Envs: envs,
|
|
||||||
Stdin: true,
|
|
||||||
StdinOnce: true,
|
|
||||||
AttachStdin: true,
|
|
||||||
AttachStdout: true,
|
|
||||||
AttachStderr: true,
|
|
||||||
NetworkConfig: &sources.NetworkConfig{
|
|
||||||
NetworkMode: "host",
|
|
||||||
},
|
|
||||||
Args: []string{"local"},
|
|
||||||
ExtraHosts: re.ExtraHosts,
|
|
||||||
}
|
|
||||||
sourceTarFileName, err := s.getSourceCodeTarFile(re)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("create source code tar file error:%s", err.Error())
|
|
||||||
}
|
|
||||||
reader, err := os.OpenFile(sourceTarFileName, os.O_RDONLY, 0755)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("open source code tar file error:%s", err.Error())
|
|
||||||
}
|
|
||||||
defer func() {
|
|
||||||
reader.Close()
|
|
||||||
os.Remove(reader.Name())
|
|
||||||
}()
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
defer cancel()
|
|
||||||
containerService := sources.CreateDockerService(ctx, re.DockerClient)
|
|
||||||
containerID, err := containerService.CreateContainer(containerConfig)
|
|
||||||
if err != nil {
|
|
||||||
if client.IsErrNotFound(err) {
|
|
||||||
// we don't want to write to stdout anything apart from container.ID
|
|
||||||
if _, err = sources.ImagePull(re.DockerClient, containerConfig.Image.Image, builder.REGISTRYUSER, builder.REGISTRYPASS, re.Logger, 20); err != nil {
|
|
||||||
return fmt.Errorf("pull builder container image error:%s", err.Error())
|
|
||||||
}
|
|
||||||
// Retry
|
|
||||||
containerID, err = containerService.CreateContainer(containerConfig)
|
|
||||||
}
|
|
||||||
//The container already exists.
|
|
||||||
if err != nil && strings.Contains(err.Error(), "is already in use by container") {
|
|
||||||
//remove exist container
|
|
||||||
containerService.RemoveContainer(containerID)
|
|
||||||
// Retry
|
|
||||||
containerID, err = containerService.CreateContainer(containerConfig)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("create builder container failure %s", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
errchan := make(chan error, 1)
|
|
||||||
writer := re.Logger.GetWriter("builder", "info")
|
|
||||||
close, err := containerService.AttachContainer(containerID, true, true, true, reader, writer, writer, &errchan)
|
|
||||||
if err != nil {
|
|
||||||
containerService.RemoveContainer(containerID)
|
|
||||||
return fmt.Errorf("attach builder container error:%s", err.Error())
|
|
||||||
}
|
|
||||||
defer close()
|
|
||||||
statuschan := containerService.WaitExitOrRemoved(containerID, true)
|
|
||||||
//start the container
|
|
||||||
if err := containerService.StartContainer(containerID); err != nil {
|
|
||||||
containerService.RemoveContainer(containerID)
|
|
||||||
return fmt.Errorf("start builder container error:%s", err.Error())
|
|
||||||
}
|
|
||||||
if err := <-errchan; err != nil {
|
|
||||||
logrus.Debugf("Error hijack: %s", err)
|
|
||||||
}
|
|
||||||
status := <-statuschan
|
|
||||||
if status != 0 {
|
|
||||||
return &ErrorBuild{Code: status}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *slugBuild) setImagePullSecretsForPod(pod *corev1.Pod) {
|
func (s *slugBuild) setImagePullSecretsForPod(pod *corev1.Pod) {
|
||||||
imagePullSecretName := os.Getenv("IMAGE_PULL_SECRET")
|
imagePullSecretName := os.Getenv("IMAGE_PULL_SECRET")
|
||||||
if imagePullSecretName == "" {
|
if imagePullSecretName == "" {
|
||||||
|
@ -21,12 +21,15 @@ package job
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/eapache/channels"
|
"github.com/eapache/channels"
|
||||||
|
"github.com/goodrain/rainbond/builder/parser/code"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
|
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -43,6 +46,7 @@ type Controller interface {
|
|||||||
GetJob(string) (*corev1.Pod, error)
|
GetJob(string) (*corev1.Pod, error)
|
||||||
GetServiceJobs(serviceID string) ([]*corev1.Pod, error)
|
GetServiceJobs(serviceID string) ([]*corev1.Pod, error)
|
||||||
DeleteJob(job string)
|
DeleteJob(job string)
|
||||||
|
GetLanguageBuildSetting(lang code.Lang, name string) string
|
||||||
}
|
}
|
||||||
type controller struct {
|
type controller struct {
|
||||||
KubeClient kubernetes.Interface
|
KubeClient kubernetes.Interface
|
||||||
@ -228,3 +232,15 @@ func (c *controller) DeleteJob(job string) {
|
|||||||
c.jobContainerStatus.Delete(job)
|
c.jobContainerStatus.Delete(job)
|
||||||
logrus.Infof("delete job %s finish", job)
|
logrus.Infof("delete job %s finish", job)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *controller) GetLanguageBuildSetting(lang code.Lang, name string) string {
|
||||||
|
cname := strings.ToLower(fmt.Sprintf("%s-%s", lang, name))
|
||||||
|
config, err := c.KubeClient.CoreV1().ConfigMaps(c.namespace).Get(cname, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("get configmap %s failure %s", cname, err.Error())
|
||||||
|
}
|
||||||
|
if config != nil {
|
||||||
|
return cname
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
@ -59,6 +59,7 @@ type Config struct {
|
|||||||
LogPath string
|
LogPath string
|
||||||
KuberentesDashboardAPI string
|
KuberentesDashboardAPI string
|
||||||
KubeConfigPath string
|
KubeConfigPath string
|
||||||
|
RbdNamespace string
|
||||||
}
|
}
|
||||||
|
|
||||||
//APIServer apiserver server
|
//APIServer apiserver server
|
||||||
@ -109,6 +110,7 @@ func (a *APIServer) AddFlags(fs *pflag.FlagSet) {
|
|||||||
fs.StringVar(&a.LogPath, "log-path", "/grdata/logs", "Where Docker log files and event log files are stored.")
|
fs.StringVar(&a.LogPath, "log-path", "/grdata/logs", "Where Docker log files and event log files are stored.")
|
||||||
fs.StringVar(&a.KubeConfigPath, "kube-config", "", "kube config file path, No setup is required to run in a cluster.")
|
fs.StringVar(&a.KubeConfigPath, "kube-config", "", "kube config file path, No setup is required to run in a cluster.")
|
||||||
fs.StringVar(&a.KuberentesDashboardAPI, "k8s-dashboard-api", "kubernetes-dashboard.rbd-system:443", "The service DNS name of Kubernetes dashboard. Default to kubernetes-dashboard.kubernetes-dashboard")
|
fs.StringVar(&a.KuberentesDashboardAPI, "k8s-dashboard-api", "kubernetes-dashboard.rbd-system:443", "The service DNS name of Kubernetes dashboard. Default to kubernetes-dashboard.kubernetes-dashboard")
|
||||||
|
fs.StringVar(&a.RbdNamespace, "rbd-namespace", "rbd-system", "rbd component namespace")
|
||||||
}
|
}
|
||||||
|
|
||||||
//SetLog 设置log
|
//SetLog 设置log
|
||||||
|
@ -21,18 +21,24 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/apcera/termtables"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/goodrain/rainbond/builder"
|
"github.com/goodrain/rainbond/builder"
|
||||||
"github.com/goodrain/rainbond/builder/parser/code"
|
"github.com/goodrain/rainbond/builder/parser/code"
|
||||||
"github.com/goodrain/rainbond/builder/sources"
|
"github.com/goodrain/rainbond/builder/sources"
|
||||||
|
"github.com/goodrain/rainbond/grctl/clients"
|
||||||
"github.com/goodrain/rainbond/util"
|
"github.com/goodrain/rainbond/util"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
//NewSourceBuildCmd cmd for source build test
|
//NewSourceBuildCmd cmd for source build test
|
||||||
@ -106,6 +112,189 @@ func NewSourceBuildCmd() cli.Command {
|
|||||||
cmd.Run()
|
cmd.Run()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
cli.Command{
|
||||||
|
Name: "maven-setting",
|
||||||
|
Usage: "maven setting config file manage",
|
||||||
|
Subcommands: []cli.Command{
|
||||||
|
cli.Command{
|
||||||
|
Name: "list",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "namespace,ns",
|
||||||
|
Usage: "rainbond default namespace",
|
||||||
|
Value: "rbd-system",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Usage: "list maven setting config file manage",
|
||||||
|
Action: func(ctx *cli.Context) {
|
||||||
|
Common(ctx)
|
||||||
|
namespace := ctx.String("namespace")
|
||||||
|
cms, err := clients.K8SClient.CoreV1().ConfigMaps(namespace).List(metav1.ListOptions{
|
||||||
|
LabelSelector: "configtype=mavensetting",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
runtable := termtables.CreateTable()
|
||||||
|
runtable.AddHeaders("Name", "CreateTime", "UpdateTime")
|
||||||
|
for _, cm := range cms.Items {
|
||||||
|
info := strings.Split(cm.Name, "-")
|
||||||
|
var updateTime = "-"
|
||||||
|
if cm.Annotations != nil {
|
||||||
|
updateTime = cm.Annotations["updateTime"]
|
||||||
|
}
|
||||||
|
if len(info) > 0 {
|
||||||
|
runtable.AddRow(info[len(info)-1], cm.CreationTimestamp.Format(time.RFC3339), updateTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(runtable.Render())
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cli.Command{
|
||||||
|
Name: "get",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "namespace,ns",
|
||||||
|
Usage: "rainbond default namespace",
|
||||||
|
Value: "rbd-system",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Usage: "get maven setting config file manage",
|
||||||
|
Action: func(ctx *cli.Context) {
|
||||||
|
Common(ctx)
|
||||||
|
name := ctx.Args().First()
|
||||||
|
if name == "" {
|
||||||
|
showError("Please specify the task pod name")
|
||||||
|
}
|
||||||
|
namespace := ctx.String("namespace")
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
cm, err := clients.K8SClient.CoreV1().ConfigMaps(namespace).Get(realName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
fmt.Println(cm.Data["mavensetting"])
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cli.Command{
|
||||||
|
Name: "update",
|
||||||
|
Usage: "update maven setting config file manage",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "file,f",
|
||||||
|
Usage: "define maven setting file",
|
||||||
|
Value: "./setting.xml",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "namespace,ns",
|
||||||
|
Usage: "rainbond default namespace",
|
||||||
|
Value: "rbd-system",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Action: func(ctx *cli.Context) {
|
||||||
|
Common(ctx)
|
||||||
|
name := ctx.Args().First()
|
||||||
|
if name == "" {
|
||||||
|
showError("Please specify the task pod name")
|
||||||
|
}
|
||||||
|
namespace := ctx.String("namespace")
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
cm, err := clients.K8SClient.CoreV1().ConfigMaps(namespace).Get(realName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
body, err := ioutil.ReadFile(ctx.String("f"))
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
if cm.Data == nil {
|
||||||
|
cm.Data = make(map[string]string)
|
||||||
|
}
|
||||||
|
if cm.Annotations == nil {
|
||||||
|
cm.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
cm.Data["mavensetting"] = string(body)
|
||||||
|
cm.Annotations["updateTime"] = time.Now().Format(time.RFC3339)
|
||||||
|
_, err = clients.K8SClient.CoreV1().ConfigMaps(namespace).Update(cm)
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
fmt.Println("Update Success")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cli.Command{
|
||||||
|
Name: "add",
|
||||||
|
Usage: "add maven setting config file manage",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "file,f",
|
||||||
|
Usage: "define maven setting file",
|
||||||
|
Value: "./setting.xml",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "namespace,ns",
|
||||||
|
Usage: "rainbond default namespace",
|
||||||
|
Value: "rbd-system",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Action: func(ctx *cli.Context) {
|
||||||
|
Common(ctx)
|
||||||
|
name := ctx.Args().First()
|
||||||
|
if name == "" {
|
||||||
|
showError("Please specify the task pod name")
|
||||||
|
}
|
||||||
|
namespace := ctx.String("namespace")
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
body, err := ioutil.ReadFile(ctx.String("f"))
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
config := &corev1.ConfigMap{}
|
||||||
|
config.Name = realName
|
||||||
|
config.Namespace = namespace
|
||||||
|
config.Labels = map[string]string{
|
||||||
|
"creator": "Rainbond",
|
||||||
|
"configtype": "mavensetting",
|
||||||
|
}
|
||||||
|
config.Annotations = map[string]string{
|
||||||
|
"updateTime": time.Now().Format(time.RFC3339),
|
||||||
|
}
|
||||||
|
config.Data = map[string]string{
|
||||||
|
"mavensetting": string(body),
|
||||||
|
}
|
||||||
|
_, err = clients.K8SClient.CoreV1().ConfigMaps(namespace).Create(config)
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
fmt.Println("Add Success")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cli.Command{
|
||||||
|
Name: "delete",
|
||||||
|
Usage: "delete maven setting config file manage",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "namespace,ns",
|
||||||
|
Usage: "rainbond default namespace",
|
||||||
|
Value: "rbd-system",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Action: func(ctx *cli.Context) {
|
||||||
|
Common(ctx)
|
||||||
|
name := ctx.Args().First()
|
||||||
|
if name == "" {
|
||||||
|
showError("Please specify the task pod name")
|
||||||
|
}
|
||||||
|
namespace := ctx.String("namespace")
|
||||||
|
realName := strings.ToLower(fmt.Sprintf("%s-%s", code.JavaMaven, name))
|
||||||
|
err := clients.K8SClient.CoreV1().ConfigMaps(namespace).Delete(realName, &metav1.DeleteOptions{})
|
||||||
|
if err != nil {
|
||||||
|
showError(err.Error())
|
||||||
|
}
|
||||||
|
fmt.Println("Delete Success")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Name: "build",
|
Name: "build",
|
||||||
Usage: "Commands related to building source code",
|
Usage: "Commands related to building source code",
|
||||||
|
@ -23,7 +23,7 @@ function localbuild() {
|
|||||||
for item in "${build_items[@]}"
|
for item in "${build_items[@]}"
|
||||||
do
|
do
|
||||||
echo "build local ${item}"
|
echo "build local ${item}"
|
||||||
go build -ldflags "-w -s -X github.com/goodrain/rainbond/cmd.version=${release_desc}" -o _output/${GOOS}/${VERSION}/rainbond-$item ./cmd/$item
|
go build -ldflags "-X github.com/goodrain/rainbond/cmd.version=${release_desc}" -o _output/${GOOS}/${VERSION}/rainbond-$item ./cmd/$item
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "build local $1 ${VERSION}"
|
echo "build local $1 ${VERSION}"
|
||||||
@ -32,11 +32,11 @@ function localbuild() {
|
|||||||
if [ "$GOOS" = "windows" ];then
|
if [ "$GOOS" = "windows" ];then
|
||||||
outputname="_output/${GOOS}/${VERSION}/rainbond-$1.exe"
|
outputname="_output/${GOOS}/${VERSION}/rainbond-$1.exe"
|
||||||
fi
|
fi
|
||||||
ldflags="-w -s -X github.com/goodrain/rainbond/cmd.version=${release_desc}"
|
ldflags="-X github.com/goodrain/rainbond/cmd.version=${release_desc}"
|
||||||
if [ "$STATIC" = "true" ];then
|
if [ "$STATIC" = "true" ];then
|
||||||
ldflags="${ldflags} -extldflags '-static'"
|
ldflags="${ldflags} -extldflags '-static'"
|
||||||
fi
|
fi
|
||||||
CGO_ENABLED=1 go build -v -ldflags "${ldflags}" -o ${outputname} ./cmd/$1
|
go build -v -ldflags "${ldflags}" -o ${outputname} ./cmd/$1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user