Commit 9f284c27 authored by Christopher Harm's avatar Christopher Harm

Adding ci build and deploy commands

parent d957d9f0
// Copyright © 2019 NAME HERE <EMAIL ADDRESS>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"github.com/spf13/cobra"
)
var dockerRegistry string
var dockerRegistryNamespace string
var imageTag string
var environmentSuffix string
// configCmd represents the config command
var ciCmd = &cobra.Command{
Use: "ci",
Short: "Build tools for the CI system",
// Run: func(cmd *cobra.Command, args []string) {
// fmt.Println("config called")
// },
}
func init() {
rootCmd.AddCommand(ciCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// configCmd.PersistentFlags().String("foo", "", "A help for foo")
ciCmd.PersistentFlags().StringVarP(&dockerRegistry, "registry", "r", "", "url of the docker registry")
ciCmd.PersistentFlags().StringVarP(&dockerRegistryNamespace, "registry-namespace", "n", "", "namespace in the docker registry")
ciCmd.PersistentFlags().StringVarP(&imageTag, "image", "i", "", "image tag for docker")
ciCmd.PersistentFlags().StringVarP(&environmentSuffix, "environment", "e", "", "environment suffix to append to helm release name")
ciCmd.MarkPersistentFlagRequired("registry")
ciCmd.MarkPersistentFlagRequired("registry-namespace")
ciCmd.MarkPersistentFlagRequired("image")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// configCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
// Copyright © 2019 NAME HERE <EMAIL ADDRESS>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"git.psu.edu/k8s/devtool/config"
"git.psu.edu/k8s/devtool/environment"
"github.com/fatih/color"
"github.com/spf13/cobra"
)
// buildCmd represents the build command
var ciBuildCmd = &cobra.Command{
Use: "build",
Short: "build the application within the CI system",
RunE: func(cmd *cobra.Command, args []string) error {
conf, err := config.New(configFile)
if err != nil {
color.New(color.FgRed).PrintFunc()("Error reading configuration file: %s", configFile)
return err
}
err = buildCiDocker(conf)
if err != nil {
color.Red("Failed to build docker image.")
return err
}
return nil
},
}
func init() {
ciCmd.AddCommand(ciBuildCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// buildCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// buildCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
func buildCiDocker(config config.Config) error {
color.Blue("Building Docker Containers")
for _, deployable := range config.Deployables {
dockerfile := deployable.Dockerfile
image := deployable.Name
dockerImage := dockerRegistry + "/" + dockerRegistryNamespace + "/" + image
dockerTag := dockerImage + ":" + imageTag
color.New(color.FgGreen).PrintFunc()("Building: ", dockerTag)
err := environment.Run(true, "docker", "build", "-t", dockerTag, "-f", dockerfile, ".")
if err != nil {
return err
}
color.New(color.FgGreen).PrintFunc()("Pushing Docker image: ", dockerTag)
err = environment.Run(true, "docker", "push", dockerImage)
if err != nil {
return err
}
}
return nil
}
// Copyright © 2019 NAME HERE <EMAIL ADDRESS>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cmd
import (
"os"
"git.psu.edu/k8s/devtool/config"
"git.psu.edu/k8s/devtool/environment"
"github.com/fatih/color"
"github.com/spf13/cobra"
)
// buildCmd represents the build command
var ciDeployCmd = &cobra.Command{
Use: "deploy",
Short: "deploy the application within the CI system",
RunE: func(cmd *cobra.Command, args []string) error {
conf, err := config.New(configFile)
if err != nil {
color.New(color.FgRed).PrintFunc()("Error reading configuration file: %s", configFile)
return err
}
err = fluxDeployCi(conf)
if err != nil {
color.Red("Failed to build docker image.")
return err
}
return nil
},
}
func init() {
ciCmd.AddCommand(ciDeployCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// buildCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// buildCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
func fluxDeployCi(config config.Config) error {
color.Blue("Updating Flux Releases")
for _, deployable := range config.Deployables {
image := deployable.Name
dockerImage := dockerRegistry + "/" + dockerRegistryNamespace + "/" + image
dockerTag := dockerImage + ":" + imageTag
var releaseName string
if environmentSuffix == "" {
releaseName = deployable.Name
} else {
releaseName = deployable.Name + "-" + environmentSuffix
}
color.Blue("Updating Flux Release:", releaseName)
os.Setenv("KUBE_SERVICE_NAME", releaseName)
os.Setenv("DOCKER_IMAGE_TAG", dockerTag)
os.Setenv("CI_PROJECT_NAME", image)
err := environment.Run(true, "fluxhelmrelease")
if err != nil {
color.Red("fluxhelmrelease error.")
return err
}
}
return nil
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment