{"id":49954,"date":"2025-07-05T10:23:37","date_gmt":"2025-07-05T10:23:37","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49954"},"modified":"2025-07-05T10:23:37","modified_gmt":"2025-07-05T10:23:37","slug":"helmsman-tutorial-from-beginner-to-advanced","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/helmsman-tutorial-from-beginner-to-advanced\/","title":{"rendered":"Helmsman Tutorial: From Beginner to Advanced"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. <strong>Introduction to Helmsman<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What is Helmsman?<\/strong><\/h3>\n\n\n\n<p>Helmsman is an open-source tool that lets you <strong>declare and manage Helm chart deployments<\/strong> as code, using a simple Desired State File (DSF) written in YAML or JSON.<br>Helmsman adds governance, RBAC, drift detection, and advanced orchestration\u2014addressing gaps in raw Helm and even other tools like Helmfile and Helmwave.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Features &amp; Advantages<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Declarative deployment:<\/strong> Manage all releases, values, RBAC, and policies in a single DSF.<\/li>\n\n\n\n<li><strong>RBAC &amp; policy management:<\/strong> Built-in Kubernetes RBAC and team governance.<\/li>\n\n\n\n<li><strong>Drift detection:<\/strong> Identify out-of-sync resources before making changes.<\/li>\n\n\n\n<li><strong>Plan\/apply workflows:<\/strong> Preview actions before executing.<\/li>\n\n\n\n<li><strong>Release priorities &amp; dependencies:<\/strong> Control install\/upgrade order.<\/li>\n\n\n\n<li><strong>GitOps &amp; CI\/CD friendly:<\/strong> Designed for automation pipelines.<\/li>\n\n\n\n<li><strong>Secrets integration:<\/strong> Manage sensitive values securely.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. <strong>Installation and Setup<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\" target=\"_blank\" rel=\"noopener\">Helm 3.x<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/\" target=\"_blank\" rel=\"noopener\">kubectl<\/a><\/li>\n\n\n\n<li>Access to a Kubernetes cluster<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Install Helmsman<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Via Homebrew (macOS\/Linux):<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install praqma\/tap\/helmsman\n<\/code><\/span><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>Via Binary Download:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <a href=\"https:\/\/github.com\/Praqma\/helmsman\/releases\" target=\"_blank\" rel=\"noopener\">Helmsman Releases<\/a>.<\/li>\n\n\n\n<li>Download and extract for your OS.<\/li>\n\n\n\n<li>Move <code>helmsman<\/code> binary to your PATH.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Check Installation:<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">helmsman --version\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. <strong>Understanding the Desired State File (DSF) Structure<\/strong><\/h2>\n\n\n\n<p>The <strong>DSF<\/strong> is a YAML or JSON file describing all releases, charts, environments, namespaces, priorities, RBAC, and more.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Minimal YAML Example<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">namespaces:\n  <span class=\"hljs-keyword\">default<\/span>:\n    installTiller: <span class=\"hljs-literal\">false<\/span>\n\n<span class=\"hljs-attr\">apps<\/span>:\n  my-nginx:\n    namespace: <span class=\"hljs-keyword\">default<\/span>\n    <span class=\"hljs-attr\">enabled<\/span>: <span class=\"hljs-literal\">true<\/span>\n    <span class=\"hljs-attr\">chart<\/span>: stable\/nginx\n    <span class=\"hljs-attr\">version<\/span>: <span class=\"hljs-number\">13.2<\/span><span class=\"hljs-number\">.17<\/span>\n    <span class=\"hljs-attr\">valuesFile<\/span>: values\/nginx.yaml\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Sections<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>namespaces:<\/strong> Namespaces to manage or create.<\/li>\n\n\n\n<li><strong>apps:<\/strong> List of Helm releases (name, chart, version, namespace, values, etc.).<\/li>\n\n\n\n<li><strong>charts:<\/strong> (Optional) External chart sources.<\/li>\n\n\n\n<li><strong>settings:<\/strong> Global options (kubeContext, helmRepos, etc.).<\/li>\n\n\n\n<li><strong>rbac:<\/strong> (Optional) RBAC roles and bindings.<\/li>\n\n\n\n<li><strong>environments:<\/strong> (Optional) Multiple cluster\/environment support.<\/li>\n<\/ul>\n\n\n\n<p><strong>Pro Tip:<\/strong><br>Helmsman also supports variable substitution and conditional logic for powerful configs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. <strong>Creating and Managing Simple Helm Releases<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step-by-Step Example<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create a DSF file (<code>helmsman.yaml<\/code>):<\/strong> <code>apps: my-nginx: namespace: default chart: stable\/nginx version: 13.2.17 enabled: true valuesFile: values\/nginx.yaml<\/code><\/li>\n\n\n\n<li><strong>Apply your desired state:<\/strong> <code>helmsman -f helmsman.yaml --apply<\/code><\/li>\n\n\n\n<li><strong>Upgrade a release:<\/strong><br>Update your values or chart version and re-apply.<\/li>\n\n\n\n<li><strong>Delete a release:<\/strong><br>Remove from DSF and run with <code>--purge<\/code>.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. <strong>Organizing Projects with Multiple Releases, Namespaces, and Charts<\/strong><\/h2>\n\n\n\n<p>Helmsman can manage <strong>hundreds of releases<\/strong> in multiple namespaces.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">namespaces:\n  frontend:\n  backend:\n\napps:\n  frontend-app:\n    namespace: frontend\n    chart: myorg\/frontend\n    valuesFile: values\/frontend.yaml\n\n  backend-app:\n    namespace: backend\n    chart: myorg\/backend\n    valuesFile: values\/backend.yaml\n<\/code><\/span><\/pre>\n\n\n<p><strong>Tip:<\/strong><br>Helmsman will auto-create namespaces if they don\u2019t exist (unless you disable this in settings).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. <strong>Setting Up Priorities and Controlling Release Ordering<\/strong><\/h2>\n\n\n\n<p>Helmsman supports <strong>priorities<\/strong> (lower numbers first) and <strong>dependencies<\/strong>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">apps:\n  database:\n    <span class=\"hljs-keyword\">namespace<\/span>: <span class=\"hljs-title\">backend<\/span>\n    <span class=\"hljs-title\">chart<\/span>: <span class=\"hljs-title\">bitnami<\/span>\/<span class=\"hljs-title\">postgresql<\/span>\n    <span class=\"hljs-title\">priority<\/span>: 1\n\n  <span class=\"hljs-title\">api<\/span>:\n    <span class=\"hljs-title\">namespace<\/span>: <span class=\"hljs-title\">backend<\/span>\n    <span class=\"hljs-title\">chart<\/span>: <span class=\"hljs-title\">myorg<\/span>\/<span class=\"hljs-title\">api<\/span>\n    <span class=\"hljs-title\">priority<\/span>: 2\n    <span class=\"hljs-title\">dependsOn<\/span>:\n      - <span class=\"hljs-title\">database<\/span>\n\n  <span class=\"hljs-title\">frontend<\/span>:\n    <span class=\"hljs-title\">namespace<\/span>: <span class=\"hljs-title\">frontend<\/span>\n    <span class=\"hljs-title\">chart<\/span>: <span class=\"hljs-title\">myorg<\/span>\/<span class=\"hljs-title\">frontend<\/span>\n    <span class=\"hljs-title\">priority<\/span>: 3\n    <span class=\"hljs-title\">dependsOn<\/span>:\n      - <span class=\"hljs-title\">api<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Result:<\/strong><br><code>database<\/code> \u2192 <code>api<\/code> \u2192 <code>frontend<\/code> (order guaranteed).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7. <strong>Implementing RBAC and Policy Management<\/strong><\/h2>\n\n\n\n<p>Helmsman can <strong>create and manage RBAC roles<\/strong> for your Helm releases.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">rbac<\/span>:\n  <span class=\"hljs-selector-tag\">myteam<\/span>:\n    <span class=\"hljs-selector-tag\">namespaces<\/span>: <span class=\"hljs-selector-attr\">&#91;frontend, backend]<\/span>\n    <span class=\"hljs-selector-tag\">role<\/span>: <span class=\"hljs-selector-tag\">admin<\/span>\n    <span class=\"hljs-selector-tag\">users<\/span>: <span class=\"hljs-selector-attr\">&#91;alice, bob]<\/span>\n    <span class=\"hljs-selector-tag\">serviceAccounts<\/span>: <span class=\"hljs-selector-attr\">&#91;ci-bot]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Supports custom roles and fine-grained permissions.<\/li>\n\n\n\n<li>Bind users\/service accounts to namespaces for access control.<\/li>\n<\/ul>\n\n\n\n<p><strong>Tip:<\/strong><br>You can also set up cluster-wide roles and restrict who can update what.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8. <strong>Using Drift Detection, Plan\/Apply Workflows, and Dry Runs<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Drift Detection<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Before applying changes, Helmsman detects \u201cdrift\u201d between your DSF and what\u2019s actually running.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">helmsman<\/span> <span class=\"hljs-selector-tag\">-f<\/span> <span class=\"hljs-selector-tag\">helmsman<\/span><span class=\"hljs-selector-class\">.yaml<\/span> <span class=\"hljs-selector-tag\">--show-diff<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Plan Before Apply<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Preview actions without making changes: <code>helmsman -f helmsman.yaml --plan<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dry Run<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simulate an upgrade or install: <code>helmsman -f helmsman.yaml --apply --dry-run<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9. <strong>Integrating Secrets and Managing Configuration Securely<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Helmsman supports <a href=\"https:\/\/github.com\/jkroepke\/helm-secrets\" target=\"_blank\" rel=\"noopener\">Helm secrets<\/a> and environment variables.<\/li>\n\n\n\n<li>Reference encrypted files: <code>apps: secret-app: namespace: backend chart: myorg\/secure secretsFile: secrets\/app-secrets.yaml<\/code><\/li>\n\n\n\n<li><strong>Use variables:<\/strong> <code>settings: envVars: DB_PASSWORD: ${DB_PASSWORD}<\/code><\/li>\n\n\n\n<li>Pass env vars from your shell or CI\/CD.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10. <strong>Managing Environments and Release Conditions<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Helmsman supports <strong>environments<\/strong> for multiple clusters or namespaces. <code>environments: dev: kubeContext: dev-cluster namespace: dev prod: kubeContext: prod-cluster namespace: prod<\/code><\/li>\n\n\n\n<li>Reference with: <code>helmsman -f helmsman.yaml --environment dev --apply<\/code><\/li>\n\n\n\n<li><strong>Conditional releases:<\/strong><br>Deploy certain apps only in specific environments: <code>apps: canary: namespace: frontend enabled: ${ENVIRONMENT == \"dev\"}<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">11. <strong>Incorporating Helmsman into CI\/CD and GitOps Workflows<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example: GitHub Actions Workflow<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">- name: Install Helmsman\n  <span class=\"hljs-attr\">run<\/span>: brew install praqma\/tap\/helmsman\n\n- name: Deploy <span class=\"hljs-keyword\">with<\/span> Helmsman\n  <span class=\"hljs-attr\">env<\/span>:\n    KUBECONFIG: ${{ secrets.KUBECONFIG }}\n    <span class=\"hljs-attr\">DB_PASSWORD<\/span>: ${{ secrets.DB_PASSWORD }}\n  <span class=\"hljs-attr\">run<\/span>: |\n    helmsman -f helmsman.yaml --apply\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Tips:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Store secrets in your CI\/CD secret manager.<\/li>\n\n\n\n<li>Use plan\/diff in PRs, apply on merge.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">12. <strong>Troubleshooting, Debugging, and Best Practices<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Debugging Tools<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use verbose mode: <code>helmsman -f helmsman.yaml --apply --debug<\/code><\/li>\n\n\n\n<li>Check drift: <code>helmsman -f helmsman.yaml --show-diff<\/code><\/li>\n\n\n\n<li>Helm log inspection: <code>helm list -A helm status &lt;release><\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Best Practices<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use priorities and dependencies for reliability.<\/li>\n\n\n\n<li>Separate environments in different DSFs or use <code>environments<\/code>.<\/li>\n\n\n\n<li>Encrypt all secrets and sensitive values.<\/li>\n\n\n\n<li>Keep your DSF and values in version control.<\/li>\n\n\n\n<li>Use selectors\/labels to operate on subsets of releases.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">13. <strong>Real-World Examples and Sample Configurations<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Microservices Example<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">namespaces:\n  user:\n  order:\n  payment:\n\napps:\n  user-service:\n    namespace: user\n    chart: myorg\/user\n    valuesFile: values\/user.yaml\n    priority: 1\n\n  order-service:\n    namespace: order\n    chart: myorg\/order\n    valuesFile: values\/order.yaml\n    dependsOn: &#91;user-service]\n    priority: 2\n\n  payment-service:\n    namespace: payment\n    chart: myorg\/payment\n    valuesFile: values\/payment.yaml\n    dependsOn: &#91;order-service]\n    priority: 3\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">14. <strong>Comparison with Helmfile, Helmwave, and When to Choose Helmsman<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Helmsman<\/th><th>Helmfile<\/th><th>Helmwave<\/th><\/tr><\/thead><tbody><tr><td>RBAC\/Policy Mgmt<\/td><td>\u2705 (core)<\/td><td>\u26a0\ufe0f (some)<\/td><td>\u26a0\ufe0f (some)<\/td><\/tr><tr><td>Drift Detection<\/td><td>\u2705<\/td><td>\ud83d\udeab<\/td><td>\ud83d\udeab<\/td><\/tr><tr><td>Declarative Config<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>Release Priorities<\/td><td>\u2705<\/td><td>\u26a0\ufe0f (needs)<\/td><td>\u2705 (graph)<\/td><\/tr><tr><td>Plan\/Apply Workflow<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>Environments<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>Secrets Mgmt<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>Parallelism<\/td><td>\ud83d\udeab<\/td><td>\ud83d\udeab<\/td><td>\u2705<\/td><\/tr><tr><td>CI\/CD Friendly<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>When to Choose Helmsman<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need built-in <strong>RBAC, governance, and drift detection<\/strong>.<\/li>\n\n\n\n<li>Large organizations managing <strong>hundreds of releases<\/strong> with strong compliance needs.<\/li>\n\n\n\n<li>You want a clear \u201cplan\/apply\u201d workflow with audit trails.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Helmsman is an <strong>enterprise-grade tool<\/strong> for Kubernetes release orchestration, governance, and automation.<br>It\u2019s powerful for both small and large teams, making release management predictable, auditable, and secure\u2014<strong>from development to production<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Further Reading &amp; Resources<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/Praqma\/helmsman\" target=\"_blank\" rel=\"noopener\">Helmsman Official Docs<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Praqma\/helmsman\/tree\/master\/examples\" target=\"_blank\" rel=\"noopener\">Helmsman Examples<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/jkroepke\/helm-secrets\" target=\"_blank\" rel=\"noopener\">Helm Secrets<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/rbac\/\" target=\"_blank\" rel=\"noopener\">Kubernetes RBAC Docs<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction to Helmsman What is Helmsman? Helmsman is an open-source tool that lets you declare and manage Helm chart deployments as code, using a simple Desired State File (DSF)&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49954","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49954"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49954\/revisions"}],"predecessor-version":[{"id":49955,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49954\/revisions\/49955"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}