diff --git a/DOCS.md b/DOCS.md index 4be9957..31a466b 100644 --- a/DOCS.md +++ b/DOCS.md @@ -218,13 +218,33 @@ pipeline_production: release: ${DRONE_BRANCH} values: image.tag=${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:7} prefix: STAGING - dry-run:true + dry-run: true when: branch: [master] ``` +This plugin init stable repository in the cluster, if you want to specify the stable repository, use the `stable_repo_url` attribute. + +The following example will init `stable_repo_url` in the `https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts` repo: + +```YAML +pipeline_production: + helm_deploy: + image: quay.io/ipedrazas/drone-helm + skip_tls_verify: true + chart: ./charts/my-chart + release: ${DRONE_BRANCH} + values: image.tag=${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:7} + prefix: PROD + stable_repo_url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts + when: + branch: [master] +``` + + Happy Helming! ## Known issues -* Drone secrets that are part of `values` can be leaked in debug mode and in case of error as the whole helm command will be printed in the logs. See #52 \ No newline at end of file +* Drone secrets that are part of `values` can be leaked in debug mode and in case of error as the whole helm command will be printed in the logs. See #52 + diff --git a/main.go b/main.go index d3126f0..032c27a 100644 --- a/main.go +++ b/main.go @@ -148,6 +148,11 @@ func main() { Usage: "update dependency charts based on the contents of requirements.yaml file of the local chart", EnvVar: "PLUGIN_UPDATE_DEPENDENCIES,UPDATE_DEPENDENCIES", }, + cli.StringFlag{ + Name: "stable-repo-url", + Usage: "URL for stable repository (default 'https://kubernetes-charts.storage.googleapis.com')", + EnvVar: "PLUGIN_STABLE_REPO_URL,STABLE_REPO_URL", + }, } if err := app.Run(os.Args); err != nil { logrus.Fatal(err) @@ -189,6 +194,7 @@ func run(c *cli.Context) error { Timeout: c.String("timeout"), Force: c.Bool("force"), UpdateDependencies: c.Bool("update-dependencies"), + StableRepoURL: c.String("stable_repo_url"), }, } return p.Exec() diff --git a/plugin/plugin.go b/plugin/plugin.go index 9ca5963..4c92dbc 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -9,7 +9,6 @@ import ( "regexp" "strconv" "strings" - "text/template" ) @@ -49,6 +48,7 @@ type ( HelmRepos []string `json:"helm_repos"` Purge bool `json:"purge"` UpdateDependencies bool `json:"update_dependencies"` + StableRepoURL string `json:"stable_repo_url"` } // Plugin default Plugin struct { @@ -194,6 +194,10 @@ func doHelmRepoAdd(repo string) ([]string, error) { func doHelmInit(p *Plugin) []string { init := make([]string, 1) init[0] = "init" + if p.Config.StableRepoURL != "" { + init = append(init, "--stable-repo-url") + init = append(init, p.Config.StableRepoURL) + } if p.Config.TillerNs != "" { init = append(init, "--tiller-namespace") init = append(init, p.Config.TillerNs) diff --git a/plugin/plugin_test.go b/plugin/plugin_test.go index 0e0c8ce..69048d9 100644 --- a/plugin/plugin_test.go +++ b/plugin/plugin_test.go @@ -513,3 +513,30 @@ func TestResolveSecretsFallback(t *testing.T) { t.Errorf("envar ${NOTTOKEN} has not been resolved to 99999, not using prefix") } } +func TestHelmInitByAliyunStableRepo(t *testing.T) { + plugin := &Plugin{ + Config: Config{ + HelmCommand: "", + Namespace: "default", + SkipTLSVerify: true, + Debug: true, + DryRun: true, + Chart: "./chart/test", + Release: "test-release", + Prefix: "MY", + Values: "image.tag=$TAG,api=${API_SERVER},nameOverride=my-over-app,second.tag=${TAG}", + StringValues: "long_string_value=1234567890", + StableRepoURL: "https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts", + }, + } + init := doHelmInit(plugin) + result := strings.Join(init, " ") + expected := "init " + if plugin.Config.StableRepoURL != "" { + expected = expected + "--stable-repo-url" + } + + if expected != result { + t.Error("Helm cannot init for stable repository") + } +}