CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.
Below are CI/CD examples for GitHub, GitLab, BitBucket, and CircleCI. The examples illustrate using pipelines to automate the build, test and deploy phases. Two examples per source control system are provided. One using Terraform and the other using the CLI. The README.md in the examples provide instructions for using the respective pipeline. These examples are provided as a starting point and your own unique delivery and/or deployment requirements will dictate the steps needed in your situation.
Control Plane provides a Terraform plugin allowing you to build your Control Plane infrastructure declaratively. The following examples include the plugin installation instructions, containerizing and pushing an app to the org’s private image registry and a sample Terraform configuration file defining a GVC and a workload.
The CLI apply command creates and updates Control Plane resources. The command can be used in a pipeline to manage the deployment of an application. It takes as an input a JSON or YAML file containing the properties of the resource to manage.The command can accept a YAML file containing multiple resources. Each resource must be separated using ---. Resources in a single cpln apply invocation are applied in dependency order automatically (e.g., a GVC is applied before the workload that references it), so related resources can share a file in any order.If the name of an existing resource is changed, the cpln apply command will create a new resource. Any orphaned resources will need to be manually deleted.The examples below include installation of the CLI, containerizing and pushing an application to the org’s private repository. The examples contain two sample YAML files. One that manages a GVC, and one for a workload.
Samples of existing resources can be exported using the console or the CLI. These samples can assist when defining resources for your application.Using the console, after selecting a resource, there will be an Export pull down button in the upper right corner. Select JSON or YAML to download the file.Using the CLI’s get command for each resource, the -o flag can output the resource as JSON or YAML.For example: cpln gvc get GVC_NAME -o yaml-slim --org ORG_NAME
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Control Plane","description":"Documentation for Control Plane, a hybrid multi-cloud platform for deploying and managing workloads, Kubernetes, networking, secrets, logs, and infrastructure across AWS, GCP, Azure, and private clouds.","colors":{"primary":"#1563ff","light":"#64a5ef","dark":"#1563ff"},"logo":{"light":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/dark.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=ec7b5a4bb958adc4d92dedfb41ab2e3c","dark":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/light.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=4904ca0b5a8c55fa87495b8edd04aadc"},"favicon":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/favicon.png?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=11640a5f7b1a462c233be7a72afa72d7","api":{"openapi":["https://api.cpln.io/openapi.json","https://audit.cpln.io/openapi.json"],"mdx":{"auth":{"method":"bearer"},"server":"https://api.cpln.io"}},"navbar":{"links":[{"href":"https://console.cpln.io/signin","label":"Sign in"}],"primary":{"type":"button","label":"Sign up","href":"https://console.cpln.io/signup"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/control-plane-corporation","youtube":"https://www.youtube.com/@controlplanecorporation","reddit":"https://www.reddit.com/r/controlplane"}},"search":{"prompt":"Search Control Plane docs..."},"seo":{"indexing":"navigable"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity",{"title":"Install MCP Server","description":"Connect the Control Plane MCP Server to your AI tool","icon":"plug","href":"https://docs.controlplane.com/ai/overview"}],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"compass","href":"https://controlplane.com"},{"anchor":"Status","icon":"signal","href":"https://status.cpln.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://controlplane.com/blog"},{"anchor":"FAQ","icon":"question","href":"https://controlplane.com/faq"},{"anchor":"Product Demos","icon":"video","href":"https://controlplane.com/product-demos"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"controlplanecorporation","hasAudioNarration":false,"actualSubdomain":"controlplanecorporation","customDomains":["docs.controlplane.com"],"gitSource":{"type":"github","owner":"controlplane-docs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea2e693015c34b9858f850","collectionId":"78e02d9a-ed53-410e-a703-d21f41dcc6d7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea2e693015c34b9858f850"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea2e693015c34b9858f850","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Reference","count":173},{"language":"default","tag":"Core API","count":164},{"language":"default","tag":"Template Catalog","count":101},{"language":"default","tag":"Templates","count":91},{"language":"default","tag":"Home","count":79},{"language":"default","tag":"How-to Guides","count":72},{"language":"default","tag":"CLI Reference","count":66},{"language":"default","tag":"Reference","count":49},{"language":"default","tag":"Commands","count":38},{"language":"default","tag":"Workload","count":24}],"searchSettings":{"maxResults":5}},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"global.css","content":"html{overflow-y:scroll}"},{"filePath":"style.css","content":"img[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) saturate(100%) invert(69%) sepia(9%) saturate(309%) hue-rotate(176deg) brightness(95%) contrast(87%)!important}a[aria-current=page] img[src*=\"/icons/mcp-sidebar.svg\"],img[src*=\"/icons/mcp.svg\"]{filter:brightness(0) saturate(100%) invert(28%) sepia(98%) saturate(3000%) hue-rotate(213deg) brightness(102%) contrast(101%)!important}.dark img[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) saturate(100%) invert(47%) sepia(8%) saturate(420%) hue-rotate(177deg) brightness(94%) contrast(85%)!important}img.sidebar-group-icon[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0)!important}.dark img.sidebar-group-icon[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) invert(1)!important}.dark a[aria-current=page] img[src*=\"/icons/mcp-sidebar.svg\"],.dark img[src*=\"/icons/mcp.svg\"]{filter:brightness(0) saturate(100%) invert(63%) sepia(74%) saturate(380%) hue-rotate(186deg) brightness(98%) contrast(91%)!important}.dark img[src*=\"/icons/chatgpt.svg\"],.dark img[src*=\"/icons/codex.svg\"],.dark img[src*=\"/icons/cursor.svg\"],.dark img[src*=\"/icons/opencode.svg\"]{filter:invert(1)!important}"}],"page":{"pagePath":"guides/gitops","slug":"/guides/gitops","pageMetadata":{"title":"CI/CD Examples","description":"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.","keywords":["gitops","pipeline","jenkins","azure devops","travis","argocd","flux","auto deploy","workflow yaml","deploy automation","pull request deploy"],"href":"/guides/gitops"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Note,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Below are CI/CD examples for `,_jsx(_components.a,{href:`https://github.com`,children:`GitHub`}),`, `,_jsx(_components.a,{href:`https://gitlab.com`,children:`GitLab`}),`, `,_jsx(_components.a,{href:`https://bitbucket.org`,children:`BitBucket`}),`, and `,_jsx(_components.a,{href:`https://circleci.com`,children:`CircleCI`}),`. The examples illustrate using pipelines to automate the build, test and deploy phases. Two examples per source control system are provided. One using `,_jsx(_components.a,{href:`https://registry.terraform.io/providers/controlplane-com/cpln/latest/docs`,children:`Terraform`}),` and the other using the `,_jsx(_components.a,{href:`/cli-reference/overview`,children:`CLI`}),`. The `,_jsx(_components.code,{children:`README.md`}),` in the examples provide instructions for using the respective pipeline. These examples are provided as a starting point and your own unique delivery and/or deployment requirements will dictate the steps needed in your situation.`]}),`\n`,_jsx(Heading,{level:`2`,id:`terraform`,children:`Terraform`}),`\n`,_jsxs(_components.p,{children:[`Control Plane provides a Terraform plugin allowing you to build your Control Plane infrastructure declaratively. The following examples include the plugin installation instructions, containerizing and pushing an app to the org’s private `,_jsx(_components.a,{href:`/reference/image`,children:`image registry`}),` and a sample Terraform configuration file defining a `,_jsx(_components.a,{href:`/reference/gvc`,children:`GVC`}),` and a `,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`examples`,children:`Examples`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/controlplane-com/github-actions-example-terraform`,children:`GitHub`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://gitlab.com/controlplane-com/gitlab-pipeline-example-terraform`,children:`GitLab`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://bitbucket.org/controlplane-com/bitbucket-pipeline-example-terraform`,children:`Bitbucket`})}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The GitHub and Bitbucket example uses the `,_jsx(_components.a,{href:`https://app.terraform.io/`,children:`Terraform Cloud`}),` to store the state file.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The GitLab example leverages their `,_jsx(_components.a,{href:`https://docs.gitlab.com/ee/user/infrastructure/terraform_state.html`,children:`managed Terraform state backend`}),` to store the state file.`]}),`\n`]}),`\n`]})}),`\n`,_jsx(Heading,{level:`2`,id:`cli`,children:`CLI`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/cli-reference/commands/apply`,children:`CLI apply`}),` command creates and updates Control Plane resources. The command can be used in a pipeline to manage the deployment of an application. It takes as an input a JSON or YAML file containing the properties of the resource to manage.`]}),`\n`,_jsxs(_components.p,{children:[`The command can accept a YAML file containing multiple resources. Each resource must be separated using `,_jsx(_components.code,{children:`---`}),`. Resources in a single `,_jsx(_components.code,{children:`cpln apply`}),` invocation are applied in dependency order automatically (e.g., a `,_jsx(_components.a,{href:`/reference/gvc`,children:`GVC`}),` is applied before the `,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` that references it), so related resources can share a file in any order.`]}),`\n`,_jsxs(_components.p,{children:[`If the name of an existing resource is changed, the `,_jsx(_components.code,{children:`cpln apply`}),` command will create a new resource. Any orphaned resources will need to be manually deleted.`]}),`\n`,_jsxs(_components.p,{children:[`The examples below include installation of the `,_jsx(_components.a,{href:`/cli-reference/installation`,children:`CLI`}),`, containerizing and pushing an application to the org’s private repository. The examples contain two sample YAML files. One that manages a GVC, and one for a workload.`]}),`\n`,_jsx(Heading,{level:`3`,id:`examples-2`,children:`Examples`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/controlplane-com/github-actions-example-cli`,children:`GitHub`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://gitlab.com/controlplane-com/gitlab-pipeline-example-cli`,children:`GitLab`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://bitbucket.org/controlplane-com/bitbucket-pipeline-example-cli`,children:`Bitbucket`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/controlplane-com/circle-ci-pipeline-example-cli`,children:`CircleCI`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/controlplane-com/google-cloud-build-example-cli`,children:`Google Cloud Build`})}),`\n`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`Samples of existing resources can be exported using the console or the CLI. These samples can assist when defining resources for your application.`}),_jsxs(_components.p,{children:[`Using the console, after selecting a resource, there will be an `,_jsx(_components.code,{children:`Export`}),` pull down button in the upper right corner. Select JSON or YAML to download the file.`]}),_jsxs(_components.p,{children:[`Using the CLI’s `,_jsx(_components.code,{children:`get`}),` command for each resource, the `,_jsx(_components.code,{children:`-o`}),` flag can output the resource as JSON or YAML.`]}),_jsxs(_components.p,{children:[`For example: `,_jsx(_components.code,{children:`cpln gvc get GVC_NAME -o yaml-slim --org ORG_NAME`})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"CI/CD Examples","description":"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.","keywords":["gitops","pipeline","jenkins","azure devops","travis","argocd","flux","auto deploy","workflow yaml","deploy automation","pull request deploy"],"href":"/guides/gitops"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Terraform","slug":"terraform","depth":2,"children":[{"title":"Examples","slug":"examples","depth":3,"children":[]}]},{"title":"CLI","slug":"cli","depth":2,"children":[{"title":"Examples","slug":"examples-2","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/controlplanecorporation/20452e834d3719a6/content/legacy-cli-hash-redirects.js","/_mintlify/custom/controlplanecorporation/dd1961f62f732454/content/sync-tabs.js"],"subdomain":"controlplanecorporation","siteName":"Control Plane","title":"CI/CD Examples - Control Plane","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-12T21:24:51.617Z","originalFileLocation":"guides/gitops.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Control Plane\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"CI/CD Examples - Control Plane\">\u003cmeta data-mint-head property=\"og:description\" content=\"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Control Plane\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.controlplane.com/guides/gitops\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://controlplanecorporation.mintlify.app/_mintlify/api/og/v2?division=GitOps\u0026amp;title=CI%2FCD+Examples\u0026amp;description=CI%2FCD+integration+examples+for+GitHub+Actions%2C+GitLab+CI%2C+Bitbucket+Pipelines%2C+and+CircleCI.+Covers+building%2C+testing%2C+and+deploying+with+Terraform+or+CLI.\u0026amp;theme=5c8c59bec2193070854fc823\u0026amp;signature=e0fbfecb3c0f12512368205790b4221c8519a7d16760ef1e7d13a92b18a6c64c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"CI/CD Examples - Control Plane\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://controlplanecorporation.mintlify.app/_mintlify/api/og/v2?division=GitOps\u0026amp;title=CI%2FCD+Examples\u0026amp;description=CI%2FCD+integration+examples+for+GitHub+Actions%2C+GitLab+CI%2C+Bitbucket+Pipelines%2C+and+CircleCI.+Covers+building%2C+testing%2C+and+deploying+with+Terraform+or+CLI.\u0026amp;theme=5c8c59bec2193070854fc823\u0026amp;signature=e0fbfecb3c0f12512368205790b4221c8519a7d16760ef1e7d13a92b18a6c64c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Control Plane\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1563ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.controlplane.com/guides/gitops\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/gitops.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.controlplane.com/#organization\",\"name\":\"Control Plane\",\"url\":\"https://docs.controlplane.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/dark.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=ec7b5a4bb958adc4d92dedfb41ab2e3c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.controlplane.com#website\",\"name\":\"Control Plane\",\"url\":\"https://docs.controlplane.com\",\"publisher\":{\"@id\":\"https://docs.controlplane.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.controlplane.com/guides/gitops#webpage\",\"url\":\"https://docs.controlplane.com/guides/gitops\",\"name\":\"CI/CD Examples\",\"description\":\"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\",\"dateModified\":\"2026-06-12T21:24:51.617Z\",\"isPartOf\":{\"@id\":\"https://docs.controlplane.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.controlplane.com/guides/gitops#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.controlplane.com/guides/gitops#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Control Plane\",\"item\":\"https://docs.controlplane.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI/CD Examples\",\"item\":\"https://docs.controlplane.com/guides/gitops\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.controlplane.com/guides/gitops#article\",\"headline\":\"CI/CD Examples\",\"name\":\"CI/CD Examples\",\"description\":\"CI/CD integration examples for GitHub Actions, GitLab CI, Bitbucket Pipelines, and CircleCI. Covers building, testing, and deploying with Terraform or CLI.\",\"url\":\"https://docs.controlplane.com/guides/gitops\",\"mainEntityOfPage\":{\"@id\":\"https://docs.controlplane.com/guides/gitops#webpage\"},\"dateModified\":\"2026-06-12T21:24:51.617Z\",\"keywords\":\"gitops, pipeline, jenkins, azure devops, travis, argocd, flux, auto deploy, workflow yaml, deploy automation, pull request deploy\",\"publisher\":{\"@id\":\"https://docs.controlplane.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.controlplane.com#website\"}}]}\u003c/script>","siteName":"Control Plane","nav":{"global":{"anchors":[{"anchor":"Website","icon":"compass","href":"https://controlplane.com"},{"anchor":"Status","icon":"signal","href":"https://status.cpln.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://controlplane.com/blog"},{"anchor":"FAQ","icon":"question","href":"https://controlplane.com/faq"},{"anchor":"Product Demos","icon":"video","href":"https://controlplane.com/product-demos"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/introduction"}]},{"tab":"How-to Guides","groups":[{"group":"How-to Guides","icon":"list-ol","pages":[{"title":"How-to Guides","sidebarTitle":"Overview","href":"/guides/overview"}]},{"group":"CLI Configuration","icon":"terminal","pages":[{"title":"Browser-less CLI Login","href":"/guides/browser-less-cli-login"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Kubernetes Operator","href":"/guides/cli/cpln-operator"}]},{"group":"Configure Resources","icon":"gear","pages":[{"title":"Configure a CDN","href":"/guides/configure-cdn"},{"title":"Configure a Domain","href":"/guides/configure-domain"},{"title":"Configure an Agent","href":"/guides/setup-agent"},{"title":"Connect to RDS with an Agent","href":"/guides/connect-rds-with-agent"},{"title":"Configure an Agent (Legacy)","href":"/guides/setup-agent-legacy"},{"title":"Invite Users","href":"/guides/invite-users"},{"title":"Manage Quotas","href":"/guides/manage-quotas"},{"title":"Query Costs and Usage","href":"/guides/query-costs-and-usage"},{"title":"Rate Limiting","href":"/guides/rate-limiting"},{"title":"Resource Protection","href":"/guides/resource-protection"},{"title":"Service-to-Service Calls","href":"/guides/service-to-service"}]},{"group":"Create Resources","icon":"circle-plus","pages":[{"title":"Create an Agent","href":"/guides/agent"},{"title":"Create an Audit Context","href":"/guides/create-audit-context"},{"title":"Create a Cloud Account","href":"/guides/create-cloud-account"},{"title":"Create a Group","href":"/guides/create-group"},{"title":"Create a GVC","href":"/guides/create-gvc"},{"title":"Create an Identity","href":"/guides/create-identity"},{"title":"Create an Org","href":"/guides/create-org"},{"title":"Create a Policy","href":"/guides/policy"},{"group":"Create a Secret","pages":[{"title":"Create a Secret","sidebarTitle":"Overview","href":"/guides/create-secret/overview"},{"title":"AWS","href":"/guides/create-secret/aws"},{"title":"Azure Connector","href":"/guides/create-secret/azure-connector"},{"title":"Azure SDK","href":"/guides/create-secret/azure-sdk"},{"title":"Dictionary","href":"/guides/create-secret/dictionary"},{"title":"Docker","href":"/guides/create-secret/docker"},{"title":"ECR","href":"/guides/create-secret/ecr"},{"title":"GCP","href":"/guides/create-secret/gcp"},{"title":"Keypair","href":"/guides/create-secret/keypair"},{"title":"NATS Account","href":"/guides/create-secret/nats-account"},{"title":"Opaque","href":"/guides/create-secret/opaque"},{"title":"TLS","href":"/guides/create-secret/tls"},{"title":"Username \u0026 Password","href":"/guides/create-secret/userpass"}]},{"title":"Create a Service Account","href":"/guides/create-service-account"},{"title":"Create a Workload","href":"/guides/create-workload"}]},{"group":"Deployment","icon":"rocket","pages":[{"title":"Apply YAML Manifests","href":"/guides/cpln-apply"},{"title":"Blue/Green Deployments","href":"/guides/blue-green-deployments"},{"title":"Convert Kubernetes Manifests","href":"/guides/cli/cpln-convert"},{"title":"Delete Resources from Manifests","href":"/guides/cpln-delete"},{"title":"Deploy Docker Compose Projects","href":"/guides/compose-deploy"},{"title":"Deploy a Workload to Your Own Hardware","sidebarTitle":"Deploy to Your Own Hardware","href":"/guides/deploy-to-your-own-hardware"},{"title":"Manage Helm Releases","description":"Deploy and manage Control Plane resources using Helm charts with the cpln helm command.","href":"/guides/cpln-helm"}]},{"group":"GitOps","icon":"code-branch","pages":[{"title":"CI/CD Examples","href":"/guides/gitops"},{"title":"Environment Promotion","description":"Promote workloads across development, staging, and production environments using separate orgs and GitHub Actions workflows.","href":"/guides/environment-promotion"},{"title":"Jenkins Plugin","href":"/guides/jenkins-plugin"}]},{"group":"Images","icon":"docker","pages":[{"title":"Push Images to Registry","href":"/guides/push-image"},{"title":"Pull Images from Registries","href":"/guides/pull-image"},{"title":"Copy Images Between Organizations","href":"/guides/copy-image"},{"title":"Publishing \u0026 Converting VM Images","href":"/guides/vm-images"},{"title":"Build with Buildpacks","href":"/guides/buildpacks"}]},{"group":"Native Networking","icon":"network-wired","pages":[{"title":"Native Networking Setup","href":"/guides/native-networking/native-networking-setup"},{"group":"AWS PrivateLink","pages":[{"title":"PrivateLink with RDS","href":"/guides/native-networking/aws-privatelink/privatelink-rds-terraform"}]},{"group":"GCP Private Service Connect","pages":[{"title":"PSC with Cloud SQL","href":"/guides/native-networking/private-service-connect/cloud-sql"}]}]},{"group":"Observability","icon":"chart-line","pages":[{"title":"Centralized Metrics Management","sidebarTitle":"Metrics Management","href":"/guides/centralized-metrics-management"},{"title":"Default Metrics","href":"/guides/default-metrics"},{"title":"Export Metrics to Prometheus","href":"/guides/export-metrics"}]},{"group":"Sandbox","icon":"laptop-code","pages":[{"title":"Getting Started with Sandbox","href":"/guides/sandbox/getting-started"},{"title":"Building Toolbox Images","href":"/guides/sandbox/toolbox-images"},{"title":"Sandbox Web UI","href":"/guides/sandbox/ui-reference"},{"title":"Container Internals","href":"/guides/sandbox/container-internals"},{"title":"Terminal \u0026 tmux","href":"/guides/sandbox/terminal-tmux"},{"title":"Sandbox Helper CLI","href":"/guides/sandbox/sandbox-helper"},{"title":"Multi-Repo Workspaces","href":"/guides/sandbox/multi-repo"}]},{"group":"Workload Access","icon":"key","pages":[{"title":"Connect to Workloads","href":"/guides/cli/workload/connect"},{"title":"Copy Files to/from Workloads","href":"/guides/cli/cpln-cp"},{"title":"Execute Commands in Workloads","href":"/guides/cli/workload/exec"},{"title":"Port Forward to Workloads","href":"/guides/cli/cpln-port-forward"},{"title":"Run One-off Workloads","href":"/guides/cli/workload/run"},{"title":"Run Commands with Cron Workloads","href":"/guides/cli/workload/cron-run"}]}]},{"tab":"Template Catalog","pages":[{"title":"Template Catalog","href":"/template-catalog/overview"}]},{"tab":"Managed Kubernetes","pages":[{"title":"Managed Kubernetes","href":"/mk8s/overview"}]},{"tab":"CPLN BYOK","pages":[{"title":"CPLN BYOK","href":"/byok/overview"}]},{"tab":"AI Agents","pages":[{"title":"AI Agents","href":"/ai/overview"}]},{"tab":"Infra as Code","pages":[{"title":"Infra as Code","href":"/iac/overview"}]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli-reference/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/api"}]}]},"basePath":"","title":"CI/CD Examples - Control Plane","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}