diff --git a/README.md b/README.md index 24f30f1..745591e 100644 --- a/README.md +++ b/README.md @@ -2,18 +2,25 @@ This plugin allows to deploy a [Helm](https://github.com/kubernetes/helm) chart into a [Kubernetes](https://github.com/kubernetes/kubernetes) cluster. -For example, this configuration will deploy Jenkins using the [stable/jenkins chart](https://github.com/kubernetes/charts/tree/master/stable/jenkins) +For example, this configuration will deploy my-app using the [stable/jenkins chart](https://github.com/kubernetes/charts/tree/master/stable/jenkins) pipeline: - deploy: - image: quay.io/ipedrazas/drone-helm - helm_command: "install --name my-release stable/jenkins --debug --dry-run" - api_server: "http://my_api_server" - kubernetes_token: "secret token" - skip_tls_verify: true + helm_deploy: + image: quay.io/ipedrazas/drone-helm + chart: stable/jenkins + release: my-dear-jenkins + +There are two secrets you have to create: + + drone secret add --image=quay.io/ipedrazas/drone-helm \ + your-user/your-repo API_SERVER https://mykubernetesapiserver + drone secret add --image=quay.io/ipedrazas/drone-helm \ + your-user/your-repo KUBERNETES_TOKEN eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJ... + + If you don't know where to get a token from, you can execute the following command: kubectl exec POD_NAME -- cat /var/run/secrets/kubernetes.io/serviceaccount/token @@ -29,12 +36,11 @@ To test the plugin, you can run `minikube` and just run the docker image as foll docker run --rm \ -e PLUGIN_HELM_COMMAND="install --name my-release stable/jenkins --debug --dry-run" \ -e PLUGIN_API_SERVER=https://192.168.64.5:8443 \ - -e PLUGIN_TOKEN="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tcnloeTciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjU5ZWQzYjM1LWI0MmUtMTFlNi05ZDI3LTFlZGZkMzA0MTNhNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.aGX19xTFJdxC6d5hObKUms9Kaq0wR8fMypXTnsfjC6XjiA3_QWX9LJdRFl6wvZTRoIAjuOhAJKNAKhLQ3sK0aKrddNxn2is-HCb88BXma3BrHWOtkwajvZ1dyAhZOe2fY1I77t_mrbvTMqJ4udsom6roHf-KL8j29DJWsV0nFh6VKyvqN8f7FsNG3WuH3SFZX_LfcE0HfZxrDaVEi-CkDo0sGCqIefDk2sn4IQD6b1Ng-grJWSN-YtrcDDduEKlUHPSRMmMtWa3-Q61-yQqlyqATGbxC3UwqwaLfjCrTkg1Uikv4jWDP3-eNmuQCqG9PHKulA1riTFAgxbr09zoYxg" \ + -e PLUGIN_TOKEN="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ld..." \ -e PLUGIN_NAMESPACE=default \ -e PLUGIN_SKIP_TLS_VERIFY=true \ quay.io/ipedrazas/drone-helm - Happy Helming! \ No newline at end of file diff --git a/main.go b/main.go index d426499..e845fb4 100644 --- a/main.go +++ b/main.go @@ -21,27 +21,42 @@ func main() { cli.StringSliceFlag{ Name: "helm_command", Usage: "add the command Helm has to execute", - EnvVar: "PLUGIN_HELM_COMMAND", + EnvVar: "PLUGIN_HELM_COMMAND,HELM_COMMAND", }, cli.StringFlag{ Name: "api_server", Usage: "Api Server url", - EnvVar: "PLUGIN_API_SERVER", + EnvVar: "PLUGIN_API_SERVER,API_SERVER", }, cli.StringFlag{ Name: "token", Usage: "Kubernetes Token", - EnvVar: "PLUGIN_TOKEN", + EnvVar: "PLUGIN_TOKEN,KUBERNETES_TOKEN", }, cli.StringFlag{ Name: "namespace", Usage: "Kubernetes namespace", - EnvVar: "PLUGIN_NAMESPACE", + EnvVar: "PLUGIN_NAMESPACE,NAMESPACE", + }, + cli.StringFlag{ + Name: "release", + Usage: "Kubernetes helm release", + EnvVar: "PLUGIN_RELEASE,RELEASE", + }, + cli.StringFlag{ + Name: "chart", + Usage: "Kubernetes helm release", + EnvVar: "PLUGIN_CHART,CHART", + }, + cli.StringFlag{ + Name: "values", + Usage: "Kubernetes helm release", + EnvVar: "PLUGIN_VALUES,VALUES", }, cli.BoolFlag{ Name: "skip_tls_verify", Usage: "Skip TLS verification", - EnvVar: "PLUGIN_SKIP_TLS_VERIFY", + EnvVar: "PLUGIN_SKIP_TLS_VERIFY,SKIP_TLS_VERIFY", }, } if err := app.Run(os.Args); err != nil { @@ -60,7 +75,17 @@ func run(c *cli.Context) error { HelmCommand: c.StringSlice("helm_command"), Namespace: c.String("namespace"), SkipTLSVerify: c.Bool("skip_tls_verify"), + Values: c.String("values"), + Release: c.String("release"), + Chart: c.String("chart"), }, } + debug() return plugin.Exec() } + +func debug() { + for _, e := range os.Environ() { + fmt.Println(e) + } +} diff --git a/plugin.go b/plugin.go index 7ca4ff3..2d7229c 100644 --- a/plugin.go +++ b/plugin.go @@ -21,6 +21,9 @@ type ( HelmCommand []string `json:"helm_command"` SkipTLSVerify bool `json:"tls_skip_verify"` Namespace string `json:"namespace"` + Release string `json:"release"` + Chart string `json:"chart"` + Values string `json:"values"` } // Plugin default Plugin struct { @@ -44,16 +47,25 @@ func (p Plugin) Exec() error { if err != nil { return fmt.Errorf("Error running helm comand: " + strings.Join(init[:], " ")) } - cmd := p.Config.HelmCommand - err = runCommand(cmd) + upgrade := make([]string, 7) + upgrade[0] = "upgrade" + upgrade[1] = "--install" + upgrade[2] = p.Config.Release + upgrade[3] = p.Config.Chart + upgrade[4] = "--debug" + if p.Config.Values != "" { + upgrade[5] = "--set" + upgrade[6] = p.Config.Values + } + + err = runCommand(upgrade) if err != nil { - return fmt.Errorf("Error running helm comand: " + strings.Join(cmd[:], " ")) + return fmt.Errorf("Error running helm comand: " + strings.Join(upgrade[:], " ")) } return nil } func initialiseKubeconfig(params *Config, source string, target string) error { - fmt.Println(params) t, _ := template.ParseFiles(source) f, err := os.Create(target) err = t.Execute(f, params)