Skip to content

Commit

Permalink
build executables/container: opt-out apiserver/controller
Browse files Browse the repository at this point in the history
  • Loading branch information
yue9944882 committed Feb 14, 2020
1 parent 70b29be commit e768f82
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 55 deletions.
12 changes: 11 additions & 1 deletion cmd/apiserver-boot/boot/build/build_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ func AddBuildContainer(cmd *cobra.Command) {
func AddBuildContainerFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&Image, "image", "", "name of the image with tag")
cmd.Flags().BoolVar(&GenerateForBuild, "generate", true, "if true, generate code before building")
cmd.Flags().StringArrayVar(&buildTargets, "targets", []string{apiserverTarget, controllerTarget}, "The target binaries to build")
}

func RunBuildContainer(cmd *cobra.Command, args []string) {
Expand All @@ -66,7 +67,10 @@ func RunBuildContainer(cmd *cobra.Command, args []string) {
klog.Infof("Writing the Dockerfile.")

path := filepath.Join(dir, "Dockerfile")
util.WriteIfNotFound(path, "dockerfile-template", dockerfileTemplate, dockerfileTemplateArguments{})
util.WriteIfNotFound(path, "dockerfile-template", dockerfileTemplate, dockerfileTemplateArguments{
BuildApiserver: buildApiserver(),
BuildController: buildController(),
})

klog.Infof("Building binaries for linux amd64.")

Expand All @@ -82,6 +86,8 @@ func RunBuildContainer(cmd *cobra.Command, args []string) {
}

type dockerfileTemplateArguments struct {
BuildApiserver bool
BuildController bool
}

var dockerfileTemplate = `
Expand All @@ -90,6 +96,10 @@ FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y ca-certificates
{{ if .BuildApiserver }}
ADD apiserver .
{{ end }}
{{ if .BuildController }}
ADD controller-manager .
{{ end }}
`
146 changes: 92 additions & 54 deletions cmd/apiserver-boot/boot/build/build_executables.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ var goarch string = "amd64"
var outputdir string = "bin"
var Bazel bool
var Gazelle bool
var buildTargets []string

const (
apiserverTarget = "apiserver"
controllerTarget = "controller"
)

var createBuildExecutablesCmd = &cobra.Command{
Use: "executables",
Expand Down Expand Up @@ -68,6 +74,7 @@ func AddBuildExecutables(cmd *cobra.Command) {
createBuildExecutablesCmd.Flags().StringVar(&outputdir, "output", "bin", "if set, write the binaries to this directory")
createBuildExecutablesCmd.Flags().BoolVar(&Bazel, "bazel", false, "if true, use bazel to build. May require updating build rules with gazelle.")
createBuildExecutablesCmd.Flags().BoolVar(&Gazelle, "gazelle", false, "if true, run gazelle before running bazel.")
createBuildExecutablesCmd.Flags().StringArrayVar(&buildTargets, "targets", []string{apiserverTarget, controllerTarget}, "The target binaries to build")

createBuildExecutablesCmd.Flags().MarkDeprecated("gen-unversioned-client", "using internal clients in external systems is strongly not recommended")
}
Expand Down Expand Up @@ -98,9 +105,14 @@ func BazelBuild(cmd *cobra.Command, args []string) {
}
}

c := exec.Command("bazel", "build",
filepath.Join("cmd", "apiserver"),
filepath.Join("cmd", "controller-manager"))
targetDirs := make([]string, 0)
if buildApiserver() {
targetDirs = append(targetDirs, filepath.Join("cmd", "apiserver"))
}
if buildController() {
targetDirs = append(targetDirs, filepath.Join("cmd", "controller-manager"))
}
c := exec.Command("bazel", append([]string{"build"}, targetDirs...)...)
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
Expand All @@ -112,26 +124,30 @@ func BazelBuild(cmd *cobra.Command, args []string) {
os.RemoveAll(filepath.Join("bin", "apiserver"))
os.RemoveAll(filepath.Join("bin", "controller-manager"))

c = exec.Command("cp",
filepath.Join("bazel-bin", "cmd", "apiserver", "apiserver"),
filepath.Join("bin", "apiserver"))
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err = c.Run()
if err != nil {
klog.Fatal(err)
if buildApiserver() {
c := exec.Command("cp",
filepath.Join("bazel-bin", "cmd", "apiserver", "apiserver"),
filepath.Join("bin", "apiserver"))
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err := c.Run()
if err != nil {
klog.Fatal(err)
}
}

c = exec.Command("cp",
filepath.Join("bazel-bin", "cmd", "controller-manager", "controller-manager"),
filepath.Join("bin", "controller-manager"))
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err = c.Run()
if err != nil {
klog.Fatal(err)
if buildController() {
c := exec.Command("cp",
filepath.Join("bazel-bin", "cmd", "controller-manager", "controller-manager"),
filepath.Join("bin", "controller-manager"))
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err := c.Run()
if err != nil {
klog.Fatal(err)
}
}
}

Expand All @@ -144,44 +160,66 @@ func GoBuild(cmd *cobra.Command, args []string) {
os.RemoveAll(filepath.Join("bin", "apiserver"))
os.RemoveAll(filepath.Join("bin", "controller-manager"))

// Build the apiserver
path := filepath.Join("cmd", "apiserver", "main.go")
c := exec.Command("go", "build", "-o", filepath.Join(outputdir, "apiserver"), path)
c.Env = append(os.Environ(), "CGO_ENABLED=0")
klog.Infof("CGO_ENABLED=0")
if len(goos) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOOS=%s", goos))
klog.Infof(fmt.Sprintf("GOOS=%s", goos))
}
if len(goarch) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOARCH=%s", goarch))
klog.Infof(fmt.Sprintf("GOARCH=%s", goarch))
}
if buildApiserver() {
// Build the apiserver
path := filepath.Join("cmd", "apiserver", "main.go")
c := exec.Command("go", "build", "-o", filepath.Join(outputdir, "apiserver"), path)
c.Env = append(os.Environ(), "CGO_ENABLED=0")
klog.Infof("CGO_ENABLED=0")
if len(goos) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOOS=%s", goos))
klog.Infof(fmt.Sprintf("GOOS=%s", goos))
}
if len(goarch) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOARCH=%s", goarch))
klog.Infof(fmt.Sprintf("GOARCH=%s", goarch))
}

klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err := c.Run()
if err != nil {
klog.Fatal(err)
klog.Infof("%s", strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err := c.Run()
if err != nil {
klog.Fatal(err)
}
}

// Build the controller manager
path = filepath.Join("cmd", "manager", "main.go")
c = exec.Command("go", "build", "-o", filepath.Join(outputdir, "controller-manager"), path)
c.Env = append(os.Environ(), "CGO_ENABLED=0")
if len(goos) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOOS=%s", goos))
if buildController() {
// Build the controller manager
path := filepath.Join("cmd", "manager", "main.go")
c := exec.Command("go", "build", "-o", filepath.Join(outputdir, "controller-manager"), path)
c.Env = append(os.Environ(), "CGO_ENABLED=0")
if len(goos) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOOS=%s", goos))
}
if len(goarch) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOARCH=%s", goarch))
}

klog.Infof(strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err := c.Run()
if err != nil {
klog.Fatal(err)
}
}
if len(goarch) > 0 {
c.Env = append(c.Env, fmt.Sprintf("GOARCH=%s", goarch))
}

func buildApiserver() bool {
for _, t := range buildTargets {
if t == apiserverTarget {
return true
}
}
return false
}

klog.Infof(strings.Join(c.Args, " "))
c.Stderr = os.Stderr
c.Stdout = os.Stdout
err = c.Run()
if err != nil {
klog.Fatal(err)
func buildController() bool {
for _, t := range buildTargets {
if t == controllerTarget {
return true
}
}
return false
}

0 comments on commit e768f82

Please sign in to comment.