diff --git a/404.html b/404.html index 86f78c463..a3d409d78 100644 --- a/404.html +++ b/404.html @@ -10,8 +10,8 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/images/add_sonar_project-c8533cc1aea1ef9154450eef4b28c254.png b/assets/images/add_sonar_project-c8533cc1aea1ef9154450eef4b28c254.png deleted file mode 100644 index f07e41fc1..000000000 Binary files a/assets/images/add_sonar_project-c8533cc1aea1ef9154450eef4b28c254.png and /dev/null differ diff --git a/assets/images/add_sonar_project-d011f579229c29a9137fb20fc3eb6570.png b/assets/images/add_sonar_project-d011f579229c29a9137fb20fc3eb6570.png new file mode 100644 index 000000000..81c046eba Binary files /dev/null and b/assets/images/add_sonar_project-d011f579229c29a9137fb20fc3eb6570.png differ diff --git a/assets/images/add_sonar_project2-1c7614451606e904093f711284a5e751.png b/assets/images/add_sonar_project2-1c7614451606e904093f711284a5e751.png deleted file mode 100644 index ad52bdaec..000000000 Binary files a/assets/images/add_sonar_project2-1c7614451606e904093f711284a5e751.png and /dev/null differ diff --git a/assets/images/add_sonar_project2-734a4e8019af31d2bc7e1284e5b5e075.png b/assets/images/add_sonar_project2-734a4e8019af31d2bc7e1284e5b5e075.png new file mode 100644 index 000000000..1d449ebb7 Binary files /dev/null and b/assets/images/add_sonar_project2-734a4e8019af31d2bc7e1284e5b5e075.png differ diff --git a/assets/images/applications_tab-1fde4ca073a9080bc99675f718bce74b.png b/assets/images/applications_tab-1fde4ca073a9080bc99675f718bce74b.png new file mode 100644 index 000000000..ab1ff801a Binary files /dev/null and b/assets/images/applications_tab-1fde4ca073a9080bc99675f718bce74b.png differ diff --git a/assets/images/applications_tab-3e76c8ef4b92ec7ffcdb69daede9c564.png b/assets/images/applications_tab-3e76c8ef4b92ec7ffcdb69daede9c564.png deleted file mode 100644 index 2d354d9de..000000000 Binary files a/assets/images/applications_tab-3e76c8ef4b92ec7ffcdb69daede9c564.png and /dev/null differ diff --git a/assets/images/change_default_branch-63dfa7a9b14a7cbef5b6db6088090a8b.png b/assets/images/change_default_branch-63dfa7a9b14a7cbef5b6db6088090a8b.png deleted file mode 100644 index 2bbec6701..000000000 Binary files a/assets/images/change_default_branch-63dfa7a9b14a7cbef5b6db6088090a8b.png and /dev/null differ diff --git a/assets/images/change_default_branch-b5d7cc59a139ba1915fba1199c463bf7.png b/assets/images/change_default_branch-b5d7cc59a139ba1915fba1199c463bf7.png new file mode 100644 index 000000000..6c113bf3e Binary files /dev/null and b/assets/images/change_default_branch-b5d7cc59a139ba1915fba1199c463bf7.png differ diff --git a/assets/images/cluster_settings-4d2b407c43ee3c40b30705e7fd788445.png b/assets/images/cluster_settings-4d2b407c43ee3c40b30705e7fd788445.png new file mode 100644 index 000000000..6760553c8 Binary files /dev/null and b/assets/images/cluster_settings-4d2b407c43ee3c40b30705e7fd788445.png differ diff --git a/assets/images/cluster_settings-5f7866a65812882beb8ca00fded7f51d.png b/assets/images/cluster_settings-5f7866a65812882beb8ca00fded7f51d.png deleted file mode 100644 index cbf6be315..000000000 Binary files a/assets/images/cluster_settings-5f7866a65812882beb8ca00fded7f51d.png and /dev/null differ diff --git a/assets/images/edp_portal_ui-c5e915644e66a49374c7981b8f30106d.png b/assets/images/edp_portal_ui-c5e915644e66a49374c7981b8f30106d.png new file mode 100644 index 000000000..02ee867e3 Binary files /dev/null and b/assets/images/edp_portal_ui-c5e915644e66a49374c7981b8f30106d.png differ diff --git a/assets/images/environment_details-52648f041e754e9f09c595f99dc52360.png b/assets/images/environment_details-52648f041e754e9f09c595f99dc52360.png deleted file mode 100644 index 21f1aef02..000000000 Binary files a/assets/images/environment_details-52648f041e754e9f09c595f99dc52360.png and /dev/null differ diff --git a/assets/images/environment_details-d0def95a88041d893a4ab59dd681df28.png b/assets/images/environment_details-d0def95a88041d893a4ab59dd681df28.png new file mode 100644 index 000000000..2b22aba74 Binary files /dev/null and b/assets/images/environment_details-d0def95a88041d893a4ab59dd681df28.png differ diff --git a/assets/images/environment_list-1e53c7560ce5a459c1efe2d75d490cb5.png b/assets/images/environment_list-1e53c7560ce5a459c1efe2d75d490cb5.png new file mode 100644 index 000000000..c5d6a451c Binary files /dev/null and b/assets/images/environment_list-1e53c7560ce5a459c1efe2d75d490cb5.png differ diff --git a/assets/images/environment_list-25641f988440d7b4f949026c5f92232f.png b/assets/images/environment_list-25641f988440d7b4f949026c5f92232f.png deleted file mode 100644 index bc7142cb5..000000000 Binary files a/assets/images/environment_list-25641f988440d7b4f949026c5f92232f.png and /dev/null differ diff --git a/assets/images/failed_cd_pipeline_creation-085d99929b25efa9d0f62864f3121b0a.png b/assets/images/failed_cd_pipeline_creation-085d99929b25efa9d0f62864f3121b0a.png deleted file mode 100644 index 8a88072a9..000000000 Binary files a/assets/images/failed_cd_pipeline_creation-085d99929b25efa9d0f62864f3121b0a.png and /dev/null differ diff --git a/assets/images/failed_cd_pipeline_creation-972f79d46a2bcb40b79e309ffa821a81.png b/assets/images/failed_cd_pipeline_creation-972f79d46a2bcb40b79e309ffa821a81.png new file mode 100644 index 000000000..e33fea0f9 Binary files /dev/null and b/assets/images/failed_cd_pipeline_creation-972f79d46a2bcb40b79e309ffa821a81.png differ diff --git a/assets/images/free_plan-d379a58ca4af53e719438da3558aaac1.png b/assets/images/free_plan-d379a58ca4af53e719438da3558aaac1.png deleted file mode 100644 index f10878d51..000000000 Binary files a/assets/images/free_plan-d379a58ca4af53e719438da3558aaac1.png and /dev/null differ diff --git a/assets/images/free_plan-e80e59aee0af64d32c66cf4d02a7b23f.png b/assets/images/free_plan-e80e59aee0af64d32c66cf4d02a7b23f.png new file mode 100644 index 000000000..ad62ae147 Binary files /dev/null and b/assets/images/free_plan-e80e59aee0af64d32c66cf4d02a7b23f.png differ diff --git a/assets/images/generate_token-8604001a38a81d5bc7db41764fa12775.png b/assets/images/generate_token-8604001a38a81d5bc7db41764fa12775.png new file mode 100644 index 000000000..33b895fc0 Binary files /dev/null and b/assets/images/generate_token-8604001a38a81d5bc7db41764fa12775.png differ diff --git a/assets/images/generate_token-8c40095f49820d95e745448b5af27531.png b/assets/images/generate_token-8c40095f49820d95e745448b5af27531.png deleted file mode 100644 index 759b9c106..000000000 Binary files a/assets/images/generate_token-8c40095f49820d95e745448b5af27531.png and /dev/null differ diff --git a/assets/images/github_integration-8b22671b3a88d05a62d88c06cf0cf2a9.png b/assets/images/github_integration-8b22671b3a88d05a62d88c06cf0cf2a9.png new file mode 100644 index 000000000..6f965091d Binary files /dev/null and b/assets/images/github_integration-8b22671b3a88d05a62d88c06cf0cf2a9.png differ diff --git a/assets/images/github_integration-bd7de16fe6d899d8dd123958d2cb6e61.png b/assets/images/github_integration-bd7de16fe6d899d8dd123958d2cb6e61.png deleted file mode 100644 index e6903958e..000000000 Binary files a/assets/images/github_integration-bd7de16fe6d899d8dd123958d2cb6e61.png and /dev/null differ diff --git a/assets/images/gitops_section-67baaa2e79c6165b11a820234ac1ca35.png b/assets/images/gitops_section-67baaa2e79c6165b11a820234ac1ca35.png new file mode 100644 index 000000000..8dbc49d4f Binary files /dev/null and b/assets/images/gitops_section-67baaa2e79c6165b11a820234ac1ca35.png differ diff --git a/assets/images/gitops_section-f4296cccafe382742255c4d22414bfaf.png b/assets/images/gitops_section-f4296cccafe382742255c4d22414bfaf.png deleted file mode 100644 index 272655f0c..000000000 Binary files a/assets/images/gitops_section-f4296cccafe382742255c4d22414bfaf.png and /dev/null differ diff --git a/assets/images/go_to_source_code-d76436888e98bede03ed156e0dc63393.png b/assets/images/go_to_source_code-d76436888e98bede03ed156e0dc63393.png deleted file mode 100644 index 737f1dcc8..000000000 Binary files a/assets/images/go_to_source_code-d76436888e98bede03ed156e0dc63393.png and /dev/null differ diff --git a/assets/images/go_to_source_code-f30ed36235c4c32281e8573c4cb96e57.png b/assets/images/go_to_source_code-f30ed36235c4c32281e8573c4cb96e57.png new file mode 100644 index 000000000..73d9fc836 Binary files /dev/null and b/assets/images/go_to_source_code-f30ed36235c4c32281e8573c4cb96e57.png differ diff --git a/assets/images/headlamp-oidc-headlamp-1-de5d785885e15200e751cc7708459056.png b/assets/images/headlamp-oidc-headlamp-1-de5d785885e15200e751cc7708459056.png new file mode 100644 index 000000000..17ea05870 Binary files /dev/null and b/assets/images/headlamp-oidc-headlamp-1-de5d785885e15200e751cc7708459056.png differ diff --git a/assets/images/headlamp-oidc-headlamp-2-948da70fd8c70fc4999d382c751f90a8.png b/assets/images/headlamp-oidc-headlamp-2-948da70fd8c70fc4999d382c751f90a8.png deleted file mode 100644 index e97a60a3f..000000000 Binary files a/assets/images/headlamp-oidc-headlamp-2-948da70fd8c70fc4999d382c751f90a8.png and /dev/null differ diff --git a/assets/images/headlamp-oidc-keycloak-2-7eaec626fabd4d743ffbf8aae9fca87c.png b/assets/images/headlamp-oidc-keycloak-2-7eaec626fabd4d743ffbf8aae9fca87c.png new file mode 100644 index 000000000..d2e5c2b30 Binary files /dev/null and b/assets/images/headlamp-oidc-keycloak-2-7eaec626fabd4d743ffbf8aae9fca87c.png differ diff --git a/assets/images/headlamp-oidc-keycloak-2-a5eef33e2162aa911af7fa908ae5f612.png b/assets/images/headlamp-oidc-keycloak-2-a5eef33e2162aa911af7fa908ae5f612.png deleted file mode 100644 index 22615efcb..000000000 Binary files a/assets/images/headlamp-oidc-keycloak-2-a5eef33e2162aa911af7fa908ae5f612.png and /dev/null differ diff --git a/assets/images/integrate_docker-0d059eaf923af5781f617746b18deab1.png b/assets/images/integrate_docker-0d059eaf923af5781f617746b18deab1.png new file mode 100644 index 000000000..7ec45cb88 Binary files /dev/null and b/assets/images/integrate_docker-0d059eaf923af5781f617746b18deab1.png differ diff --git a/assets/images/integrate_docker-8d23ad3284f3deb7e85a6fa7bb405263.png b/assets/images/integrate_docker-8d23ad3284f3deb7e85a6fa7bb405263.png deleted file mode 100644 index ee8ea8c07..000000000 Binary files a/assets/images/integrate_docker-8d23ad3284f3deb7e85a6fa7bb405263.png and /dev/null differ diff --git a/assets/images/pipelinerun_status-789c6059fff8283cbbcf5c4cb1c391c0.png b/assets/images/pipelinerun_status-789c6059fff8283cbbcf5c4cb1c391c0.png new file mode 100644 index 000000000..710d36907 Binary files /dev/null and b/assets/images/pipelinerun_status-789c6059fff8283cbbcf5c4cb1c391c0.png differ diff --git a/assets/images/pipelinerun_status-ed4e03fd7120efaeba2f62336cf62eaa.png b/assets/images/pipelinerun_status-ed4e03fd7120efaeba2f62336cf62eaa.png deleted file mode 100644 index 825c61ba1..000000000 Binary files a/assets/images/pipelinerun_status-ed4e03fd7120efaeba2f62336cf62eaa.png and /dev/null differ diff --git a/assets/images/pipelines_tab-43aa87f89af050cb8d908e74550d4764.png b/assets/images/pipelines_tab-43aa87f89af050cb8d908e74550d4764.png new file mode 100644 index 000000000..f9d90a4e5 Binary files /dev/null and b/assets/images/pipelines_tab-43aa87f89af050cb8d908e74550d4764.png differ diff --git a/assets/images/pipelines_tab-c1c431a7fe16d602a21c835c5f1f7392.png b/assets/images/pipelines_tab-c1c431a7fe16d602a21c835c5f1f7392.png deleted file mode 100644 index 80f046358..000000000 Binary files a/assets/images/pipelines_tab-c1c431a7fe16d602a21c835c5f1f7392.png and /dev/null differ diff --git a/assets/images/sonar_step_status-7930d8f3b26b952cd35bee242acd1124.png b/assets/images/sonar_step_status-7930d8f3b26b952cd35bee242acd1124.png new file mode 100644 index 000000000..05c53d5b2 Binary files /dev/null and b/assets/images/sonar_step_status-7930d8f3b26b952cd35bee242acd1124.png differ diff --git a/assets/images/sonar_step_status-9586b2e8b1954284400370c2be02e18b.png b/assets/images/sonar_step_status-9586b2e8b1954284400370c2be02e18b.png deleted file mode 100644 index 48de96d03..000000000 Binary files a/assets/images/sonar_step_status-9586b2e8b1954284400370c2be02e18b.png and /dev/null differ diff --git a/assets/images/sonarqube_integrated-054d773e57b3c224d20d09c40b1c16d7.png b/assets/images/sonarqube_integrated-054d773e57b3c224d20d09c40b1c16d7.png deleted file mode 100644 index 70f7efe75..000000000 Binary files a/assets/images/sonarqube_integrated-054d773e57b3c224d20d09c40b1c16d7.png and /dev/null differ diff --git a/assets/images/sonarqube_integrated-b751ffd495817cae0dc95087f5c7dcfc.png b/assets/images/sonarqube_integrated-b751ffd495817cae0dc95087f5c7dcfc.png new file mode 100644 index 000000000..f19cfba81 Binary files /dev/null and b/assets/images/sonarqube_integrated-b751ffd495817cae0dc95087f5c7dcfc.png differ diff --git a/assets/images/successful_pipeline-42b8fa9be9369e4bcdf683659b415304.png b/assets/images/successful_pipeline-42b8fa9be9369e4bcdf683659b415304.png deleted file mode 100644 index 01fa74738..000000000 Binary files a/assets/images/successful_pipeline-42b8fa9be9369e4bcdf683659b415304.png and /dev/null differ diff --git a/assets/images/successful_pipeline-f844652be7b58b48d092d03f24a77603.png b/assets/images/successful_pipeline-f844652be7b58b48d092d03f24a77603.png new file mode 100644 index 000000000..37ed34411 Binary files /dev/null and b/assets/images/successful_pipeline-f844652be7b58b48d092d03f24a77603.png differ diff --git a/assets/images/trigger_pipeline_run-465dc6cba452032b7614e0c2d53254e1.png b/assets/images/trigger_pipeline_run-465dc6cba452032b7614e0c2d53254e1.png new file mode 100644 index 000000000..e966ab9a6 Binary files /dev/null and b/assets/images/trigger_pipeline_run-465dc6cba452032b7614e0c2d53254e1.png differ diff --git a/assets/images/trigger_pipeline_run-47ca774e9ecfe6dabd03a7712168764d.png b/assets/images/trigger_pipeline_run-47ca774e9ecfe6dabd03a7712168764d.png deleted file mode 100644 index ac6252dda..000000000 Binary files a/assets/images/trigger_pipeline_run-47ca774e9ecfe6dabd03a7712168764d.png and /dev/null differ diff --git a/assets/js/1273b35c.dddb2890.js b/assets/js/1273b35c.a8432c39.js similarity index 94% rename from assets/js/1273b35c.dddb2890.js rename to assets/js/1273b35c.a8432c39.js index 941eaae2e..db2eb22a7 100644 --- a/assets/js/1273b35c.dddb2890.js +++ b/assets/js/1273b35c.a8432c39.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6817],{30826:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var i=t(74848),s=t(28453);const o={},l="Deploy Application",r={id:"quick-start/deploy-application",title:"Deploy Application",description:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it.",source:"@site/docs/quick-start/deploy-application.md",sourceDirName:"quick-start",slug:"/quick-start/deploy-application",permalink:"/docs/next/quick-start/deploy-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/deploy-application.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate Argo CD",permalink:"/docs/next/quick-start/integrate-argocd"},next:{title:"Basic Concepts",permalink:"/docs/next/basic-concepts"}},c={},a=[{value:"Create GitOps Repository",id:"create-gitops-repository",level:2},{value:"Create Environment",id:"create-environment",level:2},{value:"Application Deployment",id:"application-deployment",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deploy-application",children:"Deploy Application"}),"\n",(0,i.jsx)(n.p,{children:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it."}),"\n",(0,i.jsx)(n.h2,{id:"create-gitops-repository",children:"Create GitOps Repository"}),"\n",(0,i.jsx)(n.p,{children:"As a prerequisite, create a GitOps repository in your GitHub account. KubeRocketCI Portal adheres to the GitOps approach when working with environments. In a GitOps repository, values are saved to redefine the default behavior (parameters) of deployment for each environment. The creation of a GitOps repository involves the following two steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Deployment"})," -> ",(0,i.jsx)(n.strong,{children:"GitOps"})," -> ",(0,i.jsx)(n.strong,{children:"ADD GITOPS REPOSITORY"}),", define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git repo relative path: ",(0,i.jsx)(n.code,{children:"github_account_name"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository Name: ",(0,i.jsx)(n.code,{children:"edp-gitops"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"GitOps tab",src:t(24874).A+"",title:"GitOps tab",width:"3486",height:"2002"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-environment",children:"Create Environment"}),"\n",(0,i.jsx)(n.p,{children:"To create an environment, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Environments"})," and click the ",(0,i.jsx)(n.strong,{children:"+ CREATE ENVIRONMENT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments section",src:t(41448).A+"",title:"Environments section",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Create CD Pipeline"})," window, enter the pipeline name and click the ",(0,i.jsx)(n.strong,{children:"Proceed"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelines tab",src:t(44005).A+"",title:"Pipelines tab",width:"3484",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Applications"})," tab, select the go-application and main branch:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Applications tab",src:t(65947).A+"",title:"Applications tab",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Add Stage"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Cluster: ",(0,i.jsx)(n.code,{children:"in-cluster"})]}),"\n",(0,i.jsxs)(n.li,{children:["Stage name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Namespace: ",(0,i.jsx)(n.code,{children:"edp-my-go-gin-app-dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"Development stage"})]}),"\n",(0,i.jsxs)(n.li,{children:["Trigger type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Pipeline template: ",(0,i.jsx)(n.code,{children:"deploy"})]}),"\n",(0,i.jsxs)(n.li,{children:["Quality gate type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Step name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create Stage window",src:t(28367).A+"",title:"Create Stage window",width:"956",height:"584"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Apply"})," button."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"application-deployment",children:"Application Deployment"}),"\n",(0,i.jsx)(n.p,{children:"To Deploy application, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environments list, click the Environment name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments list",src:t(95224).A+"",title:"Environments list",width:"3486",height:"2002"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environment details page, click the stage name to enter the stage details:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environment details",src:t(92356).A+"",title:"Environment details",width:"3486",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once you enter the stage details, proceed to deploy the application:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"CONFIGURE DEPLOY"})," button;"]}),"\n",(0,i.jsx)(n.li,{children:"Select the Image stream version;"}),"\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"START DEPLOY"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Deploying application",src:t(47144).A+"",title:"Deploying application",width:"1919",height:"1112"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Congratulations on completing the Quick Start guide! We hope you found this journey enjoyable."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have a good understanding of how KubeRocketCI works, you can further enhance its capabilities by integrating it with ",(0,i.jsx)(n.a,{href:"/docs/next/operator-guide/artifacts-management/nexus-sonatype",children:"Nexus"}),". Additionally, explore other functionalities detailed in our ",(0,i.jsx)(n.a,{href:"/docs/next/use-cases/",children:"Use Cases"})," section. If you're eager to unlock the full potential of KubeRocketCI, navigate to the ",(0,i.jsx)(n.a,{href:"/docs/next/operator-guide/",children:"Operator Guide"})," to fine-tune your KubeRocketCI for your specific requirements!"]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},65947:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/applications_tab-3e76c8ef4b92ec7ffcdb69daede9c564.png"},41448:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/create_environment-0ef046568407c01fd35aa303d4d4db38.png"},47144:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/deploy_application-3cd099a21997e8ce24ce497a2b2ec533.png"},92356:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_details-52648f041e754e9f09c595f99dc52360.png"},95224:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_list-25641f988440d7b4f949026c5f92232f.png"},24874:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/gitops_section-f4296cccafe382742255c4d22414bfaf.png"},44005:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelines_tab-c1c431a7fe16d602a21c835c5f1f7392.png"},28367:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/stages_tab-1e3bc5be9d8def05846a333c01d5562e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6817],{30826:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var i=t(74848),s=t(28453);const o={},l="Deploy Application",r={id:"quick-start/deploy-application",title:"Deploy Application",description:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it.",source:"@site/docs/quick-start/deploy-application.md",sourceDirName:"quick-start",slug:"/quick-start/deploy-application",permalink:"/docs/next/quick-start/deploy-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/deploy-application.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate Argo CD",permalink:"/docs/next/quick-start/integrate-argocd"},next:{title:"Basic Concepts",permalink:"/docs/next/basic-concepts"}},c={},a=[{value:"Create GitOps Repository",id:"create-gitops-repository",level:2},{value:"Create Environment",id:"create-environment",level:2},{value:"Application Deployment",id:"application-deployment",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deploy-application",children:"Deploy Application"}),"\n",(0,i.jsx)(n.p,{children:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it."}),"\n",(0,i.jsx)(n.h2,{id:"create-gitops-repository",children:"Create GitOps Repository"}),"\n",(0,i.jsx)(n.p,{children:"As a prerequisite, create a GitOps repository in your GitHub account. KubeRocketCI Portal adheres to the GitOps approach when working with environments. In a GitOps repository, values are saved to redefine the default behavior (parameters) of deployment for each environment. The creation of a GitOps repository involves the following two steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Deployment"})," -> ",(0,i.jsx)(n.strong,{children:"GitOps"})," -> ",(0,i.jsx)(n.strong,{children:"ADD GITOPS REPOSITORY"}),", define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git repo relative path: ",(0,i.jsx)(n.code,{children:"github_account_name"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository Name: ",(0,i.jsx)(n.code,{children:"edp-gitops"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"GitOps tab",src:t(24874).A+"",title:"GitOps tab",width:"3486",height:"2002"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-environment",children:"Create Environment"}),"\n",(0,i.jsx)(n.p,{children:"To create an environment, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Environments"})," and click the ",(0,i.jsx)(n.strong,{children:"+ CREATE ENVIRONMENT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments section",src:t(41448).A+"",title:"Environments section",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Create CD Pipeline"})," window, enter the pipeline name and click the ",(0,i.jsx)(n.strong,{children:"Proceed"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelines tab",src:t(44005).A+"",title:"Pipelines tab",width:"3484",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Applications"})," tab, select the go-application and main branch:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Applications tab",src:t(65947).A+"",title:"Applications tab",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Add Stage"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Cluster: ",(0,i.jsx)(n.code,{children:"in-cluster"})]}),"\n",(0,i.jsxs)(n.li,{children:["Stage name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Namespace: ",(0,i.jsx)(n.code,{children:"edp-my-go-gin-app-dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"Development stage"})]}),"\n",(0,i.jsxs)(n.li,{children:["Trigger type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Pipeline template: ",(0,i.jsx)(n.code,{children:"deploy"})]}),"\n",(0,i.jsxs)(n.li,{children:["Quality gate type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Step name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create Stage window",src:t(28367).A+"",title:"Create Stage window",width:"956",height:"584"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Apply"})," button."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"application-deployment",children:"Application Deployment"}),"\n",(0,i.jsx)(n.p,{children:"To Deploy application, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environments list, click the Environment name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments list",src:t(95224).A+"",title:"Environments list",width:"3486",height:"2002"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environment details page, click the stage name to enter the stage details:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environment details",src:t(92356).A+"",title:"Environment details",width:"3486",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once you enter the stage details, proceed to deploy the application:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"CONFIGURE DEPLOY"})," button;"]}),"\n",(0,i.jsx)(n.li,{children:"Select the Image stream version;"}),"\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"START DEPLOY"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Deploying application",src:t(47144).A+"",title:"Deploying application",width:"1919",height:"1112"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Congratulations on completing the Quick Start guide! We hope you found this journey enjoyable."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have a good understanding of how KubeRocketCI works, you can further enhance its capabilities by integrating it with ",(0,i.jsx)(n.a,{href:"/docs/next/operator-guide/artifacts-management/nexus-sonatype",children:"Nexus"}),". Additionally, explore other functionalities detailed in our ",(0,i.jsx)(n.a,{href:"/docs/next/use-cases/",children:"Use Cases"})," section. If you're eager to unlock the full potential of KubeRocketCI, navigate to the ",(0,i.jsx)(n.a,{href:"/docs/next/operator-guide/",children:"Operator Guide"})," to fine-tune your KubeRocketCI for your specific requirements!"]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},65947:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/applications_tab-1fde4ca073a9080bc99675f718bce74b.png"},41448:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/create_environment-0ef046568407c01fd35aa303d4d4db38.png"},47144:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/deploy_application-3cd099a21997e8ce24ce497a2b2ec533.png"},92356:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_details-d0def95a88041d893a4ab59dd681df28.png"},95224:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_list-1e53c7560ce5a459c1efe2d75d490cb5.png"},24874:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/gitops_section-67baaa2e79c6165b11a820234ac1ca35.png"},44005:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelines_tab-43aa87f89af050cb8d908e74550d4764.png"},28367:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/stages_tab-1e3bc5be9d8def05846a333c01d5562e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1638da2b.17826d95.js b/assets/js/1638da2b.fbb823a1.js similarity index 93% rename from assets/js/1638da2b.17826d95.js rename to assets/js/1638da2b.fbb823a1.js index 855e72035..617b4386d 100644 --- a/assets/js/1638da2b.17826d95.js +++ b/assets/js/1638da2b.fbb823a1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4662],{39743:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=n(74848),r=n(28453);const s={},c="Integrate DockerHub",o={id:"quick-start/integrate-container-registry",title:"Integrate DockerHub",description:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-container-registry.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-container-registry",permalink:"/docs/quick-start/integrate-container-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-container-registry.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate GitHub",permalink:"/docs/quick-start/integrate-github"},next:{title:"Create Application",permalink:"/docs/quick-start/create-application"}},a={},d=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-dockerhub",children:"Integrate DockerHub"}),"\n",(0,i.jsx)(t.p,{children:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub."}),"\n",(0,i.jsx)(t.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,i.jsx)(t.p,{children:"To integrate KubeRocketCI with DockerHub, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Log in to your DockerHub account."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the DockerHub main page, click your user icon at the top right corner and select ",(0,i.jsx)(t.strong,{children:"Account Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Account Settings"})," page, select the ",(0,i.jsx)(t.strong,{children:"Security"})," tab and click ",(0,i.jsx)(t.strong,{children:"New Access Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Enter the token description, select the ",(0,i.jsx)(t.strong,{children:"Read, Write, Delete"})," permission and click ",(0,i.jsx)(t.strong,{children:"Generate"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Copy the generated token:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub token",src:n(23685).A+"",title:"DockerHub token",width:"1901",height:"864"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Registry"})," and click the ",(0,i.jsx)(t.strong,{children:"Add Registry"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Registry Provider"})," field, select ",(0,i.jsx)(t.strong,{children:"DockerHub"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Registry Endpoint: ",(0,i.jsx)(t.code,{children:"https://docker.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Registry Space: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["User: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["Password/Token: ",(0,i.jsx)(t.code,{children:"Your generated access token"})]}),"\n",(0,i.jsxs)(t.li,{children:["Use the Push Account's credentials: ",(0,i.jsx)(t.code,{children:"check"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub integration",src:n(3e3).A+"",title:"DockerHub integration",width:"1914",height:"924"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["In the DockerHub context, the ",(0,i.jsx)(t.strong,{children:"Registry Space"})," field is equivalent to the account/organization name."]})}),"\n",(0,i.jsxs)(t.p,{children:["With all integrations in place, let's proceed to the ",(0,i.jsx)(t.a,{href:"/docs/quick-start/create-application",children:"Create Application"})," page for further instructions on how to create applications using KubeRocketCI."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},23685:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/dockerhub_token-ddc97b7eebaa305bc693049e503b6e08.png"},3e3:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/integrate_docker-8d23ad3284f3deb7e85a6fa7bb405263.png"},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function c(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4662],{39743:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var i=n(74848),r=n(28453);const s={},c="Integrate DockerHub",o={id:"quick-start/integrate-container-registry",title:"Integrate DockerHub",description:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-container-registry.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-container-registry",permalink:"/docs/quick-start/integrate-container-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-container-registry.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate GitHub",permalink:"/docs/quick-start/integrate-github"},next:{title:"Create Application",permalink:"/docs/quick-start/create-application"}},a={},l=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-dockerhub",children:"Integrate DockerHub"}),"\n",(0,i.jsx)(t.p,{children:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub."}),"\n",(0,i.jsx)(t.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,i.jsx)(t.p,{children:"To integrate KubeRocketCI with DockerHub, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Log in to your DockerHub account."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the DockerHub main page, click your user icon at the top right corner and select ",(0,i.jsx)(t.strong,{children:"Account Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Account Settings"})," page, select the ",(0,i.jsx)(t.strong,{children:"Security"})," tab and click ",(0,i.jsx)(t.strong,{children:"New Access Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Enter the token description, select the ",(0,i.jsx)(t.strong,{children:"Read, Write, Delete"})," permission and click ",(0,i.jsx)(t.strong,{children:"Generate"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Copy the generated token:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub token",src:n(23685).A+"",title:"DockerHub token",width:"1901",height:"864"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Registry"})," and click the ",(0,i.jsx)(t.strong,{children:"Add Registry"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Registry Provider"})," field, select ",(0,i.jsx)(t.strong,{children:"DockerHub"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Registry Endpoint: ",(0,i.jsx)(t.code,{children:"https://docker.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Registry Space: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["User: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["Password/Token: ",(0,i.jsx)(t.code,{children:"Your generated access token"})]}),"\n",(0,i.jsxs)(t.li,{children:["Use the Push Account's credentials: ",(0,i.jsx)(t.code,{children:"check"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub integration",src:n(3e3).A+"",title:"DockerHub integration",width:"1914",height:"924"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["In the DockerHub context, the ",(0,i.jsx)(t.strong,{children:"Registry Space"})," field is equivalent to the account/organization name."]})}),"\n",(0,i.jsxs)(t.p,{children:["With all integrations in place, let's proceed to the ",(0,i.jsx)(t.a,{href:"/docs/quick-start/create-application",children:"Create Application"})," page for further instructions on how to create applications using KubeRocketCI."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},23685:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/dockerhub_token-ddc97b7eebaa305bc693049e503b6e08.png"},3e3:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/integrate_docker-0d059eaf923af5781f617746b18deab1.png"},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function c(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f7ff87c.8a7677d7.js b/assets/js/2f7ff87c.eb88fbef.js similarity index 95% rename from assets/js/2f7ff87c.8a7677d7.js rename to assets/js/2f7ff87c.eb88fbef.js index 657a34eb5..2168a866d 100644 --- a/assets/js/2f7ff87c.8a7677d7.js +++ b/assets/js/2f7ff87c.eb88fbef.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[7780],{97520:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=n(74848),o=n(28453);const r={},a="Integrate SonarQube",s={id:"quick-start/integrate-sonarcloud",title:"Integrate SonarQube",description:"It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the sonar step.",source:"@site/docs/quick-start/integrate-sonarcloud.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-sonarcloud",permalink:"/docs/next/quick-start/integrate-sonarcloud",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-sonarcloud.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Install KubeRocketCI",permalink:"/docs/next/quick-start/platform-installation"},next:{title:"Integrate GitHub",permalink:"/docs/next/quick-start/integrate-github"}},c={},l=[{value:"Integrate SonarCloud",id:"integrate-sonarcloud",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-sonarqube",children:"Integrate SonarQube"}),"\n",(0,i.jsxs)(t.p,{children:["It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the ",(0,i.jsx)(t.code,{children:"sonar"})," step."]}),"\n",(0,i.jsx)(t.p,{children:"SonarQube is a powerful tool used in build and code review pipelines to enhance code quality by identifying and reporting issues, as well as providing recommendations for improvement. SonarCloud, the SaaS solution offered by SonarQube, serves this purpose."}),"\n",(0,i.jsx)(t.p,{children:"This guide will walk you through the configuration process of SonarCloud for your project."}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["An alternative option is to use an independent ",(0,i.jsx)(t.a,{href:"/docs/next/operator-guide/code-quality/sonarqube",children:"SonarQube instance"}),"."]})}),"\n",(0,i.jsx)(t.h2,{id:"integrate-sonarcloud",children:"Integrate SonarCloud"}),"\n",(0,i.jsx)(t.p,{children:"To integrate SonarCloud with the platform, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Sign up in the ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io",children:"SonarCloud"})," with your GitHub account."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Once you are logged in with GitHub, on ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io/create-organization",children:"organization page"})," import a new one from GitHub:"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Import organization",src:n(92326).A+"",title:"Import organization",width:"1920",height:"1088"})}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"It is crucial to have the organization created in SonarCloud. If you were signed up in SonarCloud using a GitHub account, SonarCloud will suggest you creating an organization with name that is equivalent to your GitHub account name."})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the Create an organization menu, choose the free plan and click ",(0,i.jsx)(t.strong,{children:"Create organization"}),":"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"Organization key must be unique."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Create organization",src:n(86364).A+"",title:"Choose plan",width:"1918",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In your account menu, select the ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io/account/security",children:(0,i.jsx)(t.strong,{children:"Security"})})," tab and generate token:"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Create organization",src:n(75053).A+"",title:"Generate token",width:"1919",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Code Quality"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["URL: ",(0,i.jsx)(t.code,{children:"https://sonarcloud.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Token: ",(0,i.jsx)(t.code,{children:"account token generated in SonarCloud"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"SonarQube integration",src:n(34910).A+"",title:"SonarQube integration",width:"1915",height:"923"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["After completing the SonarQube integration, proceed to integrate the platform with GitHub. Navigate to the ",(0,i.jsx)(t.a,{href:"/docs/next/quick-start/integrate-github",children:"Integrate GitHub"})," page for further instructions."]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},86364:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/free_plan-d379a58ca4af53e719438da3558aaac1.png"},75053:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/generate_token-8c40095f49820d95e745448b5af27531.png"},92326:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/import_from_github-141342a1700c853cd681de6799fae2b8.png"},34910:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/sonarqube_integrated-054d773e57b3c224d20d09c40b1c16d7.png"},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>s});var i=n(96540);const o={},r=i.createContext(o);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[7780],{97520:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=n(74848),o=n(28453);const r={},a="Integrate SonarQube",s={id:"quick-start/integrate-sonarcloud",title:"Integrate SonarQube",description:"It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the sonar step.",source:"@site/docs/quick-start/integrate-sonarcloud.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-sonarcloud",permalink:"/docs/next/quick-start/integrate-sonarcloud",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-sonarcloud.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Install KubeRocketCI",permalink:"/docs/next/quick-start/platform-installation"},next:{title:"Integrate GitHub",permalink:"/docs/next/quick-start/integrate-github"}},c={},l=[{value:"Integrate SonarCloud",id:"integrate-sonarcloud",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-sonarqube",children:"Integrate SonarQube"}),"\n",(0,i.jsxs)(t.p,{children:["It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the ",(0,i.jsx)(t.code,{children:"sonar"})," step."]}),"\n",(0,i.jsx)(t.p,{children:"SonarQube is a powerful tool used in build and code review pipelines to enhance code quality by identifying and reporting issues, as well as providing recommendations for improvement. SonarCloud, the SaaS solution offered by SonarQube, serves this purpose."}),"\n",(0,i.jsx)(t.p,{children:"This guide will walk you through the configuration process of SonarCloud for your project."}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["An alternative option is to use an independent ",(0,i.jsx)(t.a,{href:"/docs/next/operator-guide/code-quality/sonarqube",children:"SonarQube instance"}),"."]})}),"\n",(0,i.jsx)(t.h2,{id:"integrate-sonarcloud",children:"Integrate SonarCloud"}),"\n",(0,i.jsx)(t.p,{children:"To integrate SonarCloud with the platform, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Sign up in the ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io",children:"SonarCloud"})," with your GitHub account."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Once you are logged in with GitHub, on ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io/create-organization",children:"organization page"})," import a new one from GitHub:"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Import organization",src:n(92326).A+"",title:"Import organization",width:"1920",height:"1088"})}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"It is crucial to have the organization created in SonarCloud. If you were signed up in SonarCloud using a GitHub account, SonarCloud will suggest you creating an organization with name that is equivalent to your GitHub account name."})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the Create an organization menu, choose the free plan and click ",(0,i.jsx)(t.strong,{children:"Create organization"}),":"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"Organization key must be unique."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Create organization",src:n(86364).A+"",title:"Choose plan",width:"1918",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In your account menu, select the ",(0,i.jsx)(t.a,{href:"https://sonarcloud.io/account/security",children:(0,i.jsx)(t.strong,{children:"Security"})})," tab and generate token:"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Create organization",src:n(75053).A+"",title:"Generate token",width:"1919",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Code Quality"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["URL: ",(0,i.jsx)(t.code,{children:"https://sonarcloud.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Token: ",(0,i.jsx)(t.code,{children:"account token generated in SonarCloud"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"SonarQube integration",src:n(34910).A+"",title:"SonarQube integration",width:"1915",height:"923"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["After completing the SonarQube integration, proceed to integrate the platform with GitHub. Navigate to the ",(0,i.jsx)(t.a,{href:"/docs/next/quick-start/integrate-github",children:"Integrate GitHub"})," page for further instructions."]})]})}function u(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},86364:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/free_plan-e80e59aee0af64d32c66cf4d02a7b23f.png"},75053:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/generate_token-8604001a38a81d5bc7db41764fa12775.png"},92326:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/import_from_github-141342a1700c853cd681de6799fae2b8.png"},34910:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/sonarqube_integrated-b751ffd495817cae0dc95087f5c7dcfc.png"},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>s});var i=n(96540);const o={},r=i.createContext(o);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/327c873d.6f3f6f9e.js b/assets/js/327c873d.2bccdd9f.js similarity index 97% rename from assets/js/327c873d.6f3f6f9e.js rename to assets/js/327c873d.2bccdd9f.js index d8e856b85..5e40e7005 100644 --- a/assets/js/327c873d.6f3f6f9e.js +++ b/assets/js/327c873d.2bccdd9f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3308],{50812:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(74848),l=n(28453);const i={},r="Install KubeRocketCI",a={id:"quick-start/platform-installation",title:"Install KubeRocketCI",description:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself.",source:"@site/versioned_docs/version-3.9.0/quick-start/platform-installation.md",sourceDirName:"quick-start",slug:"/quick-start/platform-installation",permalink:"/docs/quick-start/platform-installation",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/platform-installation.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Overview",permalink:"/docs/quick-start/quick-start-overview"},next:{title:"Integrate SonarQube",permalink:"/docs/quick-start/integrate-sonarcloud"}},o={},c=[{value:"Install Tekton",id:"install-tekton",level:2},{value:"Install platform",id:"install-platform",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"install-kuberocketci",children:"Install KubeRocketCI"}),"\n",(0,s.jsx)(t.p,{children:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself."}),"\n",(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center"},children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/ILlY4niCWeU",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"allowfullscreen"})}),"\n",(0,s.jsx)(t.h2,{id:"install-tekton",children:"Install Tekton"}),"\n",(0,s.jsx)(t.p,{children:"KubeRocketCI relies on Tekton resources, including Tasks, Pipelines, Triggers, and Interceptors to execute CI/CD pipelines."}),"\n",(0,s.jsx)(t.p,{children:"To install Tekton, run the commands below:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.53.4/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/interceptors.yaml\n"})}),"\n",(0,s.jsx)(t.h2,{id:"install-platform",children:"Install platform"}),"\n",(0,s.jsx)(t.p,{children:"To deploy the platform, follow the steps below:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Add a Helm Chart repository:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm repo add epamedp https://epam.github.io/edp-helm-charts/stable\nhelm repo update\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Deploy the platform using the ",(0,s.jsx)(t.code,{children:"helm install"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm install edp epamedp/edp-install --version 3.9.0 --create-namespace --atomic -n edp --set global.dnsWildCard=example.com\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon successful deployment of the KubeRocketCI Helm Chart, run the ",(0,s.jsx)(t.code,{children:"kubectl port-forward"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl port-forward service/portal 59480:80 -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Enter the localhost in your browser to access the login menu:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"localhost:59480\n"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Portal login menu",src:n(31340).A+"",title:"Portal login menu",width:"3478",height:"2066"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Create the edp-admin service account and generate an access token to open the KubeRocketCI:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl -n edp create serviceaccount edp-admin\nkubectl create clusterrolebinding edp-admin --serviceaccount=edp:edp-admin --clusterrole=cluster-admin\nkubectl create token edp-admin -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the login menu, paste the generated token in the ",(0,s.jsx)(t.strong,{children:"ID token"})," field and click the ",(0,s.jsx)(t.strong,{children:"SIGN IN"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the ",(0,s.jsx)(t.strong,{children:"cluster settings"})," link in the bottom left corner of the UI:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Specify namespaces",src:n(79137).A+"",title:"Specify namespaces",width:"3486",height:"2072"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.strong,{children:"Cluster Settings"})," page, define the following for fields:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Default namespace: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n",(0,s.jsxs)(t.li,{children:["Allowed namespaces: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Cluster Settings menu",src:n(31070).A+"",title:"Cluster Settings menu",width:"3486",height:"2068"})}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["Remember to click the ",(0,s.jsx)(t.strong,{children:"+ ADD"})," icon when adding the allowed namespace."]})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After completing these steps, you will gain access to KubeRocketCI components through the Portal UI. You can now proceed with the integration steps, starting with the ",(0,s.jsx)(t.a,{href:"/docs/quick-start/integrate-sonarcloud",children:"SonarQube"})," integration."]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},31070:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/cluster_settings-5f7866a65812882beb8ca00fded7f51d.png"},31340:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_login_menu-5c27426f28ef8225cec87cd21dadd380.png"},79137:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_ui-956a8403d6f004a932e45bc6dd74cd61.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const l={},i=s.createContext(l);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3308],{50812:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(74848),l=n(28453);const i={},r="Install KubeRocketCI",a={id:"quick-start/platform-installation",title:"Install KubeRocketCI",description:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself.",source:"@site/versioned_docs/version-3.9.0/quick-start/platform-installation.md",sourceDirName:"quick-start",slug:"/quick-start/platform-installation",permalink:"/docs/quick-start/platform-installation",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/platform-installation.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Overview",permalink:"/docs/quick-start/quick-start-overview"},next:{title:"Integrate SonarQube",permalink:"/docs/quick-start/integrate-sonarcloud"}},o={},c=[{value:"Install Tekton",id:"install-tekton",level:2},{value:"Install platform",id:"install-platform",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"install-kuberocketci",children:"Install KubeRocketCI"}),"\n",(0,s.jsx)(t.p,{children:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself."}),"\n",(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center"},children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/ILlY4niCWeU",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"allowfullscreen"})}),"\n",(0,s.jsx)(t.h2,{id:"install-tekton",children:"Install Tekton"}),"\n",(0,s.jsx)(t.p,{children:"KubeRocketCI relies on Tekton resources, including Tasks, Pipelines, Triggers, and Interceptors to execute CI/CD pipelines."}),"\n",(0,s.jsx)(t.p,{children:"To install Tekton, run the commands below:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.53.4/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/interceptors.yaml\n"})}),"\n",(0,s.jsx)(t.h2,{id:"install-platform",children:"Install platform"}),"\n",(0,s.jsx)(t.p,{children:"To deploy the platform, follow the steps below:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Add a Helm Chart repository:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm repo add epamedp https://epam.github.io/edp-helm-charts/stable\nhelm repo update\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Deploy the platform using the ",(0,s.jsx)(t.code,{children:"helm install"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm install edp epamedp/edp-install --version 3.9.0 --create-namespace --atomic -n edp --set global.dnsWildCard=example.com\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon successful deployment of the KubeRocketCI Helm Chart, run the ",(0,s.jsx)(t.code,{children:"kubectl port-forward"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl port-forward service/portal 59480:80 -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Enter the localhost in your browser to access the login menu:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"localhost:59480\n"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Portal login menu",src:n(31340).A+"",title:"Portal login menu",width:"3478",height:"2066"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Create the edp-admin service account and generate an access token to open the KubeRocketCI:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl -n edp create serviceaccount edp-admin\nkubectl create clusterrolebinding edp-admin --serviceaccount=edp:edp-admin --clusterrole=cluster-admin\nkubectl create token edp-admin -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the login menu, paste the generated token in the ",(0,s.jsx)(t.strong,{children:"ID token"})," field and click the ",(0,s.jsx)(t.strong,{children:"SIGN IN"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the ",(0,s.jsx)(t.strong,{children:"cluster settings"})," link in the bottom left corner of the UI:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Specify namespaces",src:n(79137).A+"",title:"Specify namespaces",width:"3486",height:"2072"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.strong,{children:"Cluster Settings"})," page, define the following for fields:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Default namespace: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n",(0,s.jsxs)(t.li,{children:["Allowed namespaces: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Cluster Settings menu",src:n(31070).A+"",title:"Cluster Settings menu",width:"3486",height:"2068"})}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["Remember to click the ",(0,s.jsx)(t.strong,{children:"+ ADD"})," icon when adding the allowed namespace."]})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After completing these steps, you will gain access to KubeRocketCI components through the Portal UI. You can now proceed with the integration steps, starting with the ",(0,s.jsx)(t.a,{href:"/docs/quick-start/integrate-sonarcloud",children:"SonarQube"})," integration."]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},31070:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/cluster_settings-4d2b407c43ee3c40b30705e7fd788445.png"},31340:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_login_menu-5c27426f28ef8225cec87cd21dadd380.png"},79137:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_ui-c5e915644e66a49374c7981b8f30106d.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const l={},i=s.createContext(l);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33df32b4.d9d619e5.js b/assets/js/33df32b4.88044fda.js similarity index 90% rename from assets/js/33df32b4.d9d619e5.js rename to assets/js/33df32b4.88044fda.js index 12e759297..8ca125d13 100644 --- a/assets/js/33df32b4.d9d619e5.js +++ b/assets/js/33df32b4.88044fda.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[265],{72663:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var t=i(74848),s=i(28453);const a={},r="Create Application",o={id:"quick-start/create-application",title:"Create Application",description:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components.",source:"@site/versioned_docs/version-3.9.0/quick-start/create-application.md",sourceDirName:"quick-start",slug:"/quick-start/create-application",permalink:"/docs/quick-start/create-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/create-application.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate DockerHub",permalink:"/docs/quick-start/integrate-container-registry"},next:{title:"Integrate Argo CD",permalink:"/docs/quick-start/integrate-argocd"}},c={},l=[{value:"Application Onboarding",id:"application-onboarding",level:2},{value:"Build Application",id:"build-application",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"create-application",children:"Create Application"}),"\n",(0,t.jsx)(n.p,{children:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components."}),"\n",(0,t.jsxs)(n.p,{children:["This guide will walk you through the process of creating a Go application using the Gin framework. The ",(0,t.jsx)(n.a,{href:"/docs/user-guide/marketplace",children:"Marketplace"})," will be used to streamline the application creation process."]}),"\n",(0,t.jsx)(n.h2,{id:"application-onboarding",children:"Application Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"To create the first application, complete the instructions below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the KubeRocketCI, navigate to ",(0,t.jsx)(n.strong,{children:"Marketplace"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Marketplace"})," section, select ",(0,t.jsx)(n.strong,{children:"Web Applications with Gin Framework"}),":"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace applications",src:i(89040).A+"",title:"Marketplace applications",width:"1916",height:"927"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the appeared window, define the following values and click ",(0,t.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Component name: ",(0,t.jsx)(n.code,{children:"my-go-gin-app"})]}),"\n",(0,t.jsxs)(n.li,{children:["Description: ",(0,t.jsx)(n.code,{children:"My first application"})]}),"\n",(0,t.jsxs)(n.li,{children:["Git server: ",(0,t.jsx)(n.code,{children:"github"})]}),"\n",(0,t.jsxs)(n.li,{children:["Repository name: ",(0,t.jsx)(n.code,{children:"/my-go-gin-app"})]}),"\n",(0,t.jsxs)(n.li,{children:["Codebase versioning type: ",(0,t.jsx)(n.code,{children:"edp"})]}),"\n",(0,t.jsxs)(n.li,{children:["Start version from: ",(0,t.jsx)(n.code,{children:"0.1.0"})]}),"\n",(0,t.jsxs)(n.li,{children:["Suffix: ",(0,t.jsx)(n.code,{children:"SNAPSHOT"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Application blank",src:i(46287).A+"",title:"Application blank",width:"959",height:"412"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["As soon as the codebase is created, navigate to it via the notification at the bottom left corner or click the ",(0,t.jsx)(n.strong,{children:"Components"})," section:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace notification",src:i(75677).A+"",title:"Marketplace notification",width:"1917",height:"925"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"build-application",children:"Build Application"}),"\n",(0,t.jsx)(n.p,{children:"Having created the Go application, proceed to build it by performing the following actions:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"https://sonarcloud.io/projects/create",children:"create project"})," page add new project to analyze it."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Project name in the Sonar cloud must be the same as codebase name."})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Add new project",src:i(90877).A+"",title:"Add new project",width:"1917",height:"1084"})}),"\n",(0,t.jsx)(n.p,{children:"Set the Previous version option and click Create project."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Add new project",src:i(19131).A+"",title:"Add new project",width:"1917",height:"1083"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the project menu, navigate to ",(0,t.jsx)(n.strong,{children:"Branches"})," menu, select ",(0,t.jsx)(n.code,{children:"master"})," branch and rename it to ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Change default branch",src:i(52187).A+"",title:"Change default branch",width:"1916",height:"1083"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the ",(0,t.jsx)(n.a,{href:"https://sonarcloud.io/account/organizations",children:"account settings"})," copy the value of the SonarCloud organization name."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Organizations page",src:i(97392).A+"",title:"Organizations page",width:"1920",height:"1088"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the component details page, expand the application and click the ",(0,t.jsx)(n.strong,{children:"GIT"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace notification",src:i(94788).A+"",title:"Application details",width:"1917",height:"1084"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the opened Source Code. In the ",(0,t.jsx)(n.code,{children:"main"})," branch in GitHub, open the ",(0,t.jsx)(n.code,{children:"sonar-project.properties"})," file and include the ",(0,t.jsx)(n.code,{children:"sonar.language=go"}),", and ",(0,t.jsx)(n.code,{children:"sonar.organization"})," parameters where ",(0,t.jsx)(n.code,{children:"sonar.organization"})," is equal to the value copied in the previous step, resulting in the following configuration:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ini",children:"sonar.projectKey=my-go-gin-app\nsonar.projectName=my-go-gin-app\nsonar.go.coverage.reportPaths=coverage.out\nsonar.test.inclusions=**/*_test.go\nsonar.exclusions=**/cmd/**,**/deploy/**,**/deploy-templates/**,**/*.groovy,**/config/**\nsonar.language=go\nsonar.organization=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Commit the changes."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the component details page, click the ",(0,t.jsx)(n.strong,{children:"Trigger build pipeline run"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Triggering pipeline run",src:i(45863).A+"",title:"Triggering pipeline run",width:"1917",height:"1083"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"After first project scan, sonar creates Quality Gate for this project, and scan will be failed, rerun pipeline to analyze project with new Quality Gates."})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To check the status of the build pipeline, click on its name:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Pipelinerun logs",src:i(99326).A+"",title:"Pipelinerun logs",width:"1916",height:"1084"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Once the build fails, click the failed stage name to open the Tekton pipeline run:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Failure details",src:i(9765).A+"",title:"Failure details",width:"1918",height:"1085"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In KubeRocketCI, initiate the build pipeline again and wait for its completion."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Successful pipelinerun",src:i(7225).A+"",title:"Successful pipelinerun",width:"1917",height:"1083"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Build pipelines in KubeRocketCI are specifically designed to generate an executable image of an application. Once the build process is complete, the resulting image can be deployed and run in a target environment."}),"\n",(0,t.jsxs)(n.p,{children:["Now that you have successfully built an application, the next step is to create an environment for deployment. In order to deploy the application, you will need to install and integrate Argo CD. To learn how to install and integrate Argo CD, please refer to the ",(0,t.jsx)(n.a,{href:"/docs/quick-start/integrate-argocd",children:"Integrate Argo CD"})," page."]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},46287:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_marketplace_app-33943a9d5e72d9b246659e8016194abc.png"},90877:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_sonar_project-c8533cc1aea1ef9154450eef4b28c254.png"},19131:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_sonar_project2-1c7614451606e904093f711284a5e751.png"},52187:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/change_default_branch-63dfa7a9b14a7cbef5b6db6088090a8b.png"},94788:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/go_to_source_code-d76436888e98bede03ed156e0dc63393.png"},89040:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/marketplace_application-0363ebeb5b5ada98d96ccb4d2313acaf.png"},75677:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/marketplace_notification-cef01fd43679d686b2d2411d3b544365.png"},99326:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/pipelinerun_status-ed4e03fd7120efaeba2f62336cf62eaa.png"},97392:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/sonar_org_page-41ea0f0e5beb27f8a55bad86b1b3a99a.png"},9765:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/sonar_step_status-9586b2e8b1954284400370c2be02e18b.png"},7225:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/successful_pipeline-42b8fa9be9369e4bcdf683659b415304.png"},45863:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/trigger_pipeline_run-47ca774e9ecfe6dabd03a7712168764d.png"},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var t=i(96540);const s={},a=t.createContext(s);function r(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[265],{72663:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=i(74848),s=i(28453);const a={},c="Create Application",r={id:"quick-start/create-application",title:"Create Application",description:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components.",source:"@site/versioned_docs/version-3.9.0/quick-start/create-application.md",sourceDirName:"quick-start",slug:"/quick-start/create-application",permalink:"/docs/quick-start/create-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/create-application.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate DockerHub",permalink:"/docs/quick-start/integrate-container-registry"},next:{title:"Integrate Argo CD",permalink:"/docs/quick-start/integrate-argocd"}},o={},l=[{value:"Application Onboarding",id:"application-onboarding",level:2},{value:"Build Application",id:"build-application",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"create-application",children:"Create Application"}),"\n",(0,t.jsx)(n.p,{children:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components."}),"\n",(0,t.jsxs)(n.p,{children:["This guide will walk you through the process of creating a Go application using the Gin framework. The ",(0,t.jsx)(n.a,{href:"/docs/user-guide/marketplace",children:"Marketplace"})," will be used to streamline the application creation process."]}),"\n",(0,t.jsx)(n.h2,{id:"application-onboarding",children:"Application Onboarding"}),"\n",(0,t.jsx)(n.p,{children:"To create the first application, complete the instructions below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the KubeRocketCI, navigate to ",(0,t.jsx)(n.strong,{children:"Marketplace"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Marketplace"})," section, select ",(0,t.jsx)(n.strong,{children:"Web Applications with Gin Framework"}),":"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace applications",src:i(89040).A+"",title:"Marketplace applications",width:"1916",height:"927"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the appeared window, define the following values and click ",(0,t.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Component name: ",(0,t.jsx)(n.code,{children:"my-go-gin-app"})]}),"\n",(0,t.jsxs)(n.li,{children:["Description: ",(0,t.jsx)(n.code,{children:"My first application"})]}),"\n",(0,t.jsxs)(n.li,{children:["Git server: ",(0,t.jsx)(n.code,{children:"github"})]}),"\n",(0,t.jsxs)(n.li,{children:["Repository name: ",(0,t.jsx)(n.code,{children:"/my-go-gin-app"})]}),"\n",(0,t.jsxs)(n.li,{children:["Codebase versioning type: ",(0,t.jsx)(n.code,{children:"edp"})]}),"\n",(0,t.jsxs)(n.li,{children:["Start version from: ",(0,t.jsx)(n.code,{children:"0.1.0"})]}),"\n",(0,t.jsxs)(n.li,{children:["Suffix: ",(0,t.jsx)(n.code,{children:"SNAPSHOT"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Application blank",src:i(46287).A+"",title:"Application blank",width:"959",height:"412"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["As soon as the codebase is created, navigate to it via the notification at the bottom left corner or click the ",(0,t.jsx)(n.strong,{children:"Components"})," section:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace notification",src:i(75677).A+"",title:"Marketplace notification",width:"1917",height:"925"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"build-application",children:"Build Application"}),"\n",(0,t.jsx)(n.p,{children:"Having created the Go application, proceed to build it by performing the following actions:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.a,{href:"https://sonarcloud.io/projects/create",children:"create project"})," page add new project to analyze it."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Project name in the Sonar cloud must be the same as codebase name."})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Add new project",src:i(90877).A+"",title:"Add new project",width:"1917",height:"1084"})}),"\n",(0,t.jsx)(n.p,{children:"Set the Previous version option and click Create project."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Add new project",src:i(19131).A+"",title:"Add new project",width:"1917",height:"1083"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the project menu, navigate to ",(0,t.jsx)(n.strong,{children:"Branches"})," menu, select ",(0,t.jsx)(n.code,{children:"master"})," branch and rename it to ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Change default branch",src:i(52187).A+"",title:"Change default branch",width:"1916",height:"1083"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["On the ",(0,t.jsx)(n.a,{href:"https://sonarcloud.io/account/organizations",children:"account settings"})," copy the value of the SonarCloud organization name."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Organizations page",src:i(97392).A+"",title:"Organizations page",width:"1920",height:"1088"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the component details page, expand the application and click the ",(0,t.jsx)(n.strong,{children:"GIT"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Marketplace notification",src:i(94788).A+"",title:"Application details",width:"1917",height:"1084"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the opened Source Code. In the ",(0,t.jsx)(n.code,{children:"main"})," branch in GitHub, open the ",(0,t.jsx)(n.code,{children:"sonar-project.properties"})," file and include the ",(0,t.jsx)(n.code,{children:"sonar.language=go"}),", and ",(0,t.jsx)(n.code,{children:"sonar.organization"})," parameters where ",(0,t.jsx)(n.code,{children:"sonar.organization"})," is equal to the value copied in the previous step, resulting in the following configuration:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ini",children:"sonar.projectKey=my-go-gin-app\nsonar.projectName=my-go-gin-app\nsonar.go.coverage.reportPaths=coverage.out\nsonar.test.inclusions=**/*_test.go\nsonar.exclusions=**/cmd/**,**/deploy/**,**/deploy-templates/**,**/*.groovy,**/config/**\nsonar.language=go\nsonar.organization=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Commit the changes."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the component details page, click the ",(0,t.jsx)(n.strong,{children:"Trigger build pipeline run"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Triggering pipeline run",src:i(45863).A+"",title:"Triggering pipeline run",width:"1917",height:"1083"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"After first project scan, sonar creates Quality Gate for this project, and scan will be failed, rerun pipeline to analyze project with new Quality Gates."})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"To check the status of the build pipeline, click on its name:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Pipelinerun logs",src:i(99326).A+"",title:"Pipelinerun logs",width:"1916",height:"1084"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Once the build fails, click the failed stage name to open the Tekton pipeline run:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Failure details",src:i(9765).A+"",title:"Failure details",width:"1918",height:"1085"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"In KubeRocketCI, initiate the build pipeline again and wait for its completion."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Successful pipelinerun",src:i(7225).A+"",title:"Successful pipelinerun",width:"1917",height:"1083"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Build pipelines in KubeRocketCI are specifically designed to generate an executable image of an application. Once the build process is complete, the resulting image can be deployed and run in a target environment."}),"\n",(0,t.jsxs)(n.p,{children:["Now that you have successfully built an application, the next step is to create an environment for deployment. In order to deploy the application, you will need to install and integrate Argo CD. To learn how to install and integrate Argo CD, please refer to the ",(0,t.jsx)(n.a,{href:"/docs/quick-start/integrate-argocd",children:"Integrate Argo CD"})," page."]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},46287:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_marketplace_app-33943a9d5e72d9b246659e8016194abc.png"},90877:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_sonar_project-d011f579229c29a9137fb20fc3eb6570.png"},19131:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_sonar_project2-734a4e8019af31d2bc7e1284e5b5e075.png"},52187:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/change_default_branch-b5d7cc59a139ba1915fba1199c463bf7.png"},94788:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/go_to_source_code-f30ed36235c4c32281e8573c4cb96e57.png"},89040:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/marketplace_application-0363ebeb5b5ada98d96ccb4d2313acaf.png"},75677:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/marketplace_notification-cef01fd43679d686b2d2411d3b544365.png"},99326:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/pipelinerun_status-789c6059fff8283cbbcf5c4cb1c391c0.png"},97392:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/sonar_org_page-41ea0f0e5beb27f8a55bad86b1b3a99a.png"},9765:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/sonar_step_status-7930d8f3b26b952cd35bee242acd1124.png"},7225:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/successful_pipeline-f844652be7b58b48d092d03f24a77603.png"},45863:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/trigger_pipeline_run-465dc6cba452032b7614e0c2d53254e1.png"},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>r});var t=i(96540);const s={},a=t.createContext(s);function c(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3a156fb0.b7cf4fb4.js b/assets/js/3a156fb0.f4a66d31.js similarity index 89% rename from assets/js/3a156fb0.b7cf4fb4.js rename to assets/js/3a156fb0.f4a66d31.js index 58f3fe219..9a90024a8 100644 --- a/assets/js/3a156fb0.b7cf4fb4.js +++ b/assets/js/3a156fb0.f4a66d31.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6607],{17645:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var i=t(74848),a=t(28453);const s={},r="Create Application",c={id:"quick-start/create-application",title:"Create Application",description:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components.",source:"@site/docs/quick-start/create-application.md",sourceDirName:"quick-start",slug:"/quick-start/create-application",permalink:"/docs/next/quick-start/create-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/create-application.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate DockerHub",permalink:"/docs/next/quick-start/integrate-container-registry"},next:{title:"Integrate Argo CD",permalink:"/docs/next/quick-start/integrate-argocd"}},o={},l=[{value:"Application Onboarding",id:"application-onboarding",level:2},{value:"Build Application",id:"build-application",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"create-application",children:"Create Application"}),"\n",(0,i.jsx)(n.p,{children:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components."}),"\n",(0,i.jsxs)(n.p,{children:["This guide will walk you through the process of creating a Go application using the Gin framework. The ",(0,i.jsx)(n.a,{href:"/docs/next/user-guide/marketplace",children:"Marketplace"})," will be used to streamline the application creation process."]}),"\n",(0,i.jsx)(n.h2,{id:"application-onboarding",children:"Application Onboarding"}),"\n",(0,i.jsx)(n.p,{children:"To create the first application, complete the instructions below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the KubeRocketCI, navigate to ",(0,i.jsx)(n.strong,{children:"Marketplace"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Marketplace"})," section, select ",(0,i.jsx)(n.strong,{children:"Web Applications with Gin Framework"}),":"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace applications",src:t(54118).A+"",title:"Marketplace applications",width:"1916",height:"927"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the appeared window, define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Component name: ",(0,i.jsx)(n.code,{children:"my-go-gin-app"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"My first application"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository name: ",(0,i.jsx)(n.code,{children:"/my-go-gin-app"})]}),"\n",(0,i.jsxs)(n.li,{children:["Codebase versioning type: ",(0,i.jsx)(n.code,{children:"edp"})]}),"\n",(0,i.jsxs)(n.li,{children:["Start version from: ",(0,i.jsx)(n.code,{children:"0.1.0"})]}),"\n",(0,i.jsxs)(n.li,{children:["Suffix: ",(0,i.jsx)(n.code,{children:"SNAPSHOT"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Application blank",src:t(35973).A+"",title:"Application blank",width:"959",height:"412"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["As soon as the codebase is created, navigate to it via the notification at the bottom left corner or click the ",(0,i.jsx)(n.strong,{children:"Components"})," section:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace notification",src:t(7147).A+"",title:"Marketplace notification",width:"1917",height:"925"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"build-application",children:"Build Application"}),"\n",(0,i.jsx)(n.p,{children:"Having created the Go application, proceed to build it by performing the following actions:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/projects/create",children:"create project"})," page add new project to analyze it."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Project name in the Sonar cloud must be the same as codebase name."})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Add new project",src:t(76031).A+"",title:"Add new project",width:"1917",height:"1084"})}),"\n",(0,i.jsx)(n.p,{children:"Set the Previous version option and click Create project."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Add new project",src:t(21213).A+"",title:"Add new project",width:"1917",height:"1083"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["On the project menu, navigate to ",(0,i.jsx)(n.strong,{children:"Branches"})," menu, select ",(0,i.jsx)(n.code,{children:"master"})," branch and rename it to ",(0,i.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Change default branch",src:t(99133).A+"",title:"Change default branch",width:"1916",height:"1083"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["On the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/account/organizations",children:"account settings"})," copy the value of the SonarCloud organization name."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Organizations page",src:t(37654).A+"",title:"Organizations page",width:"1920",height:"1088"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the component details page, expand the application and click the ",(0,i.jsx)(n.strong,{children:"GIT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace notification",src:t(85718).A+"",title:"Application details",width:"1917",height:"1084"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the opened Source Code. In the ",(0,i.jsx)(n.code,{children:"main"})," branch in GitHub, open the ",(0,i.jsx)(n.code,{children:"sonar-project.properties"})," file and include the ",(0,i.jsx)(n.code,{children:"sonar.language=go"}),", and ",(0,i.jsx)(n.code,{children:"sonar.organization"})," parameters where ",(0,i.jsx)(n.code,{children:"sonar.organization"})," is equal to the value copied in the previous step, resulting in the following configuration:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ini",children:"sonar.projectKey=my-go-gin-app\nsonar.projectName=my-go-gin-app\nsonar.go.coverage.reportPaths=coverage.out\nsonar.test.inclusions=**/*_test.go\nsonar.exclusions=**/cmd/**,**/deploy/**,**/deploy-templates/**,**/*.groovy,**/config/**\nsonar.language=go\nsonar.organization=\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Commit the changes."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the component details page, click the ",(0,i.jsx)(n.strong,{children:"Trigger build pipeline run"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Triggering pipeline run",src:t(47377).A+"",title:"Triggering pipeline run",width:"1917",height:"1083"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"After first project scan, sonar creates Quality Gate for this project, and scan will be failed, rerun pipeline to analyze project with new Quality Gates."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"To check the status of the build pipeline, click on its name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelinerun logs",src:t(39172).A+"",title:"Pipelinerun logs",width:"1916",height:"1084"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once the build fails, click the failed stage name to open the Tekton pipeline run:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Failure details",src:t(45787).A+"",title:"Failure details",width:"1918",height:"1085"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In KubeRocketCI, initiate the build pipeline again and wait for its completion."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Successful pipelinerun",src:t(55979).A+"",title:"Successful pipelinerun",width:"1917",height:"1083"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Build pipelines in KubeRocketCI are specifically designed to generate an executable image of an application. Once the build process is complete, the resulting image can be deployed and run in a target environment."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have successfully built an application, the next step is to create an environment for deployment. In order to deploy the application, you will need to install and integrate Argo CD. To learn how to install and integrate Argo CD, please refer to the ",(0,i.jsx)(n.a,{href:"/docs/next/quick-start/integrate-argocd",children:"Integrate Argo CD"})," page."]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},35973:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_marketplace_app-33943a9d5e72d9b246659e8016194abc.png"},76031:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_sonar_project-c8533cc1aea1ef9154450eef4b28c254.png"},21213:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_sonar_project2-1c7614451606e904093f711284a5e751.png"},99133:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/change_default_branch-63dfa7a9b14a7cbef5b6db6088090a8b.png"},85718:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/go_to_source_code-d76436888e98bede03ed156e0dc63393.png"},54118:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/marketplace_application-0363ebeb5b5ada98d96ccb4d2313acaf.png"},7147:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/marketplace_notification-cef01fd43679d686b2d2411d3b544365.png"},39172:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelinerun_status-ed4e03fd7120efaeba2f62336cf62eaa.png"},37654:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonar_org_page-41ea0f0e5beb27f8a55bad86b1b3a99a.png"},45787:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonar_step_status-9586b2e8b1954284400370c2be02e18b.png"},55979:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/successful_pipeline-42b8fa9be9369e4bcdf683659b415304.png"},47377:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/trigger_pipeline_run-47ca774e9ecfe6dabd03a7712168764d.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var i=t(96540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6607],{17645:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var i=t(74848),s=t(28453);const a={},c="Create Application",r={id:"quick-start/create-application",title:"Create Application",description:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components.",source:"@site/docs/quick-start/create-application.md",sourceDirName:"quick-start",slug:"/quick-start/create-application",permalink:"/docs/next/quick-start/create-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/create-application.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate DockerHub",permalink:"/docs/next/quick-start/integrate-container-registry"},next:{title:"Integrate Argo CD",permalink:"/docs/next/quick-start/integrate-argocd"}},o={},l=[{value:"Application Onboarding",id:"application-onboarding",level:2},{value:"Build Application",id:"build-application",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"create-application",children:"Create Application"}),"\n",(0,i.jsx)(n.p,{children:"In KubeRocketCI, all software components, such as applications, libraries, Terraform infrastructures, and automated tests, are referred to as codebases. KubeRocketCI provides flexible methods for scaffolding these components."}),"\n",(0,i.jsxs)(n.p,{children:["This guide will walk you through the process of creating a Go application using the Gin framework. The ",(0,i.jsx)(n.a,{href:"/docs/next/user-guide/marketplace",children:"Marketplace"})," will be used to streamline the application creation process."]}),"\n",(0,i.jsx)(n.h2,{id:"application-onboarding",children:"Application Onboarding"}),"\n",(0,i.jsx)(n.p,{children:"To create the first application, complete the instructions below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the KubeRocketCI, navigate to ",(0,i.jsx)(n.strong,{children:"Marketplace"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Marketplace"})," section, select ",(0,i.jsx)(n.strong,{children:"Web Applications with Gin Framework"}),":"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace applications",src:t(54118).A+"",title:"Marketplace applications",width:"1916",height:"927"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the appeared window, define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Component name: ",(0,i.jsx)(n.code,{children:"my-go-gin-app"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"My first application"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository name: ",(0,i.jsx)(n.code,{children:"/my-go-gin-app"})]}),"\n",(0,i.jsxs)(n.li,{children:["Codebase versioning type: ",(0,i.jsx)(n.code,{children:"edp"})]}),"\n",(0,i.jsxs)(n.li,{children:["Start version from: ",(0,i.jsx)(n.code,{children:"0.1.0"})]}),"\n",(0,i.jsxs)(n.li,{children:["Suffix: ",(0,i.jsx)(n.code,{children:"SNAPSHOT"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Application blank",src:t(35973).A+"",title:"Application blank",width:"959",height:"412"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["As soon as the codebase is created, navigate to it via the notification at the bottom left corner or click the ",(0,i.jsx)(n.strong,{children:"Components"})," section:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace notification",src:t(7147).A+"",title:"Marketplace notification",width:"1917",height:"925"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"build-application",children:"Build Application"}),"\n",(0,i.jsx)(n.p,{children:"Having created the Go application, proceed to build it by performing the following actions:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/projects/create",children:"create project"})," page add new project to analyze it."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Project name in the Sonar cloud must be the same as codebase name."})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Add new project",src:t(76031).A+"",title:"Add new project",width:"1917",height:"1084"})}),"\n",(0,i.jsx)(n.p,{children:"Set the Previous version option and click Create project."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Add new project",src:t(21213).A+"",title:"Add new project",width:"1917",height:"1083"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["On the project menu, navigate to ",(0,i.jsx)(n.strong,{children:"Branches"})," menu, select ",(0,i.jsx)(n.code,{children:"master"})," branch and rename it to ",(0,i.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Change default branch",src:t(99133).A+"",title:"Change default branch",width:"1916",height:"1083"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["On the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/account/organizations",children:"account settings"})," copy the value of the SonarCloud organization name."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Organizations page",src:t(37654).A+"",title:"Organizations page",width:"1920",height:"1088"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the component details page, expand the application and click the ",(0,i.jsx)(n.strong,{children:"GIT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Marketplace notification",src:t(85718).A+"",title:"Application details",width:"1917",height:"1084"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the opened Source Code. In the ",(0,i.jsx)(n.code,{children:"main"})," branch in GitHub, open the ",(0,i.jsx)(n.code,{children:"sonar-project.properties"})," file and include the ",(0,i.jsx)(n.code,{children:"sonar.language=go"}),", and ",(0,i.jsx)(n.code,{children:"sonar.organization"})," parameters where ",(0,i.jsx)(n.code,{children:"sonar.organization"})," is equal to the value copied in the previous step, resulting in the following configuration:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-ini",children:"sonar.projectKey=my-go-gin-app\nsonar.projectName=my-go-gin-app\nsonar.go.coverage.reportPaths=coverage.out\nsonar.test.inclusions=**/*_test.go\nsonar.exclusions=**/cmd/**,**/deploy/**,**/deploy-templates/**,**/*.groovy,**/config/**\nsonar.language=go\nsonar.organization=\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Commit the changes."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the component details page, click the ",(0,i.jsx)(n.strong,{children:"Trigger build pipeline run"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Triggering pipeline run",src:t(47377).A+"",title:"Triggering pipeline run",width:"1917",height:"1083"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"After first project scan, sonar creates Quality Gate for this project, and scan will be failed, rerun pipeline to analyze project with new Quality Gates."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"To check the status of the build pipeline, click on its name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelinerun logs",src:t(39172).A+"",title:"Pipelinerun logs",width:"1916",height:"1084"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once the build fails, click the failed stage name to open the Tekton pipeline run:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Failure details",src:t(45787).A+"",title:"Failure details",width:"1918",height:"1085"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In KubeRocketCI, initiate the build pipeline again and wait for its completion."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Successful pipelinerun",src:t(55979).A+"",title:"Successful pipelinerun",width:"1917",height:"1083"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Build pipelines in KubeRocketCI are specifically designed to generate an executable image of an application. Once the build process is complete, the resulting image can be deployed and run in a target environment."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have successfully built an application, the next step is to create an environment for deployment. In order to deploy the application, you will need to install and integrate Argo CD. To learn how to install and integrate Argo CD, please refer to the ",(0,i.jsx)(n.a,{href:"/docs/next/quick-start/integrate-argocd",children:"Integrate Argo CD"})," page."]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},35973:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_marketplace_app-33943a9d5e72d9b246659e8016194abc.png"},76031:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_sonar_project-d011f579229c29a9137fb20fc3eb6570.png"},21213:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/add_sonar_project2-734a4e8019af31d2bc7e1284e5b5e075.png"},99133:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/change_default_branch-b5d7cc59a139ba1915fba1199c463bf7.png"},85718:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/go_to_source_code-f30ed36235c4c32281e8573c4cb96e57.png"},54118:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/marketplace_application-0363ebeb5b5ada98d96ccb4d2313acaf.png"},7147:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/marketplace_notification-cef01fd43679d686b2d2411d3b544365.png"},39172:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelinerun_status-789c6059fff8283cbbcf5c4cb1c391c0.png"},37654:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonar_org_page-41ea0f0e5beb27f8a55bad86b1b3a99a.png"},45787:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonar_step_status-7930d8f3b26b952cd35bee242acd1124.png"},55979:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/successful_pipeline-f844652be7b58b48d092d03f24a77603.png"},47377:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/trigger_pipeline_run-465dc6cba452032b7614e0c2d53254e1.png"},28453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>r});var i=t(96540);const s={},a=i.createContext(s);function c(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/47a85c86.83951802.js b/assets/js/47a85c86.43a07f74.js similarity index 99% rename from assets/js/47a85c86.83951802.js rename to assets/js/47a85c86.43a07f74.js index f9c8225bf..5bee349bc 100644 --- a/assets/js/47a85c86.83951802.js +++ b/assets/js/47a85c86.43a07f74.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4693],{10527:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>o,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=i(74848),s=i(28453);const r={},c="Integrate GitHub",d={id:"quick-start/integrate-github",title:"Integrate GitHub",description:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.",source:"@site/docs/quick-start/integrate-github.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-github",permalink:"/docs/next/quick-start/integrate-github",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-github.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate SonarQube",permalink:"/docs/next/quick-start/integrate-sonarcloud"},next:{title:"Integrate DockerHub",permalink:"/docs/next/quick-start/integrate-container-registry"}},a={},u=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"integrate-github",children:"Integrate GitHub"}),"\n",(0,t.jsx)(n.p,{children:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.\nThis tutorial focuses on the create strategy, wherein an application is directly created in the integrated VCS solution for subsequent work. Here, you will find instructions on how to integrate KubeRocketCI with GitHub."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Prior to moving forward, ensure you possess an active GitHub account and have successfully deployed the platform."})}),"\n",(0,t.jsx)(n.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,t.jsx)(n.p,{children:"To integrate KubeRocketCI with GitHub, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate an SSH key pair:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'ssh-keygen -t ed25519 -C "email@example.com"\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the created SSH key (the public part) to the GitHub account:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the GitHub main page, click your user icon. Navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"SSH and GPG keys"})," and click ",(0,t.jsx)(n.strong,{children:"New SSH key"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"quick_start"})," key. Insert your ",(0,t.jsx)(n.code,{children:"ed25519.pub"})," key data and click ",(0,t.jsx)(n.strong,{children:"Add SSH key"}),":"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(52918).A+"",title:"Repo permission",width:"1902",height:"930"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Generate an ",(0,t.jsx)(n.code,{children:"access token"})," for the GitHub account with read/write access to the API:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Log in to GitHub."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the profile account and navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"Developer Settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Select ",(0,t.jsx)(n.strong,{children:"Personal access tokens (classic)"})," and generate a new token with the following permissions:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(82870).A+"",title:"Repo permission",width:"756",height:"158"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The following (Admin",":repo",", Admin",":org",", and User) access is necessary for the platform to retrieve Pull Request commits, their status, and author information."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Admin permission",src:i(14637).A+"",title:"Admin:repo permission",width:"741",height:"84"}),"\n",(0,t.jsx)(n.img,{alt:"Admin permission",src:i(6203).A+"",title:"Admin:org permission",width:"759",height:"112"}),"\n",(0,t.jsx)(n.img,{alt:"User permission",src:i(51396).A+"",title:"User permission",width:"742",height:"105"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save a new personal access token."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In UI Portal, navigate to ",(0,t.jsx)(n.strong,{children:"Configuration"})," -> ",(0,t.jsx)(n.strong,{children:"Version Control System"})," -> ",(0,t.jsx)(n.strong,{children:"Git Servers"}),". Define the following values and click ",(0,t.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Git provider: select ",(0,t.jsx)(n.code,{children:"GitHub"})]}),"\n",(0,t.jsxs)(n.li,{children:["Host: ",(0,t.jsx)(n.code,{children:"github.com"})]}),"\n",(0,t.jsxs)(n.li,{children:["User: ",(0,t.jsx)(n.code,{children:"git"})]}),"\n",(0,t.jsxs)(n.li,{children:["SSH port: ",(0,t.jsx)(n.code,{children:"22"})]}),"\n",(0,t.jsxs)(n.li,{children:["HTTPS port: ",(0,t.jsx)(n.code,{children:"443"})]}),"\n",(0,t.jsxs)(n.li,{children:["Private SSH key: ",(0,t.jsx)(n.code,{children:"your generated SSH private key"})]}),"\n",(0,t.jsxs)(n.li,{children:["Access token: ",(0,t.jsx)(n.code,{children:"your account token generated in GitHub"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Git Server configuration",src:i(16864).A+"",title:"Git Server configuration",width:"1903",height:"930"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Ensure the Git server has a green status. To store container images, integrate platform with a container registry by navigating to the ",(0,t.jsx)(n.a,{href:"/docs/next/quick-start/integrate-container-registry",children:"Integrate DockerHub"})," page."]})]})}function o(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},82870:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-1-8dbd9be050bb8272e927a193a581973e.png"},14637:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},51396:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},6203:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-4-5f2086df6a9def0da49899efa6b94f0c.png"},52918:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_ssh_key-9e81ecf6c50c05aac49c6c520f04dba0.png"},16864:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github_integration-bd7de16fe6d899d8dd123958d2cb6e61.png"},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4693],{10527:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>o,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=i(74848),s=i(28453);const r={},c="Integrate GitHub",d={id:"quick-start/integrate-github",title:"Integrate GitHub",description:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.",source:"@site/docs/quick-start/integrate-github.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-github",permalink:"/docs/next/quick-start/integrate-github",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-github.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate SonarQube",permalink:"/docs/next/quick-start/integrate-sonarcloud"},next:{title:"Integrate DockerHub",permalink:"/docs/next/quick-start/integrate-container-registry"}},a={},u=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"integrate-github",children:"Integrate GitHub"}),"\n",(0,t.jsx)(n.p,{children:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.\nThis tutorial focuses on the create strategy, wherein an application is directly created in the integrated VCS solution for subsequent work. Here, you will find instructions on how to integrate KubeRocketCI with GitHub."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Prior to moving forward, ensure you possess an active GitHub account and have successfully deployed the platform."})}),"\n",(0,t.jsx)(n.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,t.jsx)(n.p,{children:"To integrate KubeRocketCI with GitHub, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate an SSH key pair:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'ssh-keygen -t ed25519 -C "email@example.com"\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the created SSH key (the public part) to the GitHub account:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the GitHub main page, click your user icon. Navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"SSH and GPG keys"})," and click ",(0,t.jsx)(n.strong,{children:"New SSH key"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"quick_start"})," key. Insert your ",(0,t.jsx)(n.code,{children:"ed25519.pub"})," key data and click ",(0,t.jsx)(n.strong,{children:"Add SSH key"}),":"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(52918).A+"",title:"Repo permission",width:"1902",height:"930"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Generate an ",(0,t.jsx)(n.code,{children:"access token"})," for the GitHub account with read/write access to the API:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Log in to GitHub."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the profile account and navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"Developer Settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Select ",(0,t.jsx)(n.strong,{children:"Personal access tokens (classic)"})," and generate a new token with the following permissions:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(82870).A+"",title:"Repo permission",width:"756",height:"158"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The following (Admin",":repo",", Admin",":org",", and User) access is necessary for the platform to retrieve Pull Request commits, their status, and author information."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Admin permission",src:i(14637).A+"",title:"Admin:repo permission",width:"741",height:"84"}),"\n",(0,t.jsx)(n.img,{alt:"Admin permission",src:i(6203).A+"",title:"Admin:org permission",width:"759",height:"112"}),"\n",(0,t.jsx)(n.img,{alt:"User permission",src:i(51396).A+"",title:"User permission",width:"742",height:"105"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save a new personal access token."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In UI Portal, navigate to ",(0,t.jsx)(n.strong,{children:"Configuration"})," -> ",(0,t.jsx)(n.strong,{children:"Version Control System"})," -> ",(0,t.jsx)(n.strong,{children:"Git Servers"}),". Define the following values and click ",(0,t.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Git provider: select ",(0,t.jsx)(n.code,{children:"GitHub"})]}),"\n",(0,t.jsxs)(n.li,{children:["Host: ",(0,t.jsx)(n.code,{children:"github.com"})]}),"\n",(0,t.jsxs)(n.li,{children:["User: ",(0,t.jsx)(n.code,{children:"git"})]}),"\n",(0,t.jsxs)(n.li,{children:["SSH port: ",(0,t.jsx)(n.code,{children:"22"})]}),"\n",(0,t.jsxs)(n.li,{children:["HTTPS port: ",(0,t.jsx)(n.code,{children:"443"})]}),"\n",(0,t.jsxs)(n.li,{children:["Private SSH key: ",(0,t.jsx)(n.code,{children:"your generated SSH private key"})]}),"\n",(0,t.jsxs)(n.li,{children:["Access token: ",(0,t.jsx)(n.code,{children:"your account token generated in GitHub"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Git Server configuration",src:i(16864).A+"",title:"Git Server configuration",width:"1903",height:"930"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Ensure the Git server has a green status. To store container images, integrate platform with a container registry by navigating to the ",(0,t.jsx)(n.a,{href:"/docs/next/quick-start/integrate-container-registry",children:"Integrate DockerHub"})," page."]})]})}function o(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},82870:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-1-8dbd9be050bb8272e927a193a581973e.png"},14637:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},51396:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},6203:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-4-5f2086df6a9def0da49899efa6b94f0c.png"},52918:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_ssh_key-9e81ecf6c50c05aac49c6c520f04dba0.png"},16864:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github_integration-8b22671b3a88d05a62d88c06cf0cf2a9.png"},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5ac22dca.dd4ab264.js b/assets/js/5ac22dca.e4d03c80.js similarity index 98% rename from assets/js/5ac22dca.dd4ab264.js rename to assets/js/5ac22dca.e4d03c80.js index 7ac03c6af..6bffd670e 100644 --- a/assets/js/5ac22dca.dd4ab264.js +++ b/assets/js/5ac22dca.e4d03c80.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8272],{69163:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var t=n(74848),i=n(28453);const s={},o="Kubernetes Namespace Management",r={id:"operator-guide/auth/namespace-management",title:"Kubernetes Namespace Management",description:"KubeRocketCI deploys applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/namespace-management.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/namespace-management",permalink:"/docs/operator-guide/auth/namespace-management",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/namespace-management.md",tags:[],version:"3.9.0",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719645984e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Tekton Dashboard Authentication",permalink:"/docs/operator-guide/auth/oauth2-proxy"},next:{title:"Sonatype Nexus Repository OSS Integration",permalink:"/docs/operator-guide/artifacts-management/nexus-sonatype"}},c={},p=[{value:"Overview",id:"overview",level:2},{value:"Disable Automatic Namespace Creation",id:"disable-automatic-namespace-creation",level:2},{value:"CD Pipeline Operator RBAC Model",id:"cd-pipeline-operator-rbac-model",level:2},{value:"Related Articles",id:"related-articles",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h1,{id:"kubernetes-namespace-management",children:"Kubernetes Namespace Management"}),"\n",(0,t.jsxs)(a.p,{children:["KubeRocketCI ",(0,t.jsx)(a.a,{href:"/docs/user-guide/add-cd-pipeline",children:"deploys"})," applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management."]}),"\n",(0,t.jsx)(a.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(a.p,{children:["Namespaces are created by the platform when user creates CD Pipelines. The operator creates them according to the specific format: ",(0,t.jsx)(a.code,{children:"--"}),".\nThe ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator",children:"cd-pipeline-operator"})," should have the permissions to automatically create namespaces when deploying applications and delete them when uninstalling applications."]}),"\n",(0,t.jsx)(a.h2,{id:"disable-automatic-namespace-creation",children:"Disable Automatic Namespace Creation"}),"\n",(0,t.jsxs)(a.p,{children:["In certain scenarios, the automatic generation of namespaces might be restricted. For instance, project-specific security protocols might necessitate disabling this feature. This can be achieved by adjusting the ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter within the ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator/blob/release/2.20/deploy-templates/values.yaml#L96",children:"values.yaml"})," file.\nBy default, ",(0,t.jsx)(a.code,{children:"manageNamespace"})," is enabled (true), but it can be toggled off (false). Consequently, users might encounter issues when attempting to deploy applications through the KubeRocketCI Portal UI due to permission constraints:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"Namespace creation error",src:n(38919).A+"",width:"1918",height:"966"})}),"\n",(0,t.jsxs)(a.p,{children:["The error highlighted above indicates the necessity for users to manually create a namespace following the ",(0,t.jsx)(a.code,{children:"--"})," naming convention prior to stage creation. Moreover, the cd-pipeline-operator requires administrative rights to manage the namespace effectively. For instructions on manually creating a namespace, proceed with the steps outlined below:"]}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Create the namespace by running the command below:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:" kubectl create namespace --\n"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"--"})," format for namespaces is set by default but is not mandatory. You can set your custom namespace when creating an Environment."]})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Create the administrator RoleBinding resource by applying the file below with the ",(0,t.jsx)(a.code,{children:"kubectl apply -f grant_admin_permissions.yaml"})," command:"]}),"\n",(0,t.jsx)(a.admonition,{title:"grant_admin_permissions.yaml",type:"note",children:(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-yaml",children:"kind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: edp-cd-pipeline-operator-admin\n namespace: --\nsubjects:\n - kind: ServiceAccount\n name: edp-cd-pipeline-operator\n namespace: edp\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: admin\n"})})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Restart the cd-pipeline-operator deployment, to speedup reconciliation."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"cd-pipeline-operator-rbac-model",children:"CD Pipeline Operator RBAC Model"}),"\n",(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter also defines the resources that will be created depending on the cluster deployed whether it is OpenShift or Kubernetes. This scheme displays the nesting of operator input parameters:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"CD Pipeline Operator Input Parameter Scheme",src:n(6248).A+"",width:"1013",height:"503"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["When deploying application on the OpenShift cluster, the ",(0,t.jsx)(a.code,{children:"registry-view"})," RoleBinding is created in the main namespace."]})}),"\n",(0,t.jsx)(a.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/operator-guide/auth/platform-auth-model",children:"KubeRocketCI Access Model"})}),"\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},38919:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/failed_cd_pipeline_creation-085d99929b25efa9d0f62864f3121b0a.png"},6248:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/manage-namespace-6b0dbb0e006785f7cd5847b3ccbbd636.png"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const i={},s=t.createContext(i);function o(e){const a=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8272],{69163:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var t=n(74848),i=n(28453);const s={},o="Kubernetes Namespace Management",r={id:"operator-guide/auth/namespace-management",title:"Kubernetes Namespace Management",description:"KubeRocketCI deploys applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/namespace-management.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/namespace-management",permalink:"/docs/operator-guide/auth/namespace-management",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/namespace-management.md",tags:[],version:"3.9.0",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719645984e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Tekton Dashboard Authentication",permalink:"/docs/operator-guide/auth/oauth2-proxy"},next:{title:"Sonatype Nexus Repository OSS Integration",permalink:"/docs/operator-guide/artifacts-management/nexus-sonatype"}},c={},p=[{value:"Overview",id:"overview",level:2},{value:"Disable Automatic Namespace Creation",id:"disable-automatic-namespace-creation",level:2},{value:"CD Pipeline Operator RBAC Model",id:"cd-pipeline-operator-rbac-model",level:2},{value:"Related Articles",id:"related-articles",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h1,{id:"kubernetes-namespace-management",children:"Kubernetes Namespace Management"}),"\n",(0,t.jsxs)(a.p,{children:["KubeRocketCI ",(0,t.jsx)(a.a,{href:"/docs/user-guide/add-cd-pipeline",children:"deploys"})," applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management."]}),"\n",(0,t.jsx)(a.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(a.p,{children:["Namespaces are created by the platform when user creates CD Pipelines. The operator creates them according to the specific format: ",(0,t.jsx)(a.code,{children:"--"}),".\nThe ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator",children:"cd-pipeline-operator"})," should have the permissions to automatically create namespaces when deploying applications and delete them when uninstalling applications."]}),"\n",(0,t.jsx)(a.h2,{id:"disable-automatic-namespace-creation",children:"Disable Automatic Namespace Creation"}),"\n",(0,t.jsxs)(a.p,{children:["In certain scenarios, the automatic generation of namespaces might be restricted. For instance, project-specific security protocols might necessitate disabling this feature. This can be achieved by adjusting the ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter within the ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator/blob/release/2.20/deploy-templates/values.yaml#L96",children:"values.yaml"})," file.\nBy default, ",(0,t.jsx)(a.code,{children:"manageNamespace"})," is enabled (true), but it can be toggled off (false). Consequently, users might encounter issues when attempting to deploy applications through the KubeRocketCI Portal UI due to permission constraints:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"Namespace creation error",src:n(38919).A+"",width:"1918",height:"966"})}),"\n",(0,t.jsxs)(a.p,{children:["The error highlighted above indicates the necessity for users to manually create a namespace following the ",(0,t.jsx)(a.code,{children:"--"})," naming convention prior to stage creation. Moreover, the cd-pipeline-operator requires administrative rights to manage the namespace effectively. For instructions on manually creating a namespace, proceed with the steps outlined below:"]}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Create the namespace by running the command below:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:" kubectl create namespace --\n"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"--"})," format for namespaces is set by default but is not mandatory. You can set your custom namespace when creating an Environment."]})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Create the administrator RoleBinding resource by applying the file below with the ",(0,t.jsx)(a.code,{children:"kubectl apply -f grant_admin_permissions.yaml"})," command:"]}),"\n",(0,t.jsx)(a.admonition,{title:"grant_admin_permissions.yaml",type:"note",children:(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-yaml",children:"kind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: edp-cd-pipeline-operator-admin\n namespace: --\nsubjects:\n - kind: ServiceAccount\n name: edp-cd-pipeline-operator\n namespace: edp\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: admin\n"})})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Restart the cd-pipeline-operator deployment, to speedup reconciliation."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"cd-pipeline-operator-rbac-model",children:"CD Pipeline Operator RBAC Model"}),"\n",(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter also defines the resources that will be created depending on the cluster deployed whether it is OpenShift or Kubernetes. This scheme displays the nesting of operator input parameters:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"CD Pipeline Operator Input Parameter Scheme",src:n(6248).A+"",width:"1013",height:"503"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["When deploying application on the OpenShift cluster, the ",(0,t.jsx)(a.code,{children:"registry-view"})," RoleBinding is created in the main namespace."]})}),"\n",(0,t.jsx)(a.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/operator-guide/auth/platform-auth-model",children:"KubeRocketCI Access Model"})}),"\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},38919:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/failed_cd_pipeline_creation-972f79d46a2bcb40b79e309ffa821a81.png"},6248:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/manage-namespace-6b0dbb0e006785f7cd5847b3ccbbd636.png"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const i={},s=t.createContext(i);function o(e){const a=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/775fd917.06e06476.js b/assets/js/775fd917.d1c3f7f4.js similarity index 60% rename from assets/js/775fd917.06e06476.js rename to assets/js/775fd917.d1c3f7f4.js index 6917f4ddb..42acfbbe4 100644 --- a/assets/js/775fd917.06e06476.js +++ b/assets/js/775fd917.d1c3f7f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1305],{73796:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(74848),t=r(28453);const i={},d="Overview",o={id:"operator-guide/auth/platform-auth-model",title:"Overview",description:"In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using custom resources. This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/platform-auth-model.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/platform-auth-model",permalink:"/docs/operator-guide/auth/platform-auth-model",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/platform-auth-model.md",tags:[],version:"3.9.0",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719645984e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Uninstall KubeRocketCI",permalink:"/docs/operator-guide/uninstall-kuberocketci"},next:{title:"Install Keycloak",permalink:"/docs/operator-guide/auth/keycloak"}},c={},l=[{value:"Keycloak",id:"keycloak",level:2},{value:"Realm Roles",id:"realm-roles",level:3},{value:"Realm Groups",id:"realm-groups",level:3},{value:"SonarQube",id:"sonarqube",level:2},{value:"Manage Access via Keycloak",id:"manage-access-via-keycloak",level:3},{value:"KubeRocketCI Approach for Managing Access",id:"kuberocketci-approach-for-managing-access",level:3},{value:"Nexus Repository Manager",id:"nexus-repository-manager",level:2},{value:"Gerrit",id:"gerrit",level:2},{value:"KubeRocketCI Portal and EKS Cluster",id:"kuberocketci-portal-and-eks-cluster",level:2},{value:"Keycloak Groups",id:"keycloak-groups",level:3},{value:"Cluster RBAC Resources",id:"cluster-rbac-resources",level:3},{value:"Grant User Access to the Created Namespaces",id:"grant-user-access-to-the-created-namespaces",level:3},{value:"Argo CD",id:"argo-cd",level:2},{value:"Related Articles",id:"related-articles",level:2}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"overview",children:"Overview"}),"\n",(0,n.jsxs)(s.p,{children:["In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/",children:"custom resources"}),". This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to."]}),"\n",(0,n.jsx)(s.h2,{id:"keycloak",children:"Keycloak"}),"\n",(0,n.jsx)(s.p,{children:"This section explains what realm roles and realm groups are and how they function within Keycloak."}),"\n",(0,n.jsx)(s.p,{children:"The diagram illustrates the authentication flow within a system, where tools such as SonarQube, UI Portal, Nexus, DefectDojo and others are configured as OIDC (OpenID Connect) clients to the edp realm. The edp realm, in turn, acts as an OIDC client to the broker realm, which serves as a proxy to external Identity Providers (IdPs) like Google, Facebook, and Active Directory (AD), supporting both OIDC and SAML protocols."}),"\n",(0,n.jsx)(s.mermaid,{value:'graph TD;\n style edp_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style broker_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style IdP fill:#e1f5fe,stroke:#333,stroke-width:1px,dashed\n ArgoCD["Argo CD"] --\x3e|oidc client| edp_realm["edp (realm)"]\n SonarQube --\x3e|oidc client| edp_realm["edp (realm)"]\n Portal["UI Portal"] --\x3e|oidc client| broker_realm["broker (realm)"]\n Nexus --\x3e|oidc client| edp_realm["edp (realm)"]\n DefectDojo --\x3e|oidc client| edp_realm["edp (realm)"]\n edp_realm --\x3e|"IdP (oidc client)"| broker_realm["broker (realm)"]\n broker_realm --\x3e|"IdP (oidc/saml)"| IdP["IdP (Google, Facebook, AD)"]'}),"\n",(0,n.jsx)(s.h3,{id:"realm-roles",children:"Realm Roles"}),"\n",(0,n.jsxs)(s.p,{children:["The Keycloak realm of ",(0,n.jsx)(s.code,{children:"edp"})," has two realm roles with a composite types named ",(0,n.jsx)(s.code,{children:"administrator"})," and ",(0,n.jsx)(s.code,{children:"developer"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"administrator"})," realm role is designed for users who need administrative access to the tools used in the project.\nThis realm role contains the ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"administrator"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"developer"})," realm role, on the other hand, is designed for users who need access to the development tools used in the project.\nThis realm role also contains the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"developer"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These realm roles have been defined to make it easier to assign groups of rights to users."}),"\n",(0,n.jsx)(s.p,{children:"The table below shows the realm roles and the composite types they relate to."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Role Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Regular Role"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Composite role"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"administrator"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"developer"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-administrators"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-developers"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"realm-groups",children:"Realm Groups"}),"\n",(0,n.jsxs)(s.p,{children:["KubeRocketCI uses two different realms for group management, ",(0,n.jsx)(s.code,{children:"edp"})," and ",(0,n.jsx)(s.code,{children:"broker"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," realm contains two groups that are specifically used for controlling access to Argo CD. These groups are named ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," and ",(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm contains five groups that are used for access control in both the KubeRocketCI portal and EKS cluster. These groups are named ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-deployers"}),",",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Group Name"}),(0,n.jsx)(s.th,{children:"Realm Name"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ArgoCDAdmins"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{children:"broker"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarqube",children:"SonarQube"}),"\n",(0,n.jsx)(s.p,{children:"In the case of SonarQube, there are two ways to manage access: via Keycloak and via KubeRocketCI approach. This sections describes both of the approaches."}),"\n",(0,n.jsx)(s.h3,{id:"manage-access-via-keycloak",children:"Manage Access via Keycloak"}),"\n",(0,n.jsxs)(s.p,{children:["SonarQube access is managed using Keycloak roles in the ",(0,n.jsx)(s.code,{children:"edp"})," realm.\nThe ",(0,n.jsx)(s.code,{children:"sonar-developers"})," and ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," realm roles are the two available roles that determine user access levels.\nTo grant access, the corresponding role must be added to the user in Keycloak."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, a user who needs developer access to SonarQube should be assigned the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," or ",(0,n.jsx)(s.code,{children:"developer"})," composite role in Keycloak."]}),"\n",(0,n.jsx)(s.h3,{id:"kuberocketci-approach-for-managing-access",children:"KubeRocketCI Approach for Managing Access"}),"\n",(0,n.jsx)(s.p,{children:"KubeRocketCI provides its own SonarQube Permission Template, which is used to manage user access and permissions for SonarQube projects."}),"\n",(0,n.jsx)(s.p,{children:"The template is stored in the custom SonarQube resource of the operator, an example of a custom resource can be found below."}),"\n",(0,n.jsx)(s.admonition,{title:"Sonar Permission Template",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: SonarPermissionTemplate\nmetadata:\n name: edp-default\nspec:\n description: KubeRocketCI permission templates (DO NOT REMOVE)\n groupPermissions:\n - groupName: non-interactive-users\n permissions:\n - user\n - groupName: sonar-administrators\n permissions:\n - admin\n - user\n - groupName: sonar-developers\n permissions:\n - codeviewer\n - issueadmin\n - securityhotspotadmin\n - user\n name: edp-default\n projectKeyPattern: .+\n sonarOwner: sonar\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["The SonarQube Permission Template contains three groups: ",(0,n.jsx)(s.code,{children:"non-interactive-users"}),", ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," and ",(0,n.jsx)(s.code,{children:"sonar-developers"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"non-interactive-users"})," are users who do not require direct access to the SonarQube project but need to be informed about the project's status and progress. This group has read-only access to the project, which means that they can view the project's data and metrics but cannot modify or interact with it in any way."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-administrators"})," are users who have full control over the SonarQube project. They have the ability to create, modify, and delete projects, as well as manage user access and permissions. This group also has the ability to configure SonarQube settings and perform other administrative tasks."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-developers"})," are users who are actively working on the SonarQube project. They have read and write access to the project, which means that they can modify the project's data and metrics. This group also has the ability to configure project-specific settings and perform other development tasks."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These groups are designed to provide different levels of access to the SonarQube project, depending on the user's role and responsibilities."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If a user has no group, it will have the ",(0,n.jsx)(s.code,{children:"sonar-users"})," group by default. This group does not have any permissions\nin the ",(0,n.jsx)(s.code,{children:"edp-default"})," Permission Template."]})}),"\n",(0,n.jsx)(s.p,{children:"The permissions that are attached to each of the groups are described below in the table:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{children:"Permissions"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"non-interactive-users"})}),(0,n.jsx)(s.td,{children:"user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-administrators"})}),(0,n.jsx)(s.td,{children:"admin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-developers"})}),(0,n.jsx)(s.td,{children:"codeviewer, issueadmin, securityhotspotadmin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-users"})}),(0,n.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"nexus-repository-manager",children:"Nexus Repository Manager"}),"\n",(0,n.jsx)(s.p,{children:"Users authenticate to Nexus using their Keycloak credentials."}),"\n",(0,n.jsx)(s.p,{children:"During the authentication process, the OAuth2-Proxy receives the user's role from Keycloak."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Only users with either the ",(0,n.jsx)(s.code,{children:"administrator"})," or ",(0,n.jsx)(s.code,{children:"developer"})," role in Keycloak can access Nexus."]})}),"\n",(0,n.jsxs)(s.p,{children:["Nexus has four distinct roles available, including ",(0,n.jsx)(s.code,{children:"edp-admin"}),", ",(0,n.jsx)(s.code,{children:"edp-viewer"}),", ",(0,n.jsx)(s.code,{children:"nx-admin"})," and ",(0,n.jsx)(s.code,{children:"nx-anonymous"}),".\nTo grant the user access to one or more of these roles, an entry must be added to the custom Nexus resource."]}),"\n",(0,n.jsxs)(s.p,{children:["For instance, in the context of the custom Nexus resource, the user ",(0,n.jsx)(s.code,{children:"user_1@example.com"})," has been assigned the ",(0,n.jsx)(s.code,{children:"nx-admin"})," role.\nAn example can be found below:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Nexus",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: Nexus\nmetadata:\n name: nexus\nspec:\n basePath: /\n edpSpec:\n dnsWildcard: example.com\n keycloakSpec:\n enabled: false\n roles:\n - developer\n - administrator\n users:\n - roles:\n - nx-admin\n username: user_1@example.com\n"})})}),"\n",(0,n.jsx)(s.h2,{id:"gerrit",children:"Gerrit"}),"\n",(0,n.jsx)(s.p,{children:"The user should use their credentials from Keycloak when authenticating to Gerrit."}),"\n",(0,n.jsxs)(s.p,{children:["After logging into Gerrit, the user is not automatically attached to any groups.\nTo add a user to a group, the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," custom resource must be created. This custom resource specifies\nthe user's email address and the name of the group to which they should be added."]}),"\n",(0,n.jsxs)(s.p,{children:["The ConfigMap below is an example of the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Gerrit Group Member",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: GerritGroupMember\nmetadata:\n name: user-admins\nspec:\n accountId: user@user.com\n groupId: Administrators\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["After the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource is created, the user will have the permissions and access levels associated with that group."]}),"\n",(0,n.jsx)(s.h2,{id:"kuberocketci-portal-and-eks-cluster",children:"KubeRocketCI Portal and EKS Cluster"}),"\n",(0,n.jsxs)(s.p,{children:["Both Portal and EKS Cluster use Keycloak groups for controlling access.\nUsers need to be added to the required group in Keycloak to get access.\nThe groups that are used for access control are in the ",(0,n.jsx)(s.code,{children:"broker"})," realm."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"For the Kubernetes cluster to correctly manage access control, Keycloak must be configured as an OpenID Connect (OIDC) provider. Ensure that your Keycloak setup is properly configured for OIDC before proceeding."})}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm keeps Kubernetes OIDC client."]})}),"\n",(0,n.jsx)(s.h3,{id:"keycloak-groups",children:"Keycloak Groups"}),"\n",(0,n.jsx)(s.p,{children:"There are two types of groups provided for users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Independent group: provides the minimum required permission set."}),"\n",(0,n.jsx)(s.li,{children:"Extension group: extends the rights of an independent group."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For example, the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group can be extended with rights from the ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"})," group."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Independent Group"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Extension Group"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Action List"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"View"}),(0,n.jsx)(s.td,{children:"Getting of all namespaced resources"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Build"}),(0,n.jsx)(s.td,{children:"Starting a PipelineRun from KubeRocketCI portal"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Deploy"}),(0,n.jsx)(s.td,{children:"Deploying a new version of application via Argo CD Application"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"View"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Build"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Deploy"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Full Namespace Access"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Originally, the ",(0,n.jsx)(s.code,{children:"edp-oidc-developer"})," group members come solely with the permissions to initiate pipelines. Assigning them to the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group grants necessary permissions to view pipelines in the KubeRocketCI portal."]})}),"\n",(0,n.jsx)(s.h3,{id:"cluster-rbac-resources",children:"Cluster RBAC Resources"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," namespace has five role bindings that provide the necessary permissions for the Keycloak groups\ndescribed above."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Role Binding Name"}),(0,n.jsx)(s.th,{children:"Role Name"}),(0,n.jsx)(s.th,{children:"Groups"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-admin"}),(0,n.jsx)(s.td,{children:"cluster-admin"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-viewer"}),(0,n.jsx)(s.td,{children:"view"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," , ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})]})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["KubeRocketCI provides an aggregate ClusterRole with permissions to view custom KubeRocketCI resources. ClusterRole is named ",(0,n.jsx)(s.code,{children:"edp-aggregate-view-edp"})]})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding will be created in a created namespace by ",(0,n.jsx)(s.code,{children:"cd-pipeline-operator"}),".",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding assign the ",(0,n.jsx)(s.code,{children:"admin"})," role to ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups."]})}),"\n",(0,n.jsx)(s.h3,{id:"grant-user-access-to-the-created-namespaces",children:"Grant User Access to the Created Namespaces"}),"\n",(0,n.jsxs)(s.p,{children:["To provide users with admin or developer privileges for project namespaces, they need to be added to the ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups in Keycloak."]}),"\n",(0,n.jsx)(s.h2,{id:"argo-cd",children:"Argo CD"}),"\n",(0,n.jsx)(s.p,{children:"In Argo CD, groups are specified when creating an AppProject to restrict access to deployed applications.\nTo gain access to deployed applications within a project, the user must be added to their corresponding Argo CD group\nin Keycloak. This ensures that only authorized users can access and modify applications within the project."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["By default, only the ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," group is automatically created in Keycloak."]})}),"\n",(0,n.jsx)(s.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/user-guide/",children:"KubeRocketCI Portal Overview"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/operator-guide/cd/argocd-integration",children:"Argo CD Integration"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>d,x:()=>o});var n=r(96540);const t={},i=n.createContext(t);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1305],{73796:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(74848),t=r(28453);const i={},d="Overview",o={id:"operator-guide/auth/platform-auth-model",title:"Overview",description:"In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using custom resources. This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/platform-auth-model.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/platform-auth-model",permalink:"/docs/operator-guide/auth/platform-auth-model",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/platform-auth-model.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Uninstall KubeRocketCI",permalink:"/docs/operator-guide/uninstall-kuberocketci"},next:{title:"Install Keycloak",permalink:"/docs/operator-guide/auth/keycloak"}},c={},l=[{value:"Keycloak",id:"keycloak",level:2},{value:"Realm Roles",id:"realm-roles",level:3},{value:"Realm Groups",id:"realm-groups",level:3},{value:"SonarQube",id:"sonarqube",level:2},{value:"Manage Access via Keycloak",id:"manage-access-via-keycloak",level:3},{value:"KubeRocketCI Approach for Managing Access",id:"kuberocketci-approach-for-managing-access",level:3},{value:"Nexus Repository Manager",id:"nexus-repository-manager",level:2},{value:"Gerrit",id:"gerrit",level:2},{value:"KubeRocketCI Portal and EKS Cluster",id:"kuberocketci-portal-and-eks-cluster",level:2},{value:"Keycloak Groups",id:"keycloak-groups",level:3},{value:"Cluster RBAC Resources",id:"cluster-rbac-resources",level:3},{value:"Grant User Access to the Created Namespaces",id:"grant-user-access-to-the-created-namespaces",level:3},{value:"Argo CD",id:"argo-cd",level:2},{value:"Related Articles",id:"related-articles",level:2}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"overview",children:"Overview"}),"\n",(0,n.jsxs)(s.p,{children:["In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/",children:"custom resources"}),". This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to."]}),"\n",(0,n.jsx)(s.h2,{id:"keycloak",children:"Keycloak"}),"\n",(0,n.jsx)(s.p,{children:"This section explains what realm roles and realm groups are and how they function within Keycloak."}),"\n",(0,n.jsx)(s.p,{children:"The diagram illustrates the authentication flow within a system, where tools such as SonarQube, UI Portal, Nexus, DefectDojo and others are configured as OIDC (OpenID Connect) clients to the edp realm. The edp realm, in turn, acts as an OIDC client to the broker realm, which serves as a proxy to external Identity Providers (IdPs) like Google, Facebook, and Active Directory (AD), supporting both OIDC and SAML protocols."}),"\n",(0,n.jsx)(s.mermaid,{value:'graph TD;\n style edp_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style broker_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style IdP fill:#e1f5fe,stroke:#333,stroke-width:1px,dashed\n ArgoCD["Argo CD"] --\x3e|oidc client| edp_realm["edp (realm)"]\n SonarQube --\x3e|oidc client| edp_realm["edp (realm)"]\n Portal["UI Portal"] --\x3e|oidc client| broker_realm["broker (realm)"]\n Nexus --\x3e|oidc client| edp_realm["edp (realm)"]\n DefectDojo --\x3e|oidc client| edp_realm["edp (realm)"]\n edp_realm --\x3e|"IdP (oidc client)"| broker_realm["broker (realm)"]\n broker_realm --\x3e|"IdP (oidc/saml)"| IdP["IdP (Google, Facebook, AD)"]'}),"\n",(0,n.jsx)(s.h3,{id:"realm-roles",children:"Realm Roles"}),"\n",(0,n.jsxs)(s.p,{children:["The Keycloak realm of ",(0,n.jsx)(s.code,{children:"edp"})," has two realm roles with a composite types named ",(0,n.jsx)(s.code,{children:"administrator"})," and ",(0,n.jsx)(s.code,{children:"developer"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"administrator"})," realm role is designed for users who need administrative access to the tools used in the project.\nThis realm role contains the ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"administrator"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"developer"})," realm role, on the other hand, is designed for users who need access to the development tools used in the project.\nThis realm role also contains the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"developer"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These realm roles have been defined to make it easier to assign groups of rights to users."}),"\n",(0,n.jsx)(s.p,{children:"The table below shows the realm roles and the composite types they relate to."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Role Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Regular Role"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Composite role"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"administrator"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"developer"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-administrators"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-developers"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"realm-groups",children:"Realm Groups"}),"\n",(0,n.jsxs)(s.p,{children:["KubeRocketCI uses two different realms for group management, ",(0,n.jsx)(s.code,{children:"edp"})," and ",(0,n.jsx)(s.code,{children:"broker"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," realm contains two groups that are specifically used for controlling access to Argo CD. These groups are named ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," and ",(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm contains five groups that are used for access control in both the KubeRocketCI portal and EKS cluster. These groups are named ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-deployers"}),",",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Group Name"}),(0,n.jsx)(s.th,{children:"Realm Name"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ArgoCDAdmins"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{children:"broker"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarqube",children:"SonarQube"}),"\n",(0,n.jsx)(s.p,{children:"In the case of SonarQube, there are two ways to manage access: via Keycloak and via KubeRocketCI approach. This sections describes both of the approaches."}),"\n",(0,n.jsx)(s.h3,{id:"manage-access-via-keycloak",children:"Manage Access via Keycloak"}),"\n",(0,n.jsxs)(s.p,{children:["SonarQube access is managed using Keycloak roles in the ",(0,n.jsx)(s.code,{children:"edp"})," realm.\nThe ",(0,n.jsx)(s.code,{children:"sonar-developers"})," and ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," realm roles are the two available roles that determine user access levels.\nTo grant access, the corresponding role must be added to the user in Keycloak."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, a user who needs developer access to SonarQube should be assigned the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," or ",(0,n.jsx)(s.code,{children:"developer"})," composite role in Keycloak."]}),"\n",(0,n.jsx)(s.h3,{id:"kuberocketci-approach-for-managing-access",children:"KubeRocketCI Approach for Managing Access"}),"\n",(0,n.jsx)(s.p,{children:"KubeRocketCI provides its own SonarQube Permission Template, which is used to manage user access and permissions for SonarQube projects."}),"\n",(0,n.jsx)(s.p,{children:"The template is stored in the custom SonarQube resource of the operator, an example of a custom resource can be found below."}),"\n",(0,n.jsx)(s.admonition,{title:"Sonar Permission Template",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: SonarPermissionTemplate\nmetadata:\n name: edp-default\nspec:\n description: KubeRocketCI permission templates (DO NOT REMOVE)\n groupPermissions:\n - groupName: non-interactive-users\n permissions:\n - user\n - groupName: sonar-administrators\n permissions:\n - admin\n - user\n - groupName: sonar-developers\n permissions:\n - codeviewer\n - issueadmin\n - securityhotspotadmin\n - user\n name: edp-default\n projectKeyPattern: .+\n sonarOwner: sonar\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["The SonarQube Permission Template contains three groups: ",(0,n.jsx)(s.code,{children:"non-interactive-users"}),", ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," and ",(0,n.jsx)(s.code,{children:"sonar-developers"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"non-interactive-users"})," are users who do not require direct access to the SonarQube project but need to be informed about the project's status and progress. This group has read-only access to the project, which means that they can view the project's data and metrics but cannot modify or interact with it in any way."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-administrators"})," are users who have full control over the SonarQube project. They have the ability to create, modify, and delete projects, as well as manage user access and permissions. This group also has the ability to configure SonarQube settings and perform other administrative tasks."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-developers"})," are users who are actively working on the SonarQube project. They have read and write access to the project, which means that they can modify the project's data and metrics. This group also has the ability to configure project-specific settings and perform other development tasks."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These groups are designed to provide different levels of access to the SonarQube project, depending on the user's role and responsibilities."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If a user has no group, it will have the ",(0,n.jsx)(s.code,{children:"sonar-users"})," group by default. This group does not have any permissions\nin the ",(0,n.jsx)(s.code,{children:"edp-default"})," Permission Template."]})}),"\n",(0,n.jsx)(s.p,{children:"The permissions that are attached to each of the groups are described below in the table:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{children:"Permissions"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"non-interactive-users"})}),(0,n.jsx)(s.td,{children:"user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-administrators"})}),(0,n.jsx)(s.td,{children:"admin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-developers"})}),(0,n.jsx)(s.td,{children:"codeviewer, issueadmin, securityhotspotadmin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-users"})}),(0,n.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"nexus-repository-manager",children:"Nexus Repository Manager"}),"\n",(0,n.jsx)(s.p,{children:"Users authenticate to Nexus using their Keycloak credentials."}),"\n",(0,n.jsx)(s.p,{children:"During the authentication process, the OAuth2-Proxy receives the user's role from Keycloak."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Only users with either the ",(0,n.jsx)(s.code,{children:"administrator"})," or ",(0,n.jsx)(s.code,{children:"developer"})," role in Keycloak can access Nexus."]})}),"\n",(0,n.jsxs)(s.p,{children:["Nexus has four distinct roles available, including ",(0,n.jsx)(s.code,{children:"edp-admin"}),", ",(0,n.jsx)(s.code,{children:"edp-viewer"}),", ",(0,n.jsx)(s.code,{children:"nx-admin"})," and ",(0,n.jsx)(s.code,{children:"nx-anonymous"}),".\nTo grant the user access to one or more of these roles, an entry must be added to the custom Nexus resource."]}),"\n",(0,n.jsxs)(s.p,{children:["For instance, in the context of the custom Nexus resource, the user ",(0,n.jsx)(s.code,{children:"user_1@example.com"})," has been assigned the ",(0,n.jsx)(s.code,{children:"nx-admin"})," role.\nAn example can be found below:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Nexus",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: Nexus\nmetadata:\n name: nexus\nspec:\n basePath: /\n edpSpec:\n dnsWildcard: example.com\n keycloakSpec:\n enabled: false\n roles:\n - developer\n - administrator\n users:\n - roles:\n - nx-admin\n username: user_1@example.com\n"})})}),"\n",(0,n.jsx)(s.h2,{id:"gerrit",children:"Gerrit"}),"\n",(0,n.jsx)(s.p,{children:"The user should use their credentials from Keycloak when authenticating to Gerrit."}),"\n",(0,n.jsxs)(s.p,{children:["After logging into Gerrit, the user is not automatically attached to any groups.\nTo add a user to a group, the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," custom resource must be created. This custom resource specifies\nthe user's email address and the name of the group to which they should be added."]}),"\n",(0,n.jsxs)(s.p,{children:["The Custom Resource below is an example of the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Gerrit Group Member",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: GerritGroupMember\nmetadata:\n name: user-admins\nspec:\n accountId: user@user.com\n groupId: Administrators\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["After the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource is created, the user will have the permissions and access levels associated with that group."]}),"\n",(0,n.jsx)(s.h2,{id:"kuberocketci-portal-and-eks-cluster",children:"KubeRocketCI Portal and EKS Cluster"}),"\n",(0,n.jsxs)(s.p,{children:["Both Portal and EKS Cluster use Keycloak groups for controlling access.\nUsers need to be added to the required group in Keycloak to get access.\nThe groups that are used for access control are in the ",(0,n.jsx)(s.code,{children:"broker"})," realm."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"For the Kubernetes cluster to correctly manage access control, Keycloak must be configured as an OpenID Connect (OIDC) provider. Ensure that your Keycloak setup is properly configured for OIDC before proceeding."})}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm keeps Kubernetes OIDC client."]})}),"\n",(0,n.jsx)(s.h3,{id:"keycloak-groups",children:"Keycloak Groups"}),"\n",(0,n.jsx)(s.p,{children:"There are two types of groups provided for users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Independent group: provides the minimum required permission set."}),"\n",(0,n.jsx)(s.li,{children:"Extension group: extends the rights of an independent group."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For example, the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group can be extended with rights from the ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"})," group."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Independent Group"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Extension Group"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Action List"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"View"}),(0,n.jsx)(s.td,{children:"Getting of all namespaced resources"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Build"}),(0,n.jsx)(s.td,{children:"Starting a PipelineRun from KubeRocketCI portal"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Deploy"}),(0,n.jsx)(s.td,{children:"Deploying a new version of application via Argo CD Application"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"View"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Build"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Deploy"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Full Namespace Access"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Originally, the ",(0,n.jsx)(s.code,{children:"edp-oidc-developer"})," group members come solely with the permissions to initiate pipelines. Assigning them to the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group grants necessary permissions to view pipelines in the KubeRocketCI portal."]})}),"\n",(0,n.jsx)(s.h3,{id:"cluster-rbac-resources",children:"Cluster RBAC Resources"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," namespace has five role bindings that provide the necessary permissions for the Keycloak groups\ndescribed above."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Role Binding Name"}),(0,n.jsx)(s.th,{children:"Role Name"}),(0,n.jsx)(s.th,{children:"Groups"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-admin"}),(0,n.jsx)(s.td,{children:"cluster-admin"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-viewer"}),(0,n.jsx)(s.td,{children:"view"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," , ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})]})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["KubeRocketCI provides an aggregate ClusterRole with permissions to view custom KubeRocketCI resources. ClusterRole is named ",(0,n.jsx)(s.code,{children:"edp-aggregate-view-edp"})]})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding will be created in a created namespace by ",(0,n.jsx)(s.code,{children:"cd-pipeline-operator"}),".",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding assign the ",(0,n.jsx)(s.code,{children:"admin"})," role to ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups."]})}),"\n",(0,n.jsx)(s.h3,{id:"grant-user-access-to-the-created-namespaces",children:"Grant User Access to the Created Namespaces"}),"\n",(0,n.jsxs)(s.p,{children:["To provide users with admin or developer privileges for project namespaces, they need to be added to the ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups in Keycloak."]}),"\n",(0,n.jsx)(s.h2,{id:"argo-cd",children:"Argo CD"}),"\n",(0,n.jsx)(s.p,{children:"In Argo CD, groups are specified when creating an AppProject to restrict access to deployed applications.\nTo gain access to deployed applications within a project, the user must be added to their corresponding Argo CD group\nin Keycloak. This ensures that only authorized users can access and modify applications within the project."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["By default, only the ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," group is automatically created in Keycloak."]})}),"\n",(0,n.jsx)(s.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/user-guide/",children:"KubeRocketCI Portal Overview"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/operator-guide/cd/argocd-integration",children:"Argo CD Integration"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>d,x:()=>o});var n=r(96540);const t={},i=n.createContext(t);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a4e2c4f.d5c519d0.js b/assets/js/7a4e2c4f.f0466f14.js similarity index 98% rename from assets/js/7a4e2c4f.d5c519d0.js rename to assets/js/7a4e2c4f.f0466f14.js index d8ed02ea1..5b9dfc368 100644 --- a/assets/js/7a4e2c4f.d5c519d0.js +++ b/assets/js/7a4e2c4f.f0466f14.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[137],{23581:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var t=n(74848),i=n(28453);const s={},o="Kubernetes Namespace Management",r={id:"operator-guide/auth/namespace-management",title:"Kubernetes Namespace Management",description:"KubeRocketCI deploys applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management.",source:"@site/docs/operator-guide/auth/namespace-management.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/namespace-management",permalink:"/docs/next/operator-guide/auth/namespace-management",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/namespace-management.md",tags:[],version:"current",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719417365e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Tekton Dashboard Authentication",permalink:"/docs/next/operator-guide/auth/oauth2-proxy"},next:{title:"Sonatype Nexus Repository OSS Integration",permalink:"/docs/next/operator-guide/artifacts-management/nexus-sonatype"}},c={},p=[{value:"Overview",id:"overview",level:2},{value:"Disable Automatic Namespace Creation",id:"disable-automatic-namespace-creation",level:2},{value:"CD Pipeline Operator RBAC Model",id:"cd-pipeline-operator-rbac-model",level:2},{value:"Related Articles",id:"related-articles",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h1,{id:"kubernetes-namespace-management",children:"Kubernetes Namespace Management"}),"\n",(0,t.jsxs)(a.p,{children:["KubeRocketCI ",(0,t.jsx)(a.a,{href:"/docs/next/user-guide/add-cd-pipeline",children:"deploys"})," applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management."]}),"\n",(0,t.jsx)(a.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(a.p,{children:["Namespaces are created by the platform when user creates CD Pipelines. The operator creates them according to the specific format: ",(0,t.jsx)(a.code,{children:"--"}),".\nThe ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator",children:"cd-pipeline-operator"})," should have the permissions to automatically create namespaces when deploying applications and delete them when uninstalling applications."]}),"\n",(0,t.jsx)(a.h2,{id:"disable-automatic-namespace-creation",children:"Disable Automatic Namespace Creation"}),"\n",(0,t.jsxs)(a.p,{children:["In certain scenarios, the automatic generation of namespaces might be restricted. For instance, project-specific security protocols might necessitate disabling this feature. This can be achieved by adjusting the ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter within the ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator/blob/release/2.20/deploy-templates/values.yaml#L96",children:"values.yaml"})," file.\nBy default, ",(0,t.jsx)(a.code,{children:"manageNamespace"})," is enabled (true), but it can be toggled off (false). Consequently, users might encounter issues when attempting to deploy applications through the KubeRocketCI Portal UI due to permission constraints:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"Namespace creation error",src:n(10249).A+"",width:"1918",height:"966"})}),"\n",(0,t.jsxs)(a.p,{children:["The error highlighted above indicates the necessity for users to manually create a namespace following the ",(0,t.jsx)(a.code,{children:"--"})," naming convention prior to stage creation. Moreover, the cd-pipeline-operator requires administrative rights to manage the namespace effectively. For instructions on manually creating a namespace, proceed with the steps outlined below:"]}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Create the namespace by running the command below:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:" kubectl create namespace --\n"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"--"})," format for namespaces is set by default but is not mandatory. You can set your custom namespace when creating an Environment."]})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Create the administrator RoleBinding resource by applying the file below with the ",(0,t.jsx)(a.code,{children:"kubectl apply -f grant_admin_permissions.yaml"})," command:"]}),"\n",(0,t.jsx)(a.admonition,{title:"grant_admin_permissions.yaml",type:"note",children:(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-yaml",children:"kind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: edp-cd-pipeline-operator-admin\n namespace: --\nsubjects:\n - kind: ServiceAccount\n name: edp-cd-pipeline-operator\n namespace: edp\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: admin\n"})})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Restart the cd-pipeline-operator deployment, to speedup reconciliation."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"cd-pipeline-operator-rbac-model",children:"CD Pipeline Operator RBAC Model"}),"\n",(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter also defines the resources that will be created depending on the cluster deployed whether it is OpenShift or Kubernetes. This scheme displays the nesting of operator input parameters:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"CD Pipeline Operator Input Parameter Scheme",src:n(49482).A+"",width:"1013",height:"503"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["When deploying application on the OpenShift cluster, the ",(0,t.jsx)(a.code,{children:"registry-view"})," RoleBinding is created in the main namespace."]})}),"\n",(0,t.jsx)(a.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/next/operator-guide/auth/platform-auth-model",children:"KubeRocketCI Access Model"})}),"\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},10249:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/failed_cd_pipeline_creation-085d99929b25efa9d0f62864f3121b0a.png"},49482:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/manage-namespace-6b0dbb0e006785f7cd5847b3ccbbd636.png"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const i={},s=t.createContext(i);function o(e){const a=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[137],{23581:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>p});var t=n(74848),i=n(28453);const s={},o="Kubernetes Namespace Management",r={id:"operator-guide/auth/namespace-management",title:"Kubernetes Namespace Management",description:"KubeRocketCI deploys applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management.",source:"@site/docs/operator-guide/auth/namespace-management.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/namespace-management",permalink:"/docs/next/operator-guide/auth/namespace-management",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/namespace-management.md",tags:[],version:"current",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719417365e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Tekton Dashboard Authentication",permalink:"/docs/next/operator-guide/auth/oauth2-proxy"},next:{title:"Sonatype Nexus Repository OSS Integration",permalink:"/docs/next/operator-guide/artifacts-management/nexus-sonatype"}},c={},p=[{value:"Overview",id:"overview",level:2},{value:"Disable Automatic Namespace Creation",id:"disable-automatic-namespace-creation",level:2},{value:"CD Pipeline Operator RBAC Model",id:"cd-pipeline-operator-rbac-model",level:2},{value:"Related Articles",id:"related-articles",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.h1,{id:"kubernetes-namespace-management",children:"Kubernetes Namespace Management"}),"\n",(0,t.jsxs)(a.p,{children:["KubeRocketCI ",(0,t.jsx)(a.a,{href:"/docs/next/user-guide/add-cd-pipeline",children:"deploys"})," applications to namespaces. By default, the platform automatically creates these namespaces. This page provides information on an alternative approach to namespace management."]}),"\n",(0,t.jsx)(a.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsxs)(a.p,{children:["Namespaces are created by the platform when user creates CD Pipelines. The operator creates them according to the specific format: ",(0,t.jsx)(a.code,{children:"--"}),".\nThe ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator",children:"cd-pipeline-operator"})," should have the permissions to automatically create namespaces when deploying applications and delete them when uninstalling applications."]}),"\n",(0,t.jsx)(a.h2,{id:"disable-automatic-namespace-creation",children:"Disable Automatic Namespace Creation"}),"\n",(0,t.jsxs)(a.p,{children:["In certain scenarios, the automatic generation of namespaces might be restricted. For instance, project-specific security protocols might necessitate disabling this feature. This can be achieved by adjusting the ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter within the ",(0,t.jsx)(a.a,{href:"https://github.com/epam/edp-cd-pipeline-operator/blob/release/2.20/deploy-templates/values.yaml#L96",children:"values.yaml"})," file.\nBy default, ",(0,t.jsx)(a.code,{children:"manageNamespace"})," is enabled (true), but it can be toggled off (false). Consequently, users might encounter issues when attempting to deploy applications through the KubeRocketCI Portal UI due to permission constraints:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"Namespace creation error",src:n(10249).A+"",width:"1918",height:"966"})}),"\n",(0,t.jsxs)(a.p,{children:["The error highlighted above indicates the necessity for users to manually create a namespace following the ",(0,t.jsx)(a.code,{children:"--"})," naming convention prior to stage creation. Moreover, the cd-pipeline-operator requires administrative rights to manage the namespace effectively. For instructions on manually creating a namespace, proceed with the steps outlined below:"]}),"\n",(0,t.jsxs)(a.ol,{children:["\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Create the namespace by running the command below:"}),"\n",(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-bash",children:" kubectl create namespace --\n"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"--"})," format for namespaces is set by default but is not mandatory. You can set your custom namespace when creating an Environment."]})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Create the administrator RoleBinding resource by applying the file below with the ",(0,t.jsx)(a.code,{children:"kubectl apply -f grant_admin_permissions.yaml"})," command:"]}),"\n",(0,t.jsx)(a.admonition,{title:"grant_admin_permissions.yaml",type:"note",children:(0,t.jsx)(a.pre,{children:(0,t.jsx)(a.code,{className:"language-yaml",children:"kind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: edp-cd-pipeline-operator-admin\n namespace: --\nsubjects:\n - kind: ServiceAccount\n name: edp-cd-pipeline-operator\n namespace: edp\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: admin\n"})})}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsx)(a.p,{children:"Restart the cd-pipeline-operator deployment, to speedup reconciliation."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(a.h2,{id:"cd-pipeline-operator-rbac-model",children:"CD Pipeline Operator RBAC Model"}),"\n",(0,t.jsxs)(a.p,{children:["The ",(0,t.jsx)(a.code,{children:"manageNamespace"})," parameter also defines the resources that will be created depending on the cluster deployed whether it is OpenShift or Kubernetes. This scheme displays the nesting of operator input parameters:"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"CD Pipeline Operator Input Parameter Scheme",src:n(49482).A+"",width:"1013",height:"503"})}),"\n",(0,t.jsx)(a.admonition,{type:"note",children:(0,t.jsxs)(a.p,{children:["When deploying application on the OpenShift cluster, the ",(0,t.jsx)(a.code,{children:"registry-view"})," RoleBinding is created in the main namespace."]})}),"\n",(0,t.jsx)(a.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/next/operator-guide/auth/platform-auth-model",children:"KubeRocketCI Access Model"})}),"\n",(0,t.jsx)(a.li,{children:(0,t.jsx)(a.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},10249:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/failed_cd_pipeline_creation-972f79d46a2bcb40b79e309ffa821a81.png"},49482:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/manage-namespace-6b0dbb0e006785f7cd5847b3ccbbd636.png"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const i={},s=t.createContext(i);function o(e){const a=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(s.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/87458d22.1c526742.js b/assets/js/87458d22.1c526742.js new file mode 100644 index 000000000..ae81d39e4 --- /dev/null +++ b/assets/js/87458d22.1c526742.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2709],{30239:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var t=i(74848),s=i(28453);const r={},o="Portal OIDC Configuration",a={id:"operator-guide/auth/ui-portal-oidc",title:"Portal OIDC Configuration",description:"This page provides instructions for configuring the OIDC authorization for the KubeRocketCI Portal UI, enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point.",source:"@site/docs/operator-guide/auth/ui-portal-oidc.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/ui-portal-oidc",permalink:"/docs/next/operator-guide/auth/ui-portal-oidc",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/ui-portal-oidc.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Install Keycloak",permalink:"/docs/next/operator-guide/auth/keycloak"},next:{title:"AWS EKS OIDC Integration",permalink:"/docs/next/operator-guide/auth/eks-oidc-integration"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configure Keycloak",id:"configure-keycloak",level:2},{value:"Integrate Portal With Kubernetes",id:"integrate-portal-with-kubernetes",level:2},{value:"Changing the Lifespan of an Access Token",id:"changing-the-lifespan-of-an-access-token",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"portal-oidc-configuration",children:"Portal OIDC Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["This page provides instructions for configuring the ",(0,t.jsx)(n.a,{href:"https://openid.net/connect/",children:"OIDC authorization"})," for the KubeRocketCI ",(0,t.jsx)(n.a,{href:"/docs/next/user-guide/",children:"Portal UI"}),", enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"Ensure the following values are set first before starting the Portal OIDC configuration:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"realm_id"})," = ",(0,t.jsx)(n.strong,{children:"openshift"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"client_id"})," = ",(0,t.jsx)(n.strong,{children:"kubernetes"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"keycloak_client_key"}),"= ",(0,t.jsx)(n.strong,{children:"keycloak_client_secret_key"})," (received from: ",(0,t.jsx)(n.code,{children:"Openshift realm"})," -> ",(0,t.jsx)(n.code,{children:"clients"})," -> ",(0,t.jsx)(n.code,{children:"kubernetes"})," -> ",(0,t.jsx)(n.code,{children:"Credentials"})," -> ",(0,t.jsx)(n.code,{children:"Client secret"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"group"})," = ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"edp-oidc-admins"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-builders"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-deployers"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-developers"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-viewers"})]})," (Should be created manually in the realm from point 1)"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The values indicated above are the result of the Keycloak configuration as an OIDC identity provider.\nTo obtain these values, please refer to the guidelines on the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak OIDC EKS Configuration"})," page."]})}),"\n",(0,t.jsx)(n.h2,{id:"configure-keycloak",children:"Configure Keycloak"}),"\n",(0,t.jsx)(n.p,{children:"To proceed with the Keycloak configuration, perform the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add the URL of the Headlamp to the ",(0,t.jsx)(n.code,{children:"valid_redirect_uris"})," variable in ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak"}),":"]}),"\n",(0,t.jsx)(n.admonition,{title:"keycloak_openid_client",type:"note",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:' valid_redirect_uris = [\n "https://edp-portal./*"\n "http://localhost:8000/*"\n ]\n'})})}),"\n",(0,t.jsx)(n.p,{children:"Make sure to define the following Keycloak client values as indicated:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Keycloak client configuration",src:i(65332).A+"",title:"Keycloak client configuration",width:"567",height:"758"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Configure the Keycloak client key in Kubernetes using the Kubernetes secrets or the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: v1\nkind: Secret\nmetadata:\n name: keycloak-client-headlamp-secret\n namespace: edp\ntype: Opaque\nstringData:\n clientSecret: \n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Assign user to one or more groups in Keycloak."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"integrate-portal-with-kubernetes",children:"Integrate Portal With Kubernetes"}),"\n",(0,t.jsx)(n.p,{children:"Portal is integrated in Kubernetes in three steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Update the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"values.yaml"})," file by enabling OIDC:"]}),"\n",(0,t.jsx)(n.admonition,{title:"values.yaml",type:"note",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"edp-headlamp:\n config:\n oidc:\n enabled: true\n"})})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to Portal UI and log in by clicking the ",(0,t.jsx)(n.code,{children:"Sign In"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Portal login page",src:i(54532).A+"",title:"Portal login page",width:"986",height:"752"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the cluster settings link in the bottom left corner of the UI:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Portal namespace settings",src:i(74154).A+"",title:"Portal namespace settings",width:"3486",height:"2072"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"As a result, it is possible to control access and rights from the Keycloak endpoint."}),"\n",(0,t.jsx)(n.h2,{id:"changing-the-lifespan-of-an-access-token",children:"Changing the Lifespan of an Access Token"}),"\n",(0,t.jsxs)(n.p,{children:["Change the Access Token Lifespan: go to your Keycloak and select ",(0,t.jsx)(n.em,{children:"Openshift realm"})," > ",(0,t.jsx)(n.em,{children:"Realm settings"})," > ",(0,t.jsx)(n.em,{children:"Tokens"})," >\n",(0,t.jsx)(n.em,{children:"Access Token Lifespan"})," > set a new value to the field and save this change."]}),"\n",(0,t.jsx)(n.p,{children:'By default, "Access Token Lifespan" value is 5 minutes.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Access Token Lifespan",src:i(46110).A+"",title:"Access Token Lifespan",width:"3102",height:"1330"})}),"\n",(0,t.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},46110:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/keycloak-access-token-lifespan-28ab4499c62f6cd2167dfe2a8cda62d2.png"},74154:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/edp_portal_ui-956a8403d6f004a932e45bc6dd74cd61.png"},54532:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/headlamp-oidc-headlamp-1-de5d785885e15200e751cc7708459056.png"},65332:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/headlamp-oidc-keycloak-2-7eaec626fabd4d743ffbf8aae9fca87c.png"},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>a});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/87458d22.304c6561.js b/assets/js/87458d22.304c6561.js deleted file mode 100644 index e88bcac16..000000000 --- a/assets/js/87458d22.304c6561.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2709],{30239:(A,e,n)=>{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var t=n(74848),r=n(28453);const i={},a="Portal OIDC Configuration",l={id:"operator-guide/auth/ui-portal-oidc",title:"Portal OIDC Configuration",description:"This page provides instructions for configuring the OIDC authorization for the KubeRocketCI Portal UI, enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point.",source:"@site/docs/operator-guide/auth/ui-portal-oidc.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/ui-portal-oidc",permalink:"/docs/next/operator-guide/auth/ui-portal-oidc",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/ui-portal-oidc.md",tags:[],version:"current",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719487399e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Install Keycloak",permalink:"/docs/next/operator-guide/auth/keycloak"},next:{title:"AWS EKS OIDC Integration",permalink:"/docs/next/operator-guide/auth/eks-oidc-integration"}},s={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configure Keycloak",id:"configure-keycloak",level:2},{value:"Integrate Portal With Kubernetes",id:"integrate-portal-with-kubernetes",level:2},{value:"Changing the Lifespan of an Access Token",id:"changing-the-lifespan-of-an-access-token",level:2},{value:"Related Articles",id:"related-articles",level:2}];function c(A){const e={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...A.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"portal-oidc-configuration",children:"Portal OIDC Configuration"}),"\n",(0,t.jsxs)(e.p,{children:["This page provides instructions for configuring the ",(0,t.jsx)(e.a,{href:"https://openid.net/connect/",children:"OIDC authorization"})," for the KubeRocketCI ",(0,t.jsx)(e.a,{href:"/docs/next/user-guide/",children:"Portal UI"}),", enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point."]}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure the following values are set first before starting the Portal OIDC configuration:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"realm_id"})," = ",(0,t.jsx)(e.strong,{children:"openshift"})]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"client_id"})," = ",(0,t.jsx)(e.strong,{children:"kubernetes"})]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"keycloak_client_key"}),"= ",(0,t.jsx)(e.strong,{children:"keycloak_client_secret_key"})," (received from: ",(0,t.jsx)(e.code,{children:"Openshift realm"})," -> ",(0,t.jsx)(e.code,{children:"clients"})," -> ",(0,t.jsx)(e.code,{children:"kubernetes"})," -> ",(0,t.jsx)(e.code,{children:"Credentials"})," -> ",(0,t.jsx)(e.code,{children:"Client secret"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"group"})," = ",(0,t.jsxs)(e.strong,{children:[(0,t.jsx)(e.code,{children:"edp-oidc-admins"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-builders"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-deployers"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-developers"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-viewers"})]})," (Should be created manually in the realm from point 1)"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.admonition,{type:"note",children:(0,t.jsxs)(e.p,{children:["The values indicated above are the result of the Keycloak configuration as an OIDC identity provider.\nTo obtain these values, please refer to the guidelines on the ",(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak OIDC EKS Configuration"})," page."]})}),"\n",(0,t.jsx)(e.h2,{id:"configure-keycloak",children:"Configure Keycloak"}),"\n",(0,t.jsx)(e.p,{children:"To proceed with the Keycloak configuration, perform the following:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Add the URL of the Headlamp to the ",(0,t.jsx)(e.code,{children:"valid_redirect_uris"})," variable in ",(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak"}),":"]}),"\n",(0,t.jsx)(e.admonition,{title:"keycloak_openid_client",type:"note",children:(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:' valid_redirect_uris = [\n "https://edp-portal./*"\n "http://localhost:8000/*"\n ]\n'})})}),"\n",(0,t.jsx)(e.p,{children:"Make sure to define the following Keycloak client values as indicated:"}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Keycloak client configuration",src:n(65332).A+"",title:"Keycloak client configuration",width:"1620",height:"1433"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Configure the Keycloak client key in Kubernetes using the Kubernetes secrets or the ",(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"apiVersion: v1\nkind: Secret\nmetadata:\n name: keycloak-client-headlamp-secret\n namespace: edp\ntype: Opaque\nstringData:\n clientSecret: \n"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"Assign user to one or more groups in Keycloak."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"integrate-portal-with-kubernetes",children:"Integrate Portal With Kubernetes"}),"\n",(0,t.jsx)(e.p,{children:"Portal is integrated in Kubernetes in three steps:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Update the ",(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"values.yaml"})," file by enabling OIDC:"]}),"\n",(0,t.jsx)(e.admonition,{title:"values.yaml",type:"note",children:(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"edp-headlamp:\n config:\n oidc:\n enabled: true\n"})})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Navigate to Portal UI and log in by clicking the ",(0,t.jsx)(e.code,{children:"Sign In"})," button:"]}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Portal login page",src:n(54532).A+"",title:"Portal login page",width:"500",height:"332"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Go to ",(0,t.jsx)(e.strong,{children:"Account"})," -> ",(0,t.jsx)(e.strong,{children:"Settings"}),", and set up a namespace:"]}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Portal namespace settings",src:n(7743).A+"",title:"Portal namespace settings",width:"1922",height:"868"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"As a result, it is possible to control access and rights from the Keycloak endpoint."}),"\n",(0,t.jsx)(e.h2,{id:"changing-the-lifespan-of-an-access-token",children:"Changing the Lifespan of an Access Token"}),"\n",(0,t.jsxs)(e.p,{children:["Change the Access Token Lifespan: go to your Keycloak and select ",(0,t.jsx)(e.em,{children:"Openshift realm"})," > ",(0,t.jsx)(e.em,{children:"Realm settings"})," > ",(0,t.jsx)(e.em,{children:"Tokens"})," >\n",(0,t.jsx)(e.em,{children:"Access Token Lifespan"})," > set a new value to the field and save this change."]}),"\n",(0,t.jsx)(e.p,{children:'By default, "Access Token Lifespan" value is 5 minutes.'}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Access Token Lifespan",src:n(46110).A+"",title:"Access Token Lifespan",width:"3102",height:"1330"})}),"\n",(0,t.jsx)(e.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"})}),"\n"]})]})}function d(A={}){const{wrapper:e}={...(0,r.R)(),...A.components};return e?(0,t.jsx)(e,{...A,children:(0,t.jsx)(c,{...A})}):c(A)}},46110:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/keycloak-access-token-lifespan-28ab4499c62f6cd2167dfe2a8cda62d2.png"},54532:(A,e,n)=>{n.d(e,{A:()=>t});const t="data:image/png;base64,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"},7743:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/headlamp-oidc-headlamp-2-948da70fd8c70fc4999d382c751f90a8.png"},65332:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/headlamp-oidc-keycloak-2-a5eef33e2162aa911af7fa908ae5f612.png"},28453:(A,e,n)=>{n.d(e,{R:()=>a,x:()=>l});var t=n(96540);const r={},i=t.createContext(r);function a(A){const e=t.useContext(i);return t.useMemo((function(){return"function"==typeof A?A(e):{...e,...A}}),[e,A])}function l(A){let e;return e=A.disableParentContext?"function"==typeof A.components?A.components(r):A.components||r:a(A.components),t.createElement(i.Provider,{value:e},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/9ce0a1f2.d085198c.js b/assets/js/9ce0a1f2.fc465311.js similarity index 95% rename from assets/js/9ce0a1f2.d085198c.js rename to assets/js/9ce0a1f2.fc465311.js index c0080356b..87d87dee6 100644 --- a/assets/js/9ce0a1f2.d085198c.js +++ b/assets/js/9ce0a1f2.fc465311.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[898],{45618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=t(74848),o=t(28453);const r={},a="Integrate SonarQube",s={id:"quick-start/integrate-sonarcloud",title:"Integrate SonarQube",description:"It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the sonar step.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-sonarcloud.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-sonarcloud",permalink:"/docs/quick-start/integrate-sonarcloud",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-sonarcloud.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Install KubeRocketCI",permalink:"/docs/quick-start/platform-installation"},next:{title:"Integrate GitHub",permalink:"/docs/quick-start/integrate-github"}},c={},l=[{value:"Integrate SonarCloud",id:"integrate-sonarcloud",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"integrate-sonarqube",children:"Integrate SonarQube"}),"\n",(0,i.jsxs)(n.p,{children:["It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the ",(0,i.jsx)(n.code,{children:"sonar"})," step."]}),"\n",(0,i.jsx)(n.p,{children:"SonarQube is a powerful tool used in build and code review pipelines to enhance code quality by identifying and reporting issues, as well as providing recommendations for improvement. SonarCloud, the SaaS solution offered by SonarQube, serves this purpose."}),"\n",(0,i.jsx)(n.p,{children:"This guide will walk you through the configuration process of SonarCloud for your project."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["An alternative option is to use an independent ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/code-quality/sonarqube",children:"SonarQube instance"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"integrate-sonarcloud",children:"Integrate SonarCloud"}),"\n",(0,i.jsx)(n.p,{children:"To integrate SonarCloud with the platform, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Sign up in the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io",children:"SonarCloud"})," with your GitHub account."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Once you are logged in with GitHub, on ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/create-organization",children:"organization page"})," import a new one from GitHub:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Import organization",src:t(72764).A+"",title:"Import organization",width:"1920",height:"1088"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"It is crucial to have the organization created in SonarCloud. If you were signed up in SonarCloud using a GitHub account, SonarCloud will suggest you creating an organization with name that is equivalent to your GitHub account name."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the Create an organization menu, choose the free plan and click ",(0,i.jsx)(n.strong,{children:"Create organization"}),":"]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Organization key must be unique."})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create organization",src:t(94474).A+"",title:"Choose plan",width:"1918",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In your account menu, select the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/account/security",children:(0,i.jsx)(n.strong,{children:"Security"})})," tab and generate token:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create organization",src:t(14115).A+"",title:"Generate token",width:"1919",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Code Quality"}),". Define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["URL: ",(0,i.jsx)(n.code,{children:"https://sonarcloud.io"})]}),"\n",(0,i.jsxs)(n.li,{children:["Token: ",(0,i.jsx)(n.code,{children:"account token generated in SonarCloud"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"SonarQube integration",src:t(7252).A+"",title:"SonarQube integration",width:"1915",height:"923"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["After completing the SonarQube integration, proceed to integrate the platform with GitHub. Navigate to the ",(0,i.jsx)(n.a,{href:"/docs/quick-start/integrate-github",children:"Integrate GitHub"})," page for further instructions."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},94474:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/free_plan-d379a58ca4af53e719438da3558aaac1.png"},14115:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/generate_token-8c40095f49820d95e745448b5af27531.png"},72764:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/import_from_github-141342a1700c853cd681de6799fae2b8.png"},7252:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonarqube_integrated-054d773e57b3c224d20d09c40b1c16d7.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>s});var i=t(96540);const o={},r=i.createContext(o);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[898],{45618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=t(74848),o=t(28453);const r={},a="Integrate SonarQube",s={id:"quick-start/integrate-sonarcloud",title:"Integrate SonarQube",description:"It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the sonar step.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-sonarcloud.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-sonarcloud",permalink:"/docs/quick-start/integrate-sonarcloud",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-sonarcloud.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Install KubeRocketCI",permalink:"/docs/quick-start/platform-installation"},next:{title:"Integrate GitHub",permalink:"/docs/quick-start/integrate-github"}},c={},l=[{value:"Integrate SonarCloud",id:"integrate-sonarcloud",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"integrate-sonarqube",children:"Integrate SonarQube"}),"\n",(0,i.jsxs)(n.p,{children:["It is essential for KubeRocketCI to have SonarQube integrated with the platform as all the pipelines include the ",(0,i.jsx)(n.code,{children:"sonar"})," step."]}),"\n",(0,i.jsx)(n.p,{children:"SonarQube is a powerful tool used in build and code review pipelines to enhance code quality by identifying and reporting issues, as well as providing recommendations for improvement. SonarCloud, the SaaS solution offered by SonarQube, serves this purpose."}),"\n",(0,i.jsx)(n.p,{children:"This guide will walk you through the configuration process of SonarCloud for your project."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["An alternative option is to use an independent ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/code-quality/sonarqube",children:"SonarQube instance"}),"."]})}),"\n",(0,i.jsx)(n.h2,{id:"integrate-sonarcloud",children:"Integrate SonarCloud"}),"\n",(0,i.jsx)(n.p,{children:"To integrate SonarCloud with the platform, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Sign up in the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io",children:"SonarCloud"})," with your GitHub account."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Once you are logged in with GitHub, on ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/create-organization",children:"organization page"})," import a new one from GitHub:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Import organization",src:t(72764).A+"",title:"Import organization",width:"1920",height:"1088"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"It is crucial to have the organization created in SonarCloud. If you were signed up in SonarCloud using a GitHub account, SonarCloud will suggest you creating an organization with name that is equivalent to your GitHub account name."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the Create an organization menu, choose the free plan and click ",(0,i.jsx)(n.strong,{children:"Create organization"}),":"]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Organization key must be unique."})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create organization",src:t(94474).A+"",title:"Choose plan",width:"1918",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In your account menu, select the ",(0,i.jsx)(n.a,{href:"https://sonarcloud.io/account/security",children:(0,i.jsx)(n.strong,{children:"Security"})})," tab and generate token:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create organization",src:t(14115).A+"",title:"Generate token",width:"1919",height:"1087"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Code Quality"}),". Define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["URL: ",(0,i.jsx)(n.code,{children:"https://sonarcloud.io"})]}),"\n",(0,i.jsxs)(n.li,{children:["Token: ",(0,i.jsx)(n.code,{children:"account token generated in SonarCloud"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"SonarQube integration",src:t(7252).A+"",title:"SonarQube integration",width:"1915",height:"923"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["After completing the SonarQube integration, proceed to integrate the platform with GitHub. Navigate to the ",(0,i.jsx)(n.a,{href:"/docs/quick-start/integrate-github",children:"Integrate GitHub"})," page for further instructions."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},94474:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/free_plan-e80e59aee0af64d32c66cf4d02a7b23f.png"},14115:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/generate_token-8604001a38a81d5bc7db41764fa12775.png"},72764:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/import_from_github-141342a1700c853cd681de6799fae2b8.png"},7252:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/sonarqube_integrated-b751ffd495817cae0dc95087f5c7dcfc.png"},28453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>s});var i=t(96540);const o={},r=i.createContext(o);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a4b66926.55329941.js b/assets/js/a4b66926.3084025e.js similarity index 97% rename from assets/js/a4b66926.55329941.js rename to assets/js/a4b66926.3084025e.js index 201d8001f..952ea6afd 100644 --- a/assets/js/a4b66926.55329941.js +++ b/assets/js/a4b66926.3084025e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[5727],{51401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var i=n(74848),r=n(28453);const s={},c="Integrate DockerHub",o={id:"quick-start/integrate-container-registry",title:"Integrate DockerHub",description:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub.",source:"@site/docs/quick-start/integrate-container-registry.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-container-registry",permalink:"/docs/next/quick-start/integrate-container-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-container-registry.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate GitHub",permalink:"/docs/next/quick-start/integrate-github"},next:{title:"Create Application",permalink:"/docs/next/quick-start/create-application"}},a={},l=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-dockerhub",children:"Integrate DockerHub"}),"\n",(0,i.jsx)(t.p,{children:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub."}),"\n",(0,i.jsx)(t.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,i.jsx)(t.p,{children:"To integrate KubeRocketCI with DockerHub, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Log in to your DockerHub account."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the DockerHub main page, click your user icon at the top right corner and select ",(0,i.jsx)(t.strong,{children:"Account Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Account Settings"})," page, select the ",(0,i.jsx)(t.strong,{children:"Security"})," tab and click ",(0,i.jsx)(t.strong,{children:"New Access Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Enter the token description, select the ",(0,i.jsx)(t.strong,{children:"Read, Write, Delete"})," permission and click ",(0,i.jsx)(t.strong,{children:"Generate"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Copy the generated token:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub token",src:n(2235).A+"",title:"DockerHub token",width:"1901",height:"864"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Registry"})," and click the ",(0,i.jsx)(t.strong,{children:"Add Registry"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Registry Provider"})," field, select ",(0,i.jsx)(t.strong,{children:"DockerHub"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Registry Endpoint: ",(0,i.jsx)(t.code,{children:"https://docker.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Registry Space: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["User: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["Password/Token: ",(0,i.jsx)(t.code,{children:"Your generated access token"})]}),"\n",(0,i.jsxs)(t.li,{children:["Use the Push Account's credentials: ",(0,i.jsx)(t.code,{children:"check"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub integration",src:n(5318).A+"",title:"DockerHub integration",width:"1914",height:"924"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["In the DockerHub context, the ",(0,i.jsx)(t.strong,{children:"Registry Space"})," field is equivalent to the account/organization name."]})}),"\n",(0,i.jsxs)(t.p,{children:["With all integrations in place, let's proceed to the ",(0,i.jsx)(t.a,{href:"/docs/next/quick-start/create-application",children:"Create Application"})," page for further instructions on how to create applications using KubeRocketCI."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2235:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/dockerhub_token-ddc97b7eebaa305bc693049e503b6e08.png"},5318:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/integrate_docker-8d23ad3284f3deb7e85a6fa7bb405263.png"},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function c(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[5727],{51401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var i=n(74848),r=n(28453);const s={},c="Integrate DockerHub",o={id:"quick-start/integrate-container-registry",title:"Integrate DockerHub",description:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub.",source:"@site/docs/quick-start/integrate-container-registry.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-container-registry",permalink:"/docs/next/quick-start/integrate-container-registry",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-container-registry.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate GitHub",permalink:"/docs/next/quick-start/integrate-github"},next:{title:"Create Application",permalink:"/docs/next/quick-start/create-application"}},a={},l=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"integrate-dockerhub",children:"Integrate DockerHub"}),"\n",(0,i.jsx)(t.p,{children:"KubeRocketCI utilizes container registries for storing and distributing application images. This page provides instructions on integrating your platform with DockerHub."}),"\n",(0,i.jsx)(t.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,i.jsx)(t.p,{children:"To integrate KubeRocketCI with DockerHub, follow the steps below:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Log in to your DockerHub account."}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the DockerHub main page, click your user icon at the top right corner and select ",(0,i.jsx)(t.strong,{children:"Account Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Account Settings"})," page, select the ",(0,i.jsx)(t.strong,{children:"Security"})," tab and click ",(0,i.jsx)(t.strong,{children:"New Access Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Enter the token description, select the ",(0,i.jsx)(t.strong,{children:"Read, Write, Delete"})," permission and click ",(0,i.jsx)(t.strong,{children:"Generate"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Copy the generated token:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub token",src:n(2235).A+"",title:"DockerHub token",width:"1901",height:"864"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(t.strong,{children:"Configuration"})," -> ",(0,i.jsx)(t.strong,{children:"Registry"})," and click the ",(0,i.jsx)(t.strong,{children:"Add Registry"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["In the ",(0,i.jsx)(t.strong,{children:"Registry Provider"})," field, select ",(0,i.jsx)(t.strong,{children:"DockerHub"}),". Define the following values and click ",(0,i.jsx)(t.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Registry Endpoint: ",(0,i.jsx)(t.code,{children:"https://docker.io"})]}),"\n",(0,i.jsxs)(t.li,{children:["Registry Space: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["User: ",(0,i.jsx)(t.code,{children:"DockerHub account name"})]}),"\n",(0,i.jsxs)(t.li,{children:["Password/Token: ",(0,i.jsx)(t.code,{children:"Your generated access token"})]}),"\n",(0,i.jsxs)(t.li,{children:["Use the Push Account's credentials: ",(0,i.jsx)(t.code,{children:"check"})]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"DockerHub integration",src:n(5318).A+"",title:"DockerHub integration",width:"1914",height:"924"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsxs)(t.p,{children:["In the DockerHub context, the ",(0,i.jsx)(t.strong,{children:"Registry Space"})," field is equivalent to the account/organization name."]})}),"\n",(0,i.jsxs)(t.p,{children:["With all integrations in place, let's proceed to the ",(0,i.jsx)(t.a,{href:"/docs/next/quick-start/create-application",children:"Create Application"})," page for further instructions on how to create applications using KubeRocketCI."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2235:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/dockerhub_token-ddc97b7eebaa305bc693049e503b6e08.png"},5318:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/integrate_docker-0d059eaf923af5781f617746b18deab1.png"},28453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>o});var i=n(96540);const r={},s=i.createContext(r);function c(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c27a25a0.d7e58dbb.js b/assets/js/c27a25a0.dd3be103.js similarity index 97% rename from assets/js/c27a25a0.d7e58dbb.js rename to assets/js/c27a25a0.dd3be103.js index c04119e20..4e1c0799e 100644 --- a/assets/js/c27a25a0.d7e58dbb.js +++ b/assets/js/c27a25a0.dd3be103.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6292],{47526:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(74848),l=n(28453);const i={},r="Install KubeRocketCI",a={id:"quick-start/platform-installation",title:"Install KubeRocketCI",description:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself.",source:"@site/docs/quick-start/platform-installation.md",sourceDirName:"quick-start",slug:"/quick-start/platform-installation",permalink:"/docs/next/quick-start/platform-installation",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/platform-installation.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Overview",permalink:"/docs/next/quick-start/quick-start-overview"},next:{title:"Integrate SonarQube",permalink:"/docs/next/quick-start/integrate-sonarcloud"}},o={},c=[{value:"Install Tekton",id:"install-tekton",level:2},{value:"Install platform",id:"install-platform",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"install-kuberocketci",children:"Install KubeRocketCI"}),"\n",(0,s.jsx)(t.p,{children:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself."}),"\n",(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center"},children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/ILlY4niCWeU",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"allowfullscreen"})}),"\n",(0,s.jsx)(t.h2,{id:"install-tekton",children:"Install Tekton"}),"\n",(0,s.jsx)(t.p,{children:"KubeRocketCI relies on Tekton resources, including Tasks, Pipelines, Triggers, and Interceptors to execute CI/CD pipelines."}),"\n",(0,s.jsx)(t.p,{children:"To install Tekton, run the commands below:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.53.4/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/interceptors.yaml\n"})}),"\n",(0,s.jsx)(t.h2,{id:"install-platform",children:"Install platform"}),"\n",(0,s.jsx)(t.p,{children:"To deploy the platform, follow the steps below:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Add a Helm Chart repository:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm repo add epamedp https://epam.github.io/edp-helm-charts/stable\nhelm repo update\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Deploy the platform using the ",(0,s.jsx)(t.code,{children:"helm install"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm install edp epamedp/edp-install --version 3.9.0 --create-namespace --atomic -n edp --set global.dnsWildCard=example.com\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon successful deployment of the KubeRocketCI Helm Chart, run the ",(0,s.jsx)(t.code,{children:"kubectl port-forward"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl port-forward service/portal 59480:80 -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Enter the localhost in your browser to access the login menu:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"localhost:59480\n"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Portal login menu",src:n(74810).A+"",title:"Portal login menu",width:"3478",height:"2066"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Create the edp-admin service account and generate an access token to open the KubeRocketCI:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl -n edp create serviceaccount edp-admin\nkubectl create clusterrolebinding edp-admin --serviceaccount=edp:edp-admin --clusterrole=cluster-admin\nkubectl create token edp-admin -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the login menu, paste the generated token in the ",(0,s.jsx)(t.strong,{children:"ID token"})," field and click the ",(0,s.jsx)(t.strong,{children:"SIGN IN"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the ",(0,s.jsx)(t.strong,{children:"cluster settings"})," link in the bottom left corner of the UI:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Specify namespaces",src:n(87979).A+"",title:"Specify namespaces",width:"3486",height:"2072"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.strong,{children:"Cluster Settings"})," page, define the following for fields:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Default namespace: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n",(0,s.jsxs)(t.li,{children:["Allowed namespaces: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Cluster Settings menu",src:n(13172).A+"",title:"Cluster Settings menu",width:"3486",height:"2068"})}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["Remember to click the ",(0,s.jsx)(t.strong,{children:"+ ADD"})," icon when adding the allowed namespace."]})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After completing these steps, you will gain access to KubeRocketCI components through the Portal UI. You can now proceed with the integration steps, starting with the ",(0,s.jsx)(t.a,{href:"/docs/next/quick-start/integrate-sonarcloud",children:"SonarQube"})," integration."]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},13172:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/cluster_settings-5f7866a65812882beb8ca00fded7f51d.png"},74810:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_login_menu-5c27426f28ef8225cec87cd21dadd380.png"},87979:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_ui-956a8403d6f004a932e45bc6dd74cd61.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const l={},i=s.createContext(l);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6292],{47526:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=n(74848),l=n(28453);const i={},r="Install KubeRocketCI",a={id:"quick-start/platform-installation",title:"Install KubeRocketCI",description:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself.",source:"@site/docs/quick-start/platform-installation.md",sourceDirName:"quick-start",slug:"/quick-start/platform-installation",permalink:"/docs/next/quick-start/platform-installation",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/platform-installation.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Overview",permalink:"/docs/next/quick-start/quick-start-overview"},next:{title:"Integrate SonarQube",permalink:"/docs/next/quick-start/integrate-sonarcloud"}},o={},c=[{value:"Install Tekton",id:"install-tekton",level:2},{value:"Install platform",id:"install-platform",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"install-kuberocketci",children:"Install KubeRocketCI"}),"\n",(0,s.jsx)(t.p,{children:"This page serves as the starting point for the quick start guide, where we will install Tekton as a prerequisite and then proceed to install the KubeRocketCI itself."}),"\n",(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center"},children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/ILlY4niCWeU",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:"allowfullscreen"})}),"\n",(0,s.jsx)(t.h2,{id:"install-tekton",children:"Install Tekton"}),"\n",(0,s.jsx)(t.p,{children:"KubeRocketCI relies on Tekton resources, including Tasks, Pipelines, Triggers, and Interceptors to execute CI/CD pipelines."}),"\n",(0,s.jsx)(t.p,{children:"To install Tekton, run the commands below:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.53.4/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/release.yaml\nkubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/previous/v0.25.3/interceptors.yaml\n"})}),"\n",(0,s.jsx)(t.h2,{id:"install-platform",children:"Install platform"}),"\n",(0,s.jsx)(t.p,{children:"To deploy the platform, follow the steps below:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Add a Helm Chart repository:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm repo add epamedp https://epam.github.io/edp-helm-charts/stable\nhelm repo update\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Deploy the platform using the ",(0,s.jsx)(t.code,{children:"helm install"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"helm install edp epamedp/edp-install --version 3.9.0 --create-namespace --atomic -n edp --set global.dnsWildCard=example.com\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon successful deployment of the KubeRocketCI Helm Chart, run the ",(0,s.jsx)(t.code,{children:"kubectl port-forward"})," command:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl port-forward service/portal 59480:80 -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Enter the localhost in your browser to access the login menu:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"localhost:59480\n"})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Portal login menu",src:n(74810).A+"",title:"Portal login menu",width:"3478",height:"2066"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Create the edp-admin service account and generate an access token to open the KubeRocketCI:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"kubectl -n edp create serviceaccount edp-admin\nkubectl create clusterrolebinding edp-admin --serviceaccount=edp:edp-admin --clusterrole=cluster-admin\nkubectl create token edp-admin -n edp\n"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the login menu, paste the generated token in the ",(0,s.jsx)(t.strong,{children:"ID token"})," field and click the ",(0,s.jsx)(t.strong,{children:"SIGN IN"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the ",(0,s.jsx)(t.strong,{children:"cluster settings"})," link in the bottom left corner of the UI:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Specify namespaces",src:n(87979).A+"",title:"Specify namespaces",width:"3486",height:"2072"})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.strong,{children:"Cluster Settings"})," page, define the following for fields:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Default namespace: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n",(0,s.jsxs)(t.li,{children:["Allowed namespaces: ",(0,s.jsx)(t.code,{children:"edp"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Cluster Settings menu",src:n(13172).A+"",title:"Cluster Settings menu",width:"3486",height:"2068"})}),"\n",(0,s.jsx)(t.admonition,{type:"note",children:(0,s.jsxs)(t.p,{children:["Remember to click the ",(0,s.jsx)(t.strong,{children:"+ ADD"})," icon when adding the allowed namespace."]})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["After completing these steps, you will gain access to KubeRocketCI components through the Portal UI. You can now proceed with the integration steps, starting with the ",(0,s.jsx)(t.a,{href:"/docs/next/quick-start/integrate-sonarcloud",children:"SonarQube"})," integration."]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},13172:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/cluster_settings-4d2b407c43ee3c40b30705e7fd788445.png"},74810:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_login_menu-5c27426f28ef8225cec87cd21dadd380.png"},87979:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/edp_portal_ui-c5e915644e66a49374c7981b8f30106d.png"},28453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>a});var s=n(96540);const l={},i=s.createContext(l);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d58bc2be.01759872.js b/assets/js/d58bc2be.2bbe7a80.js similarity index 60% rename from assets/js/d58bc2be.01759872.js rename to assets/js/d58bc2be.2bbe7a80.js index 85db3c66e..234c69a7e 100644 --- a/assets/js/d58bc2be.01759872.js +++ b/assets/js/d58bc2be.2bbe7a80.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1888],{75618:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(74848),t=r(28453);const i={},d="Overview",o={id:"operator-guide/auth/platform-auth-model",title:"Overview",description:"In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using custom resources. This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to.",source:"@site/docs/operator-guide/auth/platform-auth-model.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/platform-auth-model",permalink:"/docs/next/operator-guide/auth/platform-auth-model",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/platform-auth-model.md",tags:[],version:"current",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719409518e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Uninstall KubeRocketCI",permalink:"/docs/next/operator-guide/uninstall-kuberocketci"},next:{title:"Install Keycloak",permalink:"/docs/next/operator-guide/auth/keycloak"}},c={},l=[{value:"Keycloak",id:"keycloak",level:2},{value:"Realm Roles",id:"realm-roles",level:3},{value:"Realm Groups",id:"realm-groups",level:3},{value:"SonarQube",id:"sonarqube",level:2},{value:"Manage Access via Keycloak",id:"manage-access-via-keycloak",level:3},{value:"KubeRocketCI Approach for Managing Access",id:"kuberocketci-approach-for-managing-access",level:3},{value:"Nexus Repository Manager",id:"nexus-repository-manager",level:2},{value:"Gerrit",id:"gerrit",level:2},{value:"KubeRocketCI Portal and EKS Cluster",id:"kuberocketci-portal-and-eks-cluster",level:2},{value:"Keycloak Groups",id:"keycloak-groups",level:3},{value:"Cluster RBAC Resources",id:"cluster-rbac-resources",level:3},{value:"Grant User Access to the Created Namespaces",id:"grant-user-access-to-the-created-namespaces",level:3},{value:"Argo CD",id:"argo-cd",level:2},{value:"Related Articles",id:"related-articles",level:2}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"overview",children:"Overview"}),"\n",(0,n.jsxs)(s.p,{children:["In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/",children:"custom resources"}),". This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to."]}),"\n",(0,n.jsx)(s.h2,{id:"keycloak",children:"Keycloak"}),"\n",(0,n.jsx)(s.p,{children:"This section explains what realm roles and realm groups are and how they function within Keycloak."}),"\n",(0,n.jsx)(s.p,{children:"The diagram illustrates the authentication flow within a system, where tools such as SonarQube, UI Portal, Nexus, DefectDojo and others are configured as OIDC (OpenID Connect) clients to the edp realm. The edp realm, in turn, acts as an OIDC client to the broker realm, which serves as a proxy to external Identity Providers (IdPs) like Google, Facebook, and Active Directory (AD), supporting both OIDC and SAML protocols."}),"\n",(0,n.jsx)(s.mermaid,{value:'graph TD;\n style edp_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style broker_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style IdP fill:#e1f5fe,stroke:#333,stroke-width:1px,dashed\n ArgoCD["Argo CD"] --\x3e|oidc client| edp_realm["edp (realm)"]\n SonarQube --\x3e|oidc client| edp_realm["edp (realm)"]\n Portal["UI Portal"] --\x3e|oidc client| broker_realm["broker (realm)"]\n Nexus --\x3e|oidc client| edp_realm["edp (realm)"]\n DefectDojo --\x3e|oidc client| edp_realm["edp (realm)"]\n edp_realm --\x3e|"IdP (oidc client)"| broker_realm["broker (realm)"]\n broker_realm --\x3e|"IdP (oidc/saml)"| IdP["IdP (Google, Facebook, AD)"]'}),"\n",(0,n.jsx)(s.h3,{id:"realm-roles",children:"Realm Roles"}),"\n",(0,n.jsxs)(s.p,{children:["The Keycloak realm of ",(0,n.jsx)(s.code,{children:"edp"})," has two realm roles with a composite types named ",(0,n.jsx)(s.code,{children:"administrator"})," and ",(0,n.jsx)(s.code,{children:"developer"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"administrator"})," realm role is designed for users who need administrative access to the tools used in the project.\nThis realm role contains the ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"administrator"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"developer"})," realm role, on the other hand, is designed for users who need access to the development tools used in the project.\nThis realm role also contains the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"developer"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These realm roles have been defined to make it easier to assign groups of rights to users."}),"\n",(0,n.jsx)(s.p,{children:"The table below shows the realm roles and the composite types they relate to."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Role Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Regular Role"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Composite role"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"administrator"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"developer"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-administrators"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-developers"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"realm-groups",children:"Realm Groups"}),"\n",(0,n.jsxs)(s.p,{children:["KubeRocketCI uses two different realms for group management, ",(0,n.jsx)(s.code,{children:"edp"})," and ",(0,n.jsx)(s.code,{children:"broker"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," realm contains two groups that are specifically used for controlling access to Argo CD. These groups are named ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," and ",(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm contains five groups that are used for access control in both the KubeRocketCI portal and EKS cluster. These groups are named ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-deployers"}),",",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Group Name"}),(0,n.jsx)(s.th,{children:"Realm Name"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ArgoCDAdmins"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{children:"broker"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarqube",children:"SonarQube"}),"\n",(0,n.jsx)(s.p,{children:"In the case of SonarQube, there are two ways to manage access: via Keycloak and via KubeRocketCI approach. This sections describes both of the approaches."}),"\n",(0,n.jsx)(s.h3,{id:"manage-access-via-keycloak",children:"Manage Access via Keycloak"}),"\n",(0,n.jsxs)(s.p,{children:["SonarQube access is managed using Keycloak roles in the ",(0,n.jsx)(s.code,{children:"edp"})," realm.\nThe ",(0,n.jsx)(s.code,{children:"sonar-developers"})," and ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," realm roles are the two available roles that determine user access levels.\nTo grant access, the corresponding role must be added to the user in Keycloak."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, a user who needs developer access to SonarQube should be assigned the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," or ",(0,n.jsx)(s.code,{children:"developer"})," composite role in Keycloak."]}),"\n",(0,n.jsx)(s.h3,{id:"kuberocketci-approach-for-managing-access",children:"KubeRocketCI Approach for Managing Access"}),"\n",(0,n.jsx)(s.p,{children:"KubeRocketCI provides its own SonarQube Permission Template, which is used to manage user access and permissions for SonarQube projects."}),"\n",(0,n.jsx)(s.p,{children:"The template is stored in the custom SonarQube resource of the operator, an example of a custom resource can be found below."}),"\n",(0,n.jsx)(s.admonition,{title:"Sonar Permission Template",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: SonarPermissionTemplate\nmetadata:\n name: edp-default\nspec:\n description: KubeRocketCI permission templates (DO NOT REMOVE)\n groupPermissions:\n - groupName: non-interactive-users\n permissions:\n - user\n - groupName: sonar-administrators\n permissions:\n - admin\n - user\n - groupName: sonar-developers\n permissions:\n - codeviewer\n - issueadmin\n - securityhotspotadmin\n - user\n name: edp-default\n projectKeyPattern: .+\n sonarOwner: sonar\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["The SonarQube Permission Template contains three groups: ",(0,n.jsx)(s.code,{children:"non-interactive-users"}),", ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," and ",(0,n.jsx)(s.code,{children:"sonar-developers"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"non-interactive-users"})," are users who do not require direct access to the SonarQube project but need to be informed about the project's status and progress. This group has read-only access to the project, which means that they can view the project's data and metrics but cannot modify or interact with it in any way."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-administrators"})," are users who have full control over the SonarQube project. They have the ability to create, modify, and delete projects, as well as manage user access and permissions. This group also has the ability to configure SonarQube settings and perform other administrative tasks."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-developers"})," are users who are actively working on the SonarQube project. They have read and write access to the project, which means that they can modify the project's data and metrics. This group also has the ability to configure project-specific settings and perform other development tasks."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These groups are designed to provide different levels of access to the SonarQube project, depending on the user's role and responsibilities."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If a user has no group, it will have the ",(0,n.jsx)(s.code,{children:"sonar-users"})," group by default. This group does not have any permissions\nin the ",(0,n.jsx)(s.code,{children:"edp-default"})," Permission Template."]})}),"\n",(0,n.jsx)(s.p,{children:"The permissions that are attached to each of the groups are described below in the table:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{children:"Permissions"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"non-interactive-users"})}),(0,n.jsx)(s.td,{children:"user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-administrators"})}),(0,n.jsx)(s.td,{children:"admin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-developers"})}),(0,n.jsx)(s.td,{children:"codeviewer, issueadmin, securityhotspotadmin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-users"})}),(0,n.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"nexus-repository-manager",children:"Nexus Repository Manager"}),"\n",(0,n.jsx)(s.p,{children:"Users authenticate to Nexus using their Keycloak credentials."}),"\n",(0,n.jsx)(s.p,{children:"During the authentication process, the OAuth2-Proxy receives the user's role from Keycloak."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Only users with either the ",(0,n.jsx)(s.code,{children:"administrator"})," or ",(0,n.jsx)(s.code,{children:"developer"})," role in Keycloak can access Nexus."]})}),"\n",(0,n.jsxs)(s.p,{children:["Nexus has four distinct roles available, including ",(0,n.jsx)(s.code,{children:"edp-admin"}),", ",(0,n.jsx)(s.code,{children:"edp-viewer"}),", ",(0,n.jsx)(s.code,{children:"nx-admin"})," and ",(0,n.jsx)(s.code,{children:"nx-anonymous"}),".\nTo grant the user access to one or more of these roles, an entry must be added to the custom Nexus resource."]}),"\n",(0,n.jsxs)(s.p,{children:["For instance, in the context of the custom Nexus resource, the user ",(0,n.jsx)(s.code,{children:"user_1@example.com"})," has been assigned the ",(0,n.jsx)(s.code,{children:"nx-admin"})," role.\nAn example can be found below:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Nexus",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: Nexus\nmetadata:\n name: nexus\nspec:\n basePath: /\n edpSpec:\n dnsWildcard: example.com\n keycloakSpec:\n enabled: false\n roles:\n - developer\n - administrator\n users:\n - roles:\n - nx-admin\n username: user_1@example.com\n"})})}),"\n",(0,n.jsx)(s.h2,{id:"gerrit",children:"Gerrit"}),"\n",(0,n.jsx)(s.p,{children:"The user should use their credentials from Keycloak when authenticating to Gerrit."}),"\n",(0,n.jsxs)(s.p,{children:["After logging into Gerrit, the user is not automatically attached to any groups.\nTo add a user to a group, the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," custom resource must be created. This custom resource specifies\nthe user's email address and the name of the group to which they should be added."]}),"\n",(0,n.jsxs)(s.p,{children:["The ConfigMap below is an example of the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Gerrit Group Member",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: GerritGroupMember\nmetadata:\n name: user-admins\nspec:\n accountId: user@user.com\n groupId: Administrators\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["After the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource is created, the user will have the permissions and access levels associated with that group."]}),"\n",(0,n.jsx)(s.h2,{id:"kuberocketci-portal-and-eks-cluster",children:"KubeRocketCI Portal and EKS Cluster"}),"\n",(0,n.jsxs)(s.p,{children:["Both Portal and EKS Cluster use Keycloak groups for controlling access.\nUsers need to be added to the required group in Keycloak to get access.\nThe groups that are used for access control are in the ",(0,n.jsx)(s.code,{children:"broker"})," realm."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"For the Kubernetes cluster to correctly manage access control, Keycloak must be configured as an OpenID Connect (OIDC) provider. Ensure that your Keycloak setup is properly configured for OIDC before proceeding."})}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm keeps Kubernetes OIDC client."]})}),"\n",(0,n.jsx)(s.h3,{id:"keycloak-groups",children:"Keycloak Groups"}),"\n",(0,n.jsx)(s.p,{children:"There are two types of groups provided for users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Independent group: provides the minimum required permission set."}),"\n",(0,n.jsx)(s.li,{children:"Extension group: extends the rights of an independent group."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For example, the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group can be extended with rights from the ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"})," group."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Independent Group"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Extension Group"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Action List"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"View"}),(0,n.jsx)(s.td,{children:"Getting of all namespaced resources"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Build"}),(0,n.jsx)(s.td,{children:"Starting a PipelineRun from KubeRocketCI portal"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Deploy"}),(0,n.jsx)(s.td,{children:"Deploying a new version of application via Argo CD Application"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"View"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Build"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Deploy"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Full Namespace Access"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Originally, the ",(0,n.jsx)(s.code,{children:"edp-oidc-developer"})," group members come solely with the permissions to initiate pipelines. Assigning them to the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group grants necessary permissions to view pipelines in the KubeRocketCI portal."]})}),"\n",(0,n.jsx)(s.h3,{id:"cluster-rbac-resources",children:"Cluster RBAC Resources"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," namespace has five role bindings that provide the necessary permissions for the Keycloak groups\ndescribed above."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Role Binding Name"}),(0,n.jsx)(s.th,{children:"Role Name"}),(0,n.jsx)(s.th,{children:"Groups"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-admin"}),(0,n.jsx)(s.td,{children:"cluster-admin"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-viewer"}),(0,n.jsx)(s.td,{children:"view"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," , ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})]})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["KubeRocketCI provides an aggregate ClusterRole with permissions to view custom KubeRocketCI resources. ClusterRole is named ",(0,n.jsx)(s.code,{children:"edp-aggregate-view-edp"})]})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding will be created in a created namespace by ",(0,n.jsx)(s.code,{children:"cd-pipeline-operator"}),".",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding assign the ",(0,n.jsx)(s.code,{children:"admin"})," role to ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups."]})}),"\n",(0,n.jsx)(s.h3,{id:"grant-user-access-to-the-created-namespaces",children:"Grant User Access to the Created Namespaces"}),"\n",(0,n.jsxs)(s.p,{children:["To provide users with admin or developer privileges for project namespaces, they need to be added to the ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups in Keycloak."]}),"\n",(0,n.jsx)(s.h2,{id:"argo-cd",children:"Argo CD"}),"\n",(0,n.jsx)(s.p,{children:"In Argo CD, groups are specified when creating an AppProject to restrict access to deployed applications.\nTo gain access to deployed applications within a project, the user must be added to their corresponding Argo CD group\nin Keycloak. This ensures that only authorized users can access and modify applications within the project."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["By default, only the ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," group is automatically created in Keycloak."]})}),"\n",(0,n.jsx)(s.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/user-guide/",children:"KubeRocketCI Portal Overview"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/operator-guide/cd/argocd-integration",children:"Argo CD Integration"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>d,x:()=>o});var n=r(96540);const t={},i=n.createContext(t);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1888],{75618:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(74848),t=r(28453);const i={},d="Overview",o={id:"operator-guide/auth/platform-auth-model",title:"Overview",description:"In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using custom resources. This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to.",source:"@site/docs/operator-guide/auth/platform-auth-model.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/platform-auth-model",permalink:"/docs/next/operator-guide/auth/platform-auth-model",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/platform-auth-model.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Uninstall KubeRocketCI",permalink:"/docs/next/operator-guide/uninstall-kuberocketci"},next:{title:"Install Keycloak",permalink:"/docs/next/operator-guide/auth/keycloak"}},c={},l=[{value:"Keycloak",id:"keycloak",level:2},{value:"Realm Roles",id:"realm-roles",level:3},{value:"Realm Groups",id:"realm-groups",level:3},{value:"SonarQube",id:"sonarqube",level:2},{value:"Manage Access via Keycloak",id:"manage-access-via-keycloak",level:3},{value:"KubeRocketCI Approach for Managing Access",id:"kuberocketci-approach-for-managing-access",level:3},{value:"Nexus Repository Manager",id:"nexus-repository-manager",level:2},{value:"Gerrit",id:"gerrit",level:2},{value:"KubeRocketCI Portal and EKS Cluster",id:"kuberocketci-portal-and-eks-cluster",level:2},{value:"Keycloak Groups",id:"keycloak-groups",level:3},{value:"Cluster RBAC Resources",id:"cluster-rbac-resources",level:3},{value:"Grant User Access to the Created Namespaces",id:"grant-user-access-to-the-created-namespaces",level:3},{value:"Argo CD",id:"argo-cd",level:2},{value:"Related Articles",id:"related-articles",level:2}];function a(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"overview",children:"Overview"}),"\n",(0,n.jsxs)(s.p,{children:["In KubeRocketCI, access control is implemented through various authorization methods. User and group permissions are regulated using Keycloak, which integrates with RBAC. Permissions for third-party tools are managed using ",(0,n.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/",children:"custom resources"}),". This document provides an overview of the access management entities in KubeRocketCI, including Kubernetes groups, custom resources, and Keycloak realm roles. It also details their respective permissions and the tools they are applied to."]}),"\n",(0,n.jsx)(s.h2,{id:"keycloak",children:"Keycloak"}),"\n",(0,n.jsx)(s.p,{children:"This section explains what realm roles and realm groups are and how they function within Keycloak."}),"\n",(0,n.jsx)(s.p,{children:"The diagram illustrates the authentication flow within a system, where tools such as SonarQube, UI Portal, Nexus, DefectDojo and others are configured as OIDC (OpenID Connect) clients to the edp realm. The edp realm, in turn, acts as an OIDC client to the broker realm, which serves as a proxy to external Identity Providers (IdPs) like Google, Facebook, and Active Directory (AD), supporting both OIDC and SAML protocols."}),"\n",(0,n.jsx)(s.mermaid,{value:'graph TD;\n style edp_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style broker_realm fill:#e1f5fe,stroke:#333,stroke-width:2px\n style IdP fill:#e1f5fe,stroke:#333,stroke-width:1px,dashed\n ArgoCD["Argo CD"] --\x3e|oidc client| edp_realm["edp (realm)"]\n SonarQube --\x3e|oidc client| edp_realm["edp (realm)"]\n Portal["UI Portal"] --\x3e|oidc client| broker_realm["broker (realm)"]\n Nexus --\x3e|oidc client| edp_realm["edp (realm)"]\n DefectDojo --\x3e|oidc client| edp_realm["edp (realm)"]\n edp_realm --\x3e|"IdP (oidc client)"| broker_realm["broker (realm)"]\n broker_realm --\x3e|"IdP (oidc/saml)"| IdP["IdP (Google, Facebook, AD)"]'}),"\n",(0,n.jsx)(s.h3,{id:"realm-roles",children:"Realm Roles"}),"\n",(0,n.jsxs)(s.p,{children:["The Keycloak realm of ",(0,n.jsx)(s.code,{children:"edp"})," has two realm roles with a composite types named ",(0,n.jsx)(s.code,{children:"administrator"})," and ",(0,n.jsx)(s.code,{children:"developer"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"administrator"})," realm role is designed for users who need administrative access to the tools used in the project.\nThis realm role contains the ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"administrator"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"developer"})," realm role, on the other hand, is designed for users who need access to the development tools used in the project.\nThis realm role also contains the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," role.\nUsers who are assigned the ",(0,n.jsx)(s.code,{children:"developer"})," realm role will be granted these two roles automatically."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These realm roles have been defined to make it easier to assign groups of rights to users."}),"\n",(0,n.jsx)(s.p,{children:"The table below shows the realm roles and the composite types they relate to."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Role Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Regular Role"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Composite role"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"administrator"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"developer"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-administrators"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonar-developers"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"realm-groups",children:"Realm Groups"}),"\n",(0,n.jsxs)(s.p,{children:["KubeRocketCI uses two different realms for group management, ",(0,n.jsx)(s.code,{children:"edp"})," and ",(0,n.jsx)(s.code,{children:"broker"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," realm contains two groups that are specifically used for controlling access to Argo CD. These groups are named ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," and ",(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm contains five groups that are used for access control in both the KubeRocketCI portal and EKS cluster. These groups are named ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"}),", ",(0,n.jsx)(s.code,{children:"edp-oidc-deployers"}),",",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Realm Group Name"}),(0,n.jsx)(s.th,{children:"Realm Name"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"ArgoCDAdmins"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ArgoCD-edp-users"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{children:"broker"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{children:"broker"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarqube",children:"SonarQube"}),"\n",(0,n.jsx)(s.p,{children:"In the case of SonarQube, there are two ways to manage access: via Keycloak and via KubeRocketCI approach. This sections describes both of the approaches."}),"\n",(0,n.jsx)(s.h3,{id:"manage-access-via-keycloak",children:"Manage Access via Keycloak"}),"\n",(0,n.jsxs)(s.p,{children:["SonarQube access is managed using Keycloak roles in the ",(0,n.jsx)(s.code,{children:"edp"})," realm.\nThe ",(0,n.jsx)(s.code,{children:"sonar-developers"})," and ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," realm roles are the two available roles that determine user access levels.\nTo grant access, the corresponding role must be added to the user in Keycloak."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, a user who needs developer access to SonarQube should be assigned the ",(0,n.jsx)(s.code,{children:"sonar-developers"})," or ",(0,n.jsx)(s.code,{children:"developer"})," composite role in Keycloak."]}),"\n",(0,n.jsx)(s.h3,{id:"kuberocketci-approach-for-managing-access",children:"KubeRocketCI Approach for Managing Access"}),"\n",(0,n.jsx)(s.p,{children:"KubeRocketCI provides its own SonarQube Permission Template, which is used to manage user access and permissions for SonarQube projects."}),"\n",(0,n.jsx)(s.p,{children:"The template is stored in the custom SonarQube resource of the operator, an example of a custom resource can be found below."}),"\n",(0,n.jsx)(s.admonition,{title:"Sonar Permission Template",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: SonarPermissionTemplate\nmetadata:\n name: edp-default\nspec:\n description: KubeRocketCI permission templates (DO NOT REMOVE)\n groupPermissions:\n - groupName: non-interactive-users\n permissions:\n - user\n - groupName: sonar-administrators\n permissions:\n - admin\n - user\n - groupName: sonar-developers\n permissions:\n - codeviewer\n - issueadmin\n - securityhotspotadmin\n - user\n name: edp-default\n projectKeyPattern: .+\n sonarOwner: sonar\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["The SonarQube Permission Template contains three groups: ",(0,n.jsx)(s.code,{children:"non-interactive-users"}),", ",(0,n.jsx)(s.code,{children:"sonar-administrators"})," and ",(0,n.jsx)(s.code,{children:"sonar-developers"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"non-interactive-users"})," are users who do not require direct access to the SonarQube project but need to be informed about the project's status and progress. This group has read-only access to the project, which means that they can view the project's data and metrics but cannot modify or interact with it in any way."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-administrators"})," are users who have full control over the SonarQube project. They have the ability to create, modify, and delete projects, as well as manage user access and permissions. This group also has the ability to configure SonarQube settings and perform other administrative tasks."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"sonar-developers"})," are users who are actively working on the SonarQube project. They have read and write access to the project, which means that they can modify the project's data and metrics. This group also has the ability to configure project-specific settings and perform other development tasks."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"These groups are designed to provide different levels of access to the SonarQube project, depending on the user's role and responsibilities."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["If a user has no group, it will have the ",(0,n.jsx)(s.code,{children:"sonar-users"})," group by default. This group does not have any permissions\nin the ",(0,n.jsx)(s.code,{children:"edp-default"})," Permission Template."]})}),"\n",(0,n.jsx)(s.p,{children:"The permissions that are attached to each of the groups are described below in the table:"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{children:"Permissions"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"non-interactive-users"})}),(0,n.jsx)(s.td,{children:"user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-administrators"})}),(0,n.jsx)(s.td,{children:"admin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-developers"})}),(0,n.jsx)(s.td,{children:"codeviewer, issueadmin, securityhotspotadmin, user"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"sonar-users"})}),(0,n.jsx)(s.td,{children:"-"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"nexus-repository-manager",children:"Nexus Repository Manager"}),"\n",(0,n.jsx)(s.p,{children:"Users authenticate to Nexus using their Keycloak credentials."}),"\n",(0,n.jsx)(s.p,{children:"During the authentication process, the OAuth2-Proxy receives the user's role from Keycloak."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["Only users with either the ",(0,n.jsx)(s.code,{children:"administrator"})," or ",(0,n.jsx)(s.code,{children:"developer"})," role in Keycloak can access Nexus."]})}),"\n",(0,n.jsxs)(s.p,{children:["Nexus has four distinct roles available, including ",(0,n.jsx)(s.code,{children:"edp-admin"}),", ",(0,n.jsx)(s.code,{children:"edp-viewer"}),", ",(0,n.jsx)(s.code,{children:"nx-admin"})," and ",(0,n.jsx)(s.code,{children:"nx-anonymous"}),".\nTo grant the user access to one or more of these roles, an entry must be added to the custom Nexus resource."]}),"\n",(0,n.jsxs)(s.p,{children:["For instance, in the context of the custom Nexus resource, the user ",(0,n.jsx)(s.code,{children:"user_1@example.com"})," has been assigned the ",(0,n.jsx)(s.code,{children:"nx-admin"})," role.\nAn example can be found below:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Nexus",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: Nexus\nmetadata:\n name: nexus\nspec:\n basePath: /\n edpSpec:\n dnsWildcard: example.com\n keycloakSpec:\n enabled: false\n roles:\n - developer\n - administrator\n users:\n - roles:\n - nx-admin\n username: user_1@example.com\n"})})}),"\n",(0,n.jsx)(s.h2,{id:"gerrit",children:"Gerrit"}),"\n",(0,n.jsx)(s.p,{children:"The user should use their credentials from Keycloak when authenticating to Gerrit."}),"\n",(0,n.jsxs)(s.p,{children:["After logging into Gerrit, the user is not automatically attached to any groups.\nTo add a user to a group, the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," custom resource must be created. This custom resource specifies\nthe user's email address and the name of the group to which they should be added."]}),"\n",(0,n.jsxs)(s.p,{children:["The Custom Resource below is an example of the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource:"]}),"\n",(0,n.jsx)(s.admonition,{title:"Gerrit Group Member",type:"note",children:(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"apiVersion: v2.edp.epam.com/v1\nkind: GerritGroupMember\nmetadata:\n name: user-admins\nspec:\n accountId: user@user.com\n groupId: Administrators\n"})})}),"\n",(0,n.jsxs)(s.p,{children:["After the ",(0,n.jsx)(s.code,{children:"GerritGroupMember"})," resource is created, the user will have the permissions and access levels associated with that group."]}),"\n",(0,n.jsx)(s.h2,{id:"kuberocketci-portal-and-eks-cluster",children:"KubeRocketCI Portal and EKS Cluster"}),"\n",(0,n.jsxs)(s.p,{children:["Both Portal and EKS Cluster use Keycloak groups for controlling access.\nUsers need to be added to the required group in Keycloak to get access.\nThe groups that are used for access control are in the ",(0,n.jsx)(s.code,{children:"broker"})," realm."]}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsx)(s.p,{children:"For the Kubernetes cluster to correctly manage access control, Keycloak must be configured as an OpenID Connect (OIDC) provider. Ensure that your Keycloak setup is properly configured for OIDC before proceeding."})}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"broker"})," realm keeps Kubernetes OIDC client."]})}),"\n",(0,n.jsx)(s.h3,{id:"keycloak-groups",children:"Keycloak Groups"}),"\n",(0,n.jsx)(s.p,{children:"There are two types of groups provided for users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Independent group: provides the minimum required permission set."}),"\n",(0,n.jsx)(s.li,{children:"Extension group: extends the rights of an independent group."}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["For example, the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group can be extended with rights from the ",(0,n.jsx)(s.code,{children:"edp-oidc-builders"})," group."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Independent Group"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Extension Group"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Name"}),(0,n.jsx)(s.th,{children:"Action List"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"View"}),(0,n.jsx)(s.td,{children:"Getting of all namespaced resources"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Build"}),(0,n.jsx)(s.td,{children:"Starting a PipelineRun from KubeRocketCI portal"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Deploy"}),(0,n.jsx)(s.td,{children:"Deploying a new version of application via Argo CD Application"})]})]})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Group Name"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"View"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Build"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Deploy"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Full Namespace Access"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"}}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2705"}),(0,n.jsx)(s.td,{style:{textAlign:"center"}})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["Originally, the ",(0,n.jsx)(s.code,{children:"edp-oidc-developer"})," group members come solely with the permissions to initiate pipelines. Assigning them to the ",(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," group grants necessary permissions to view pipelines in the KubeRocketCI portal."]})}),"\n",(0,n.jsx)(s.h3,{id:"cluster-rbac-resources",children:"Cluster RBAC Resources"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"edp"})," namespace has five role bindings that provide the necessary permissions for the Keycloak groups\ndescribed above."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Role Binding Name"}),(0,n.jsx)(s.th,{children:"Role Name"}),(0,n.jsx)(s.th,{children:"Groups"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-admin"}),(0,n.jsx)(s.td,{children:"cluster-admin"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-admins"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:"tenant-builder"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-builders"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:"tenant-deployer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-deployers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:"tenant-developer"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"edp-oidc-developers"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"tenant-viewer"}),(0,n.jsx)(s.td,{children:"view"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"edp-oidc-viewers"})," , ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})]})]})]})]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:["KubeRocketCI provides an aggregate ClusterRole with permissions to view custom KubeRocketCI resources. ClusterRole is named ",(0,n.jsx)(s.code,{children:"edp-aggregate-view-edp"})]})}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding will be created in a created namespace by ",(0,n.jsx)(s.code,{children:"cd-pipeline-operator"}),".",(0,n.jsx)("br",{}),"\n",(0,n.jsx)(s.code,{children:"tenant-admin"})," RoleBinding assign the ",(0,n.jsx)(s.code,{children:"admin"})," role to ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups."]})}),"\n",(0,n.jsx)(s.h3,{id:"grant-user-access-to-the-created-namespaces",children:"Grant User Access to the Created Namespaces"}),"\n",(0,n.jsxs)(s.p,{children:["To provide users with admin or developer privileges for project namespaces, they need to be added to the ",(0,n.jsx)(s.code,{children:"edp-oidc-admins"})," and ",(0,n.jsx)(s.code,{children:"edp-oidc-developers"})," groups in Keycloak."]}),"\n",(0,n.jsx)(s.h2,{id:"argo-cd",children:"Argo CD"}),"\n",(0,n.jsx)(s.p,{children:"In Argo CD, groups are specified when creating an AppProject to restrict access to deployed applications.\nTo gain access to deployed applications within a project, the user must be added to their corresponding Argo CD group\nin Keycloak. This ensures that only authorized users can access and modify applications within the project."}),"\n",(0,n.jsx)(s.admonition,{type:"info",children:(0,n.jsxs)(s.p,{children:["By default, only the ",(0,n.jsx)(s.code,{children:"ArgoCDAdmins"})," group is automatically created in Keycloak."]})}),"\n",(0,n.jsx)(s.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/user-guide/",children:"KubeRocketCI Portal Overview"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/docs/next/operator-guide/cd/argocd-integration",children:"Argo CD Integration"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},28453:(e,s,r)=>{r.d(s,{R:()=>d,x:()=>o});var n=r(96540);const t={},i=n.createContext(t);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d743684d.17c26ef1.js b/assets/js/d743684d.17c26ef1.js deleted file mode 100644 index 6dd4a4aae..000000000 --- a/assets/js/d743684d.17c26ef1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4965],{10773:(A,e,n)=>{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var t=n(74848),r=n(28453);const i={},a="Portal OIDC Configuration",l={id:"operator-guide/auth/ui-portal-oidc",title:"Portal OIDC Configuration",description:"This page provides instructions for configuring the OIDC authorization for the KubeRocketCI Portal UI, enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/ui-portal-oidc.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/ui-portal-oidc",permalink:"/docs/operator-guide/auth/ui-portal-oidc",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/ui-portal-oidc.md",tags:[],version:"3.9.0",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719645984e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Install Keycloak",permalink:"/docs/operator-guide/auth/keycloak"},next:{title:"AWS EKS OIDC Integration",permalink:"/docs/operator-guide/auth/eks-oidc-integration"}},s={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configure Keycloak",id:"configure-keycloak",level:2},{value:"Integrate Portal With Kubernetes",id:"integrate-portal-with-kubernetes",level:2},{value:"Changing the Lifespan of an Access Token",id:"changing-the-lifespan-of-an-access-token",level:2},{value:"Related Articles",id:"related-articles",level:2}];function c(A){const e={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...A.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"portal-oidc-configuration",children:"Portal OIDC Configuration"}),"\n",(0,t.jsxs)(e.p,{children:["This page provides instructions for configuring the ",(0,t.jsx)(e.a,{href:"https://openid.net/connect/",children:"OIDC authorization"})," for the KubeRocketCI ",(0,t.jsx)(e.a,{href:"/docs/user-guide/",children:"Portal UI"}),", enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point."]}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure the following values are set first before starting the Portal OIDC configuration:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"realm_id"})," = ",(0,t.jsx)(e.strong,{children:"openshift"})]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"client_id"})," = ",(0,t.jsx)(e.strong,{children:"kubernetes"})]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"keycloak_client_key"}),"= ",(0,t.jsx)(e.strong,{children:"keycloak_client_secret_key"})," (received from: ",(0,t.jsx)(e.code,{children:"Openshift realm"})," -> ",(0,t.jsx)(e.code,{children:"clients"})," -> ",(0,t.jsx)(e.code,{children:"kubernetes"})," -> ",(0,t.jsx)(e.code,{children:"Credentials"})," -> ",(0,t.jsx)(e.code,{children:"Client secret"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:[(0,t.jsx)(e.code,{children:"group"})," = ",(0,t.jsxs)(e.strong,{children:[(0,t.jsx)(e.code,{children:"edp-oidc-admins"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-builders"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-deployers"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-developers"}),", ",(0,t.jsx)(e.code,{children:"edp-oidc-viewers"})]})," (Should be created manually in the realm from point 1)"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.admonition,{type:"note",children:(0,t.jsxs)(e.p,{children:["The values indicated above are the result of the Keycloak configuration as an OIDC identity provider.\nTo obtain these values, please refer to the guidelines on the ",(0,t.jsx)(e.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak OIDC EKS Configuration"})," page."]})}),"\n",(0,t.jsx)(e.h2,{id:"configure-keycloak",children:"Configure Keycloak"}),"\n",(0,t.jsx)(e.p,{children:"To proceed with the Keycloak configuration, perform the following:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Add the URL of the Headlamp to the ",(0,t.jsx)(e.code,{children:"valid_redirect_uris"})," variable in ",(0,t.jsx)(e.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak"}),":"]}),"\n",(0,t.jsx)(e.admonition,{title:"keycloak_openid_client",type:"note",children:(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:' valid_redirect_uris = [\n "https://edp-portal./*"\n "http://localhost:8000/*"\n ]\n'})})}),"\n",(0,t.jsx)(e.p,{children:"Make sure to define the following Keycloak client values as indicated:"}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Keycloak client configuration",src:n(62314).A+"",title:"Keycloak client configuration",width:"1620",height:"1433"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Configure the Keycloak client key in Kubernetes using the Kubernetes secrets or the ",(0,t.jsx)(e.a,{href:"/docs/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"apiVersion: v1\nkind: Secret\nmetadata:\n name: keycloak-client-headlamp-secret\n namespace: edp\ntype: Opaque\nstringData:\n clientSecret: \n"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"Assign user to one or more groups in Keycloak."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"integrate-portal-with-kubernetes",children:"Integrate Portal With Kubernetes"}),"\n",(0,t.jsx)(e.p,{children:"Portal is integrated in Kubernetes in three steps:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Update the ",(0,t.jsx)(e.a,{href:"/docs/operator-guide/install-kuberocketci",children:"values.yaml"})," file by enabling OIDC:"]}),"\n",(0,t.jsx)(e.admonition,{title:"values.yaml",type:"note",children:(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"edp-headlamp:\n config:\n oidc:\n enabled: true\n"})})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Navigate to Portal UI and log in by clicking the ",(0,t.jsx)(e.code,{children:"Sign In"})," button:"]}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Portal login page",src:n(5822).A+"",title:"Portal login page",width:"500",height:"332"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Go to ",(0,t.jsx)(e.strong,{children:"Account"})," -> ",(0,t.jsx)(e.strong,{children:"Settings"}),", and set up a namespace:"]}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Portal namespace settings",src:n(7925).A+"",title:"Portal namespace settings",width:"1922",height:"868"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"As a result, it is possible to control access and rights from the Keycloak endpoint."}),"\n",(0,t.jsx)(e.h2,{id:"changing-the-lifespan-of-an-access-token",children:"Changing the Lifespan of an Access Token"}),"\n",(0,t.jsxs)(e.p,{children:["Change the Access Token Lifespan: go to your Keycloak and select ",(0,t.jsx)(e.em,{children:"Openshift realm"})," > ",(0,t.jsx)(e.em,{children:"Realm settings"})," > ",(0,t.jsx)(e.em,{children:"Tokens"})," >\n",(0,t.jsx)(e.em,{children:"Access Token Lifespan"})," > set a new value to the field and save this change."]}),"\n",(0,t.jsx)(e.p,{children:'By default, "Access Token Lifespan" value is 5 minutes.'}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"Access Token Lifespan",src:n(10668).A+"",title:"Access Token Lifespan",width:"3102",height:"1330"})}),"\n",(0,t.jsx)(e.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"/docs/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"})}),"\n"]})]})}function d(A={}){const{wrapper:e}={...(0,r.R)(),...A.components};return e?(0,t.jsx)(e,{...A,children:(0,t.jsx)(c,{...A})}):c(A)}},10668:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/keycloak-access-token-lifespan-28ab4499c62f6cd2167dfe2a8cda62d2.png"},5822:(A,e,n)=>{n.d(e,{A:()=>t});const t="data:image/png;base64,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"},7925:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/headlamp-oidc-headlamp-2-948da70fd8c70fc4999d382c751f90a8.png"},62314:(A,e,n)=>{n.d(e,{A:()=>t});const t=n.p+"assets/images/headlamp-oidc-keycloak-2-a5eef33e2162aa911af7fa908ae5f612.png"},28453:(A,e,n)=>{n.d(e,{R:()=>a,x:()=>l});var t=n(96540);const r={},i=t.createContext(r);function a(A){const e=t.useContext(i);return t.useMemo((function(){return"function"==typeof A?A(e):{...e,...A}}),[e,A])}function l(A){let e;return e=A.disableParentContext?"function"==typeof A.components?A.components(r):A.components||r:a(A.components),t.createElement(i.Provider,{value:e},A.children)}}}]); \ No newline at end of file diff --git a/assets/js/d743684d.3c3be70a.js b/assets/js/d743684d.3c3be70a.js new file mode 100644 index 000000000..8918f13f2 --- /dev/null +++ b/assets/js/d743684d.3c3be70a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4965],{10773:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var t=i(74848),s=i(28453);const r={},o="Portal OIDC Configuration",a={id:"operator-guide/auth/ui-portal-oidc",title:"Portal OIDC Configuration",description:"This page provides instructions for configuring the OIDC authorization for the KubeRocketCI Portal UI, enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/ui-portal-oidc.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/ui-portal-oidc",permalink:"/docs/operator-guide/auth/ui-portal-oidc",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/ui-portal-oidc.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Install Keycloak",permalink:"/docs/operator-guide/auth/keycloak"},next:{title:"AWS EKS OIDC Integration",permalink:"/docs/operator-guide/auth/eks-oidc-integration"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Configure Keycloak",id:"configure-keycloak",level:2},{value:"Integrate Portal With Kubernetes",id:"integrate-portal-with-kubernetes",level:2},{value:"Changing the Lifespan of an Access Token",id:"changing-the-lifespan-of-an-access-token",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"portal-oidc-configuration",children:"Portal OIDC Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["This page provides instructions for configuring the ",(0,t.jsx)(n.a,{href:"https://openid.net/connect/",children:"OIDC authorization"})," for the KubeRocketCI ",(0,t.jsx)(n.a,{href:"/docs/user-guide/",children:"Portal UI"}),", enabling the use of Single Sign-On (SSO) for authorization in the Portal. This configuration allows for centralized control of user access and rights from a single configuration point."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(n.p,{children:"Ensure the following values are set first before starting the Portal OIDC configuration:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"realm_id"})," = ",(0,t.jsx)(n.strong,{children:"openshift"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"client_id"})," = ",(0,t.jsx)(n.strong,{children:"kubernetes"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"keycloak_client_key"}),"= ",(0,t.jsx)(n.strong,{children:"keycloak_client_secret_key"})," (received from: ",(0,t.jsx)(n.code,{children:"Openshift realm"})," -> ",(0,t.jsx)(n.code,{children:"clients"})," -> ",(0,t.jsx)(n.code,{children:"kubernetes"})," -> ",(0,t.jsx)(n.code,{children:"Credentials"})," -> ",(0,t.jsx)(n.code,{children:"Client secret"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"group"})," = ",(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"edp-oidc-admins"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-builders"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-deployers"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-developers"}),", ",(0,t.jsx)(n.code,{children:"edp-oidc-viewers"})]})," (Should be created manually in the realm from point 1)"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The values indicated above are the result of the Keycloak configuration as an OIDC identity provider.\nTo obtain these values, please refer to the guidelines on the ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak OIDC EKS Configuration"})," page."]})}),"\n",(0,t.jsx)(n.h2,{id:"configure-keycloak",children:"Configure Keycloak"}),"\n",(0,t.jsx)(n.p,{children:"To proceed with the Keycloak configuration, perform the following:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add the URL of the Headlamp to the ",(0,t.jsx)(n.code,{children:"valid_redirect_uris"})," variable in ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"Keycloak"}),":"]}),"\n",(0,t.jsx)(n.admonition,{title:"keycloak_openid_client",type:"note",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:' valid_redirect_uris = [\n "https://edp-portal./*"\n "http://localhost:8000/*"\n ]\n'})})}),"\n",(0,t.jsx)(n.p,{children:"Make sure to define the following Keycloak client values as indicated:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Keycloak client configuration",src:i(62314).A+"",title:"Keycloak client configuration",width:"567",height:"758"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Configure the Keycloak client key in Kubernetes using the Kubernetes secrets or the ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: v1\nkind: Secret\nmetadata:\n name: keycloak-client-headlamp-secret\n namespace: edp\ntype: Opaque\nstringData:\n clientSecret: \n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Assign user to one or more groups in Keycloak."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"integrate-portal-with-kubernetes",children:"Integrate Portal With Kubernetes"}),"\n",(0,t.jsx)(n.p,{children:"Portal is integrated in Kubernetes in three steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Update the ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/install-kuberocketci",children:"values.yaml"})," file by enabling OIDC:"]}),"\n",(0,t.jsx)(n.admonition,{title:"values.yaml",type:"note",children:(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"edp-headlamp:\n config:\n oidc:\n enabled: true\n"})})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to Portal UI and log in by clicking the ",(0,t.jsx)(n.code,{children:"Sign In"})," button:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Portal login page",src:i(5822).A+"",title:"Portal login page",width:"986",height:"752"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Upon logging in, specify the namespace for KubeRocketCI where platform is deployed by clicking the cluster settings link in the bottom left corner of the UI:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Portal namespace settings",src:i(92824).A+"",title:"Portal namespace settings",width:"3486",height:"2072"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"As a result, it is possible to control access and rights from the Keycloak endpoint."}),"\n",(0,t.jsx)(n.h2,{id:"changing-the-lifespan-of-an-access-token",children:"Changing the Lifespan of an Access Token"}),"\n",(0,t.jsxs)(n.p,{children:["Change the Access Token Lifespan: go to your Keycloak and select ",(0,t.jsx)(n.em,{children:"Openshift realm"})," > ",(0,t.jsx)(n.em,{children:"Realm settings"})," > ",(0,t.jsx)(n.em,{children:"Tokens"})," >\n",(0,t.jsx)(n.em,{children:"Access Token Lifespan"})," > set a new value to the field and save this change."]}),"\n",(0,t.jsx)(n.p,{children:'By default, "Access Token Lifespan" value is 5 minutes.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Access Token Lifespan",src:i(10668).A+"",title:"Access Token Lifespan",width:"3102",height:"1330"})}),"\n",(0,t.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",children:"EKS OIDC With Keycloak"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/operator-guide/secrets-management/external-secrets-operator-integration",children:"External Secrets Operator"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},10668:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/keycloak-access-token-lifespan-28ab4499c62f6cd2167dfe2a8cda62d2.png"},92824:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/edp_portal_ui-956a8403d6f004a932e45bc6dd74cd61.png"},5822:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/headlamp-oidc-headlamp-1-de5d785885e15200e751cc7708459056.png"},62314:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/headlamp-oidc-keycloak-2-7eaec626fabd4d743ffbf8aae9fca87c.png"},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>a});var t=i(96540);const s={},r=t.createContext(s);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dbe4c68a.2e2a7722.js b/assets/js/dbe4c68a.31df9e59.js similarity index 99% rename from assets/js/dbe4c68a.2e2a7722.js rename to assets/js/dbe4c68a.31df9e59.js index 7b8990977..92f31394e 100644 --- a/assets/js/dbe4c68a.2e2a7722.js +++ b/assets/js/dbe4c68a.31df9e59.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1748],{26513:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>o,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=i(74848),s=i(28453);const r={},c="Integrate GitHub",d={id:"quick-start/integrate-github",title:"Integrate GitHub",description:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-github.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-github",permalink:"/docs/quick-start/integrate-github",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-github.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate SonarQube",permalink:"/docs/quick-start/integrate-sonarcloud"},next:{title:"Integrate DockerHub",permalink:"/docs/quick-start/integrate-container-registry"}},a={},u=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"integrate-github",children:"Integrate GitHub"}),"\n",(0,t.jsx)(n.p,{children:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.\nThis tutorial focuses on the create strategy, wherein an application is directly created in the integrated VCS solution for subsequent work. Here, you will find instructions on how to integrate KubeRocketCI with GitHub."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Prior to moving forward, ensure you possess an active GitHub account and have successfully deployed the platform."})}),"\n",(0,t.jsx)(n.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,t.jsx)(n.p,{children:"To integrate KubeRocketCI with GitHub, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate an SSH key pair:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'ssh-keygen -t ed25519 -C "email@example.com"\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the created SSH key (the public part) to the GitHub account:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the GitHub main page, click your user icon. Navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"SSH and GPG keys"})," and click ",(0,t.jsx)(n.strong,{children:"New SSH key"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"quick_start"})," key. Insert your ",(0,t.jsx)(n.code,{children:"ed25519.pub"})," key data and click ",(0,t.jsx)(n.strong,{children:"Add SSH key"}),":"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(66600).A+"",title:"Repo permission",width:"1902",height:"930"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Generate an ",(0,t.jsx)(n.code,{children:"access token"})," for the GitHub account with read/write access to the API:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Log in to GitHub."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the profile account and navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"Developer Settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Select ",(0,t.jsx)(n.strong,{children:"Personal access tokens (classic)"})," and generate a new token with the following permissions:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(99788).A+"",title:"Repo permission",width:"756",height:"158"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The following (Admin",":repo",", Admin",":org",", and User) access is necessary for the platform to retrieve Pull Request commits, their status, and author information."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Admin permission",src:i(50471).A+"",title:"Admin:repo permission",width:"741",height:"84"}),"\n",(0,t.jsx)(n.img,{alt:"Admin permission",src:i(19249).A+"",title:"Admin:org permission",width:"759",height:"112"}),"\n",(0,t.jsx)(n.img,{alt:"User permission",src:i(74686).A+"",title:"User permission",width:"742",height:"105"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save a new personal access token."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In UI Portal, navigate to ",(0,t.jsx)(n.strong,{children:"Configuration"})," -> ",(0,t.jsx)(n.strong,{children:"Version Control System"})," -> ",(0,t.jsx)(n.strong,{children:"Git Servers"}),". Define the following values and click ",(0,t.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Git provider: select ",(0,t.jsx)(n.code,{children:"GitHub"})]}),"\n",(0,t.jsxs)(n.li,{children:["Host: ",(0,t.jsx)(n.code,{children:"github.com"})]}),"\n",(0,t.jsxs)(n.li,{children:["User: ",(0,t.jsx)(n.code,{children:"git"})]}),"\n",(0,t.jsxs)(n.li,{children:["SSH port: ",(0,t.jsx)(n.code,{children:"22"})]}),"\n",(0,t.jsxs)(n.li,{children:["HTTPS port: ",(0,t.jsx)(n.code,{children:"443"})]}),"\n",(0,t.jsxs)(n.li,{children:["Private SSH key: ",(0,t.jsx)(n.code,{children:"your generated SSH private key"})]}),"\n",(0,t.jsxs)(n.li,{children:["Access token: ",(0,t.jsx)(n.code,{children:"your account token generated in GitHub"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Git Server configuration",src:i(46338).A+"",title:"Git Server configuration",width:"1903",height:"930"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Ensure the Git server has a green status. To store container images, integrate platform with a container registry by navigating to the ",(0,t.jsx)(n.a,{href:"/docs/quick-start/integrate-container-registry",children:"Integrate DockerHub"})," page."]})]})}function o(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},99788:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-1-8dbd9be050bb8272e927a193a581973e.png"},50471:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAuUAAABUCAYAAAAlM0kHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wsKDC03TnVWawAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAgAElEQVR4nO3df1DTd5748afiVLduf+1KQlCUW7he2eYYEu2P67o62qnBXP3CVm+07dI9uhDjXqudkZPOYWWwMCcuzBXrfE2Vlla2rZ3VLl67/HBPd3S9Tq1CEOI504MbV5CQhH6d/tBb60i+f+ST5JOQkICmqfX1mHEmn8/783n/+mj7ypvX582U3t5eL0IIIYQQQoikmQag1+uT3Q8hhBBCCCFuSQ6Hg6nJ7oQQQgghhBC3OgnKhRBCCCGESDIJyoUQQgghhEgyCcqFEEIIIYRIMgnKhRBCCCGESDIJyoUQQgghhEgyCcqFEEIIIYRIMgnKhRBCCCGESDIJyoUQQgghhEgyCcqFEEIIIYRIsmmRTp46dYrW1lYuXboUs4KZM2diNptZsGDBjevVqe1krmmibN9ZnptMtZe72fOrBq4U7+C5xXfcuH5947rZmf0kdaXvcq48LzFNDB/AunAzbPsTtlWzEtOG+A5x01pTT4tLfU5DYcVGzNoYt/Y0Y/lgNlUVS9Ep9ZxfUYs1N4HdTZSQsUxOV1M5NjtgKGJ3sf5G9u7GcR2hssbOQ/E834RwYFvfwdyEtX+T/z0UQnynRAzK4w3IAS5dukRra+uNDcqv1xeDOLrsUHgFuJmDciG+nYwlN28Q09VUzkHdRqryNcnrRE8ztiETVTsmH9R/I7RLqdqxNHjsOkJlzQUKdhRhTF6vhBDiOyli+kqsgDwlJYW1a9fyN3/zN3Fd/41Le5yGnm4aCmXlVwjx7eMcckO65tsdkAshhPhGRVwpj+WJJ57gRz/6EVqtln/913/l6tWr499wsZu9NbXsPdRN32XIyHuKra+8xJI5vuIrnx6g7l9q2dP9pa/sH6aH3N5Vm8MTe4pp+l0qLesaODh8G/nlb9HwNLz3goVXj4wwQ11nWEpG4P7WObQ/u533hm9jydM1bN3yGBkpVzjzykr+vu0xfv/vG7j/onJvxa955OhWthxfxft9mzBe7udg7WZe/V03fcxiyc+2KPcH+/fO4R/zx41b2dP9NdlLrWyvsWJMVQbh+Zi9tQ3KHEwne8FKnt+6iYJ7Q8ca2Rf0vf3PWGs/pI9ZrN76LrWFyuRd7qf91QZ27/8DXRchI+sxnqnaQunDwS8kX3zcRN0rb9B2agTP7bNY8rMXqChfSfbtY1u6cmo7T655h4xtH9Kwak4cfRNCEWEV1dleT6XTNLn0jJ5mLI2OwGFwdd6BbX0zXYESPdZAm0q6Q4mBE40dOEPKVak39nosrUrajcuXilKY3kGLXdVOWPsTSzOJ3sdA2grNWOyRf+rgmzcDhUMdtLj86UFhqUPq/vjTaVZcoNLfZ60pLL1mvHlT2mx1h5Wp0kdcwfmwrS9XtR+e0hSazhQ+lgdz3Az8VehPKrqayrExzvy6jlBZE/48CY593Oc0/rgjtYPZ17/IcyKEEIkx4Rc9/+7v/o4FCxYwOjrKm2++GTsgB/iznQFDOU1HP+Hk717C+Ok7FFcewANw8Q/UrNpMy7Snaer4E++8mMUf32iKUMk77Pn3VJ5/+wC2ZzS0167nydW7wPIu779ZTHb3O2x642OuRO3EO+x5azrP7P+Q98sMON5ez55DX0a9uv3fPuCuqk8417cJ47VBDr6wkg0f/5iKDz7h5NvruPN369mw56zqjj9Qt2uQJbXv8x9vWrn/4waeeFEZ4+Vudv68mFcHH6bs7T9wsmMHhRxgw6r1tA/Hnj7eLmPPl0/T9MG7bH34S94ra+CPXwBKv6xH7mT1v33IycPv8pzhf6j5+T+ys9s3E1dObecff97AwMPlvHn4T/zHK6vgd5t58oUPfX1TGzzApmeboPRNtktALpKppxlLI1h31LJ7Ry27K0zMBfwBltO80Xd+Ry1VZje2miNKwAbgpuUD/70bKdQ6sDU5AA3milqsBtCZN7J7hypP2dXB+fm++oIBuZvCCqX9HRspHGqmst09pqtjjd9HY3EtVWaNL3jcMU4akN0OJbVKP32B74n5G0P6Y+tRXe/qoLLTEGjTmt5BZZM/WI0xb64j2Fo1wfkuMYztT24RuytM6ND7rlMH5OlFgXp3l2hoqVEHwaFjKfmJHmenQ/W8HHxi11BojvaFJ9rzJI7nFM/fF//8+QJyXUmt7wtDPHMihBA3UMyg/Hvf+17gc2ZmJgUFBQB8+OGHnD9/Pr5W8oqpeDqPjHvuIPVvn+IXTwNH+xkAPEf3s/dyHmW1G1iSNYuMBU9R8S9PRahkEc/86nGy52WR//RTPMIgM/5hA88smEPGwmdZvRQ8f77AF1E7sYhnylZyf9ocjKXFrAb29vQD07n/hQ8517GB+1WL1vf/6gUK5ikHvQeoPpJKRd1LLJnnG4PlV3Po+r+HOBO4IwdLuZVHsuaQvdBKWVkOHD1Epwc8h3ZR1+8bY/7fziE1axHP7apm9eVj7D3UH3v+HiinzJpHxrw8Vj+9EviQM5/6+wXPvfQSqxdmkTovj9U1v6ZiTj91vzvBFUb44+4muvI2sfWFx7l/3iyyl26goeYxPEfe4Ii66Wt9HKzczEcPV9NQlkc86/fi1tXVWI5lvfInUoBzXdy0fuDAWKJaldQuxZwL9Njp0pqwqlZZdfkmjC47dvVKbYl/hViDeYUehtzj91FrokAVHHd1OtCZi1QvF/rqCQ0mo4irj3EwmFRfGhyccOkpCNTp609Xp2qFWGuiSrVCbDSb0NntvuA4rj65GfZ/ztXHtyKs9MuqXpnONVGodfCJ+guDeiy5Jgrp4KC/vMdOl9aAIeqLnNGfZ8znFPezcGBTAvLQL0mTmBMhhJikcdNXHnjgAcxmM7t37+arr77imWeeYcqUKXR3d/Of//mf8bfyxVna39vPH1vtDHj+h49Uq8PucyeAp/jrecFz02dGCgnnoLlH+ThzOncC3H6XcmIWmizg0/E6obo/ZQYzYnQ5Y1Zq4LOn77/wMEjNz3KoCbnqimplXlU/MON23/1XrkUeI/fMIQN4zxl9tT7g3iz8vVHPjefcf+HhIf46WzVfKam+uRj08AWD9H0MPP1jMlTV3ambA/wBz0Vgpu+c+zfbqT6bxfMfrCQjJXaXxK0tsS96ujnv0jA3QpDmy8U2hOVia5irdXPeBdyQHTrcDA+Bbn7Yi6Da2ehcF3DCuLngCemj6wJOHL60kbA+Re2PVoOOC/H1KXcpVRVQWVNOCxN4vq4LOLWzx9Sblg4nhtyQG+llWg2G+RpaOh2Q6/tiYVxRNIn8+tjPiTifRVdjMzrzRqrUY9ZOck6EEGKSogblU6dO5Sc/+Qm33347a9eu5X//93+ZOXMmTqeT/fv3T6CJQd579gnK79rA+6+8RfY9t9G3K48n9vhK79QZgH4GhsGY5jv3hXNw8iNKgNTsH5PKBSz73mV1lrrkNu4E5ce0V/jLFfAvMbuH/wfI487bQZP5EGDnv/8MRn9gfnGQASA/a/JpIqmZPyaVJv677wqkKQ1f8+Duh9TlWaQyh+yHgZP/xQB5gcDcN7+LyFA1rfn5Jn5x2MqGFzaT8Xp1IN9fiG9e9ABWl66BTneEQDRyED/Z9qMGlWMC0LES0kftbHTa2VgnsgWjK/jTgbj6FNhpxRf82+IJQsf5oqJLj767jc5gQNdqp6sYPrHrebA43kGF9j3Wc4r3WRhLiqCxnkrCduWZzJwIIcQkRU1fGR0dZc+ePbhcLr73ve/xgx/8gL/85S+89dZb8eWRB4zg+RRgOtOnw+efNvHW28HSjIcfYwnHqN5i46P+QfqO26jbeTZaZQlwhTOvPE6mqYEz0RLScxbzi6x+dte9Qef/uwJcwW3fz3sn1avcB9i59QBnhkfoO9JA3e5BUp9ZySN3QuriVTxzezd15Q209w7i6f+YveWbee/2x1n96HXsEPO3y7BkXWHnyy/z3vF+PH8+y8Gaf6ZmMAvL/8kDZvHIzx4ntXs7W175kDN/HqHvuI2XKv5A6opVLElT1ZWSTcErb1LGAYp/uZ2uy5PvlrhFaTXoUKUtuI5ga40nBzucbyW1q1GVl+w6QmsPkGvA6OrApsrtdrY308J46Q8TZ5yvx9naTKsqtaO1sQPm62MHxYnoo1bPQ4TWOYZLlRLi76/Z5Eu5iNWnHnV++gS+PGj1PKTO8Uapy67nwfGCV+1SCgwODtZ04PT3cRJiPqe4n4XvJU5da30wH32ycyKEEJM0bvrKpUuXeO211/inf/onfvCDH/Cb3/yGixcvTrCJPApqn6Jzy3b+fuEulpTWsXo1HPS/yznvKRp+8wUvldl4yvQGS54up6L8MfZaIr3smSTT83juN01Mr6xmi8nGANPJXvAYpZXq3PeneGZZP3UrNvPHi3ew5Olf837Fw76F83seY+uhJjK2VlPzMxsD3IFxmZV3Dll55J4obcYjJYfS376Ppn4rr/7qccqVXV0aPniBghzfJXcu/zWtb9qoe3krf7/zS7gni9WWJlrXPexLAVK7PY/nXq/mv82bWftCFu/vklQWMRF6rCV6LI3lWAC0JqxmDbZJJJzr8jdSRT2VgXQNDYUVS/EHT7b19VhalaIxu4yMz2g2cbBGtftKpItyi9hd0oxFSV0A38uh8e1tfv19HEuDuaKI8+o6CUup0JqY21mOpVE5NhSxO9DfGH3SzsZZozw3/1gjBdXapRQYykN2XzFXbISaeizrQ8cfK9A2ztdjs7spNFzHfvExn9NEnoUea4WJypp6LJ0mqkrinBMhhLhBpvT29nr1+tC33svLQ/MW77jjDu677z5OnjwZtaLa2tqEdPBm4N8S8f2+TfIikBDim3cDfsPoN+5m7LMQQiSIw+GIvFI+c+bMkF8I9OWXX44bkM+cOfPG9+4WcmbPE9S0hp/9MaW7q1mSGukOIYS4mTmwNfp22JGAXAghfCIG5WazmdbW1rh+U+fMmTMxmyP+AFjE6f7S93mnNNm9EEKIxPP/8iRJBxFCiFAR01eEEEIIIYQQ3wyHwzHx3+gphBBCCCGEuLEkKBdCCCGEECLJJCgXQgghhBAiySQoF0IIIYQQIskkKBdCCCGEECLJJCgXQgghhBAiySQoF0IIIYQQIskkKBdCCCGEECLJJCgXQgghhBAiySQoF0IIIYQQIskkKBdCCCGEECLJEhKUX7x4kTNnztDT0xPzz5kzZ7h48WIiugGAZ/9aMn95AE/CWkiCU9sTPKZudmav5eBwwhoQNyU3rTXlVLa7Q0+7jlC5vp5WV+jprqYI18a456aX7HH1NGOpOYIzYQ04sH0Xn5sQQnwLJCQoHxoa4tq1a3Fde+3aNYaGhhLRDQBSV73GuddXkqoce/avJbO2O2HtCfHdpcEwX4PTGRpoO+12nLg5YVefdzM8BLp0TeSqtEup2rERs1Y5dh2hcn0zXQnp9zcobFzO9nosTY7k9kkIIcRNISFBeayAfMqUKaSmpjJjxoy4rhdCfDvo0jVgt6uCZzf2Tjc6bViw7nJwwqXnwdwkdFIIIYS4CU1LRqN3330306dPZ9q0aQwPD+P1eqNfPHwA68J+LH2bMAK+1IonYd9ZnlsAMMLBX/6UgXVneY7tZO7KouHezWzYA2X7gudOvr6SgdocntgDcIxMf/kCfOkga5qUBhfRcPw1CtL8bR9i+fHXKEhT2llejePFzbQvrubk6ytJVfpTp9ydv+1P2FbNAnyr8g/0r+Nk1i4eePGY74LSdzlXnhccX0jbEcrHMbB/bdR6PeqysH5NuF3l2sB8iVtXrgEjHQy7AC2Am/MuPQUVszlYY6erWI8RZfXcYFL+zbpprann/HwTztYOnFoTVRUaDq7vYG7FRsyuZiyNvtVk2/pyMBSxu1gfuK/FnyoROB8uUv1L0Y1zv7O9nkqniSpdB5Wt7sj19wT7Fam8q6kcm105CLTpwKaMK63VX96MxQ7GklqsueBLAVH/VECPdUdRlLlayKMc5+IK/73Ba07M30hVfuSfRDjb66OOK6QM0JnD6okx7hDKtf6xRZ4TIYQQcent7fXeaKdPn476p6+vz/vZZ595R0ZGvGfPng2cj87jbXn2Pu+rJ5XDk7XeeVn3eedtsysn7N5Xs2q9naqywLX+c8/u97qVQ/dvLap7/fco94df79zvXZtl8bY4g/1Q1+VrW92e3ftq4Hqlraz7vGt/6wkZS+D4ZK13nur6MeXRKOMMXOfc712r6oevXdWYwvsZs13VOMZcK251nW9s8m5pc/kOTu/1lr7R6/V6Xd7fV9d5fz8c4Rqvy/v76k3e0urD3qFALb3eXc8Hr/cOH/ZueX6v6u+s757wOnZF/E9FpPrHv3+orc5b+vzY8pBxqfsXqVzV3tDpXuVz6LiG2uqU+VGPW92uck2grrFjGVPHmLlSOb03dFzDh71bng8ft/peX38C8xpr3OrxhV8bdU6EEELE0tvb60347itTpwabuO2227j77rsB+Pzzz/n666/jqGEWjyxfhOPcCACec/2Ubasm/9N+34uOpw5RV7pMWWUCFlezegKruV2Hm8jf9mzw/gXP0sAhPhoG0lZi61NWzRVl64L56Zw6RF1Ie3ms3gZtx0eCN5S+q1qhnkXBumLa247iCbRdo6o/tHxci6t52V9v2kospShzNMJHbcco27cpOCbyWL1tEXWHu1VjjqPdwQNY1/QHf3IgBGCcr8fZ6cAJdHU60Ok0gIa0dH9euYNP7BoeMoSu4hpXTGDVVEl/KQis4Gowr9DT1Rk9Pzuk/njuNxSpVoh95SHjMhcFc97Dyn1tXAh81uXq4xtbj50urQmramVal2/C6LJjV708qR6LLt+E0d4ReLnS91MIg+rfdxh1/dqlFBjAOeTGn2pkLClS3aunwKwJzEtc4wbfOwCNbgorVO8FTHZOhBBCAAlOX5k5cyZ33XUXHo+H0dFRfvjDHzJlyhQuX77MV199FXc9qZlZtO86imfVYj5qy+KR1xeT0VbBR8MryTjcRNmjmybZwxEGPoX2PT8l88XQkrJBIEYg6jnXD0ebeCB7c2hB6SAwK+I9zMkiX9W2/tFZY8uP9jMAweB/QgYZOLqIjJrQs6mZWdDWj4c5cbZ7jA1rjlG276wE5CKUdjY61wWcuBke0vCQ2RcAGufrsX3gwGkAp9ZAgTZGPeNxXcCJw5fOEta2E2IHezHuj0g7W6lXeUl1vmZsuRJ06nKL2F3SjGV9OaAZG5xG4RxyQ7ohrP8a5mrdnA+kBIXT86ChmYN2N+Z8sHdCYUmUdJJxuTnv0jA3rA1dugY63crzjDFupZ6Wxg6MJbWhY57knAghhPBJaFD+/e9/n6lTp5Kamsro6CgpKSlcvXp14lsgLlhG2dFdfHQK2u5dho1ZZCyHl453s/zTRWT8YrI9nEXGvVC2bnK50qmZWVC6Lu4ccAAG+2kni5eVttvOjcCCsAB5cRYZE++OYg4Zi48xEOlLxb1ZpMbd7iIa9i2jbU0OOyWXXKhp9Tyk7eCT9tk4MWD1B15K8Ga3u3Gmm65vlVQ7G512NtbJ5iTHuD9iYO66gJPZ+Fb94cSQG3IjBKj+z7lF7N6Bb9W4ph7iCEKDAXD4F4uxwbKa+gvPCfWcT8g4wX+6Bh0anPGMGw2FJQZONJZjK1HnujOpORFCCOGT0PQVj8fD1atXmTp1KtOmTWN0dJSRkZHxX+yMKI9HSo/RtusQ+kd9AXDqwmXQtos2lvHIdazkGh8tpm7N9shbsQ0fwDreft0LllG250l2nhqngT27VPd3s3NNUyAFxvhoMe0vVqjKRzhYsRmWL57kKjn4031Cx6S0q8xd3O3OWYnteDWONTnjj1HcYnxbI3a1duBM1wSDNa2eh7RuTnS6Mc6fzEquilbPQ3Rgi7bP+Y24X5USAg5sjY5A2ohxvh5na7Oq3E1rYwfM96VkONtVZVpN/F8ccg0YXaH9crY304IBw3jBa66JQuzYGjvQTSQNKITy3BrVL5kq41aeV6xxB2iXUlVhwtlYjq0nOI5JzYkQQgggwSvlo6OjeDweNBoNKSkpfPbZZ5Pe/tD4aDHte8DyunIiLQv90WM4ttVMKIBNXbWOsuwnVbuvbOLktrU8kJ0TvCiws0oseTx3vBrrwhwyA+cWheZgly6Dihwyj/oO87f9CZt/1XnBJs7t207mwhw2oCpfFSX1Je4xvsZJQscUsnPKRNpNW4ltXz+Za3Kom8DOMOK7zbf/eHjwrcEwH1pa9RRMdCtE7VIKDOUhu6+YK4o4v74eS2vwMmP4ymxUmtj3GwzQWI5FCSR15o1U+cv8qRg15bSgKldytXXpUKkqG5PK4b8n34RxvXr3Fd9OKzZ1v+LapeQ65jakPxupop5KVVpPyJzEGHcI7VKqSi5gaSzHYihi9/z45kQIIURkU3p7e716/XWuaoXp6ekJOU5JSWHGjBlcunQp6j25ud+9DY39WyJKICvEt4t/S8SoW/19C92MfRZCCBEfh8ORmJXylJSUkBXxa9eujRuQp6SkJKIbN7Xwfcb9ZK9wIW5BriPYWqGwQgJyIYT4rkpIUJ6ens7Q0FBcqSopKSmkp6cnohs3tdRVr3FuVbJ7IYRIruAvQJJ0ECGE+G5LSPqKEEIIIYQQIj4OhyOxu68IIYQQQgghYpOgXAghhBBCiCSToFwIIYQQQogkk6BcCCGEEEKIJJOgXAghhBBCiCSToFwIIYQQQogkk6BcCCGEEEKIJJOgXAghhBBCiCSToFwIIYQQQogkk6BcCCGEEEKIJJOgXAghhBBCiCSToFwIIYQQQogkm5aISi9evMjQ0BDXrl2LeW1KSgrp6encc889iehKfIYPYF3Yj6VvE8bk9WJ8p7aTuSuLk6+vJDUhDXSzM3sXGcdfoyAtIQ2I7wQ3rTX1tLjU5/RYdxQl5N9OV1M5B3UbqcrXJKD2G8WBbX0zlNRizU1W+x3MrdiIWZuI+n3P/PyKZI1PCCFuDQlZKY83IAe4du0aQ0NDieiGECJBjCW17N7h+2M1OLDVHMGZ7E4ljR7rDlXA6jpC5fpmupLaJyGEEDebhATlsQLyKVOmkJqayowZM+K6Xgjx7WU0m9C5LtzCQbkQQghx/RKSvhLL3XffzfTp05k2bRrDw8N4vd7xb1BSNxru3cyGPVC27yzPLQDP/rU88OIx5aJi3leln4SWBe/x6WZn9pPU+cu2VQfbGj6AdeEhlh9/jYK0EQ7+8qcMLK/G8eJm2hdXK+kjvvMbjir3lL7LufK8YLv96ziZtSvYvqo8MJ41TcHj8PJxDKjHNeF6Q8cdPmchlLpC502IePjSOfwrxTqzKv2kpxlLoyNwZUgZ4Gyvp7LV7TvQmihMj96Ks72eSqeBwqEOWlwaCpX0jZA61Kk1Pc1YPphN1YoLVPr7oDVRVbEUXZS+h6fmRK5bld5BcHy29eVgKGJ3sZ6xaT/B/kYay4M5bgb+KnRuuprKseGvLwLXESprOpQvR2EpRWHzHuxXfOOO1A7Ks4s630IIISamt7fXe6OdPn066p++vj7vZ5995h0ZGfGePXs2cH5cJ2u987Lu8756MnjK/VuLd96z+71u9fE2u3Lk8bZsCysLXGv3vhpSl8fb8ux93nlZtd5Or9frde73rs2yeFucqjJVO/5za3/rCTn21+f+rcU7L2tseeD4ZK13XqD+SPWNPweB65z7vWvV44hZr2/c6nbGzoty/5i6hPBzeX9fvcm763To8ZY2l3Lc6931vLq817vr+Trv74d9R51v7PX9O/N6vd7Te72lzwePh9rqvKXVh71DIeXqukMNtdV5S1V1R6pjqK3OW/pGb0h9gWOv19v5hvrY13d1eyH1DR/2bnle3f9e5XPYnIRfp5Sr2404dvVYTu8NnYuweQzl63fw+rD2Tu8Nm6fIzyzquNXjGz7s3fL8OGMNzIkQQoiJ6O3t9SZ895WpU4NN3Hbbbdx9990AfP7553z99dfxV7S4mtWBFdsRPmo7Rtm64EuPqavWUbbnkLLSM4uCclXZwmXkH+1nAODUIepC6ppFQU01+f7DtJXY+kJfdlS3w/BR2o4WY1k1K3j/umLqDncHbyh9F1tYeXvbUTxA1+Em8rfVqOoPLY81By/7601biaUUHOdGIJ56lXEH7vfP2dFDfDSsamPwANY1/TTIC59iHF2N5VjWl2NRXnAMroTb6dKaKAi8EKinwAwn7L6VVGOxahU114ARN8MuADf2TjfGFapV69wirIYYHTGYVC83jq1Dl2/CaLcHV4C1JqpUK8RGswmdv1zpu1W1Oq3LN2F02bEHVrj9/QVy9fGtCLscnHDpsapXpnNNFGodfNITZSy5Jgrp4KC/vMdOl9aAIeqLnBoKS/zj1mBeoYchN06gq9OBzlykmidfubPT4VtVj2vcAA5sNR3oxrzQOok5EUIIMUZC01dmzpzJXXfdhcfjYXR0lB/+8IdMmTKFy5cv89VXX11HzYMMHIW6ozmqVAyARTQMgzGNsakcFGMBPOf64d5lk9/BZLCfdppoz24KPb84Cw9RUlDmZClB/wgDn4L+0Vljy5UvDZPrV+x6iTjuOWQsPsbAIJAGcIwNa45Rtu+sBORiXEYlMHO211PZeASDkgLiHHKDy0Hl+o7QGwxuQBOWYgGgYS4Abs67NMy9rt1D3Jx3KV8YQs5rmOuKcotWg44L4O97ukGVyqLcq/XVS+5SqiqgsqacFoJzEJPrAk7t7DH1pqXDiSE35EbaWUaDYb6Glk4H5Orp6nRgXFEUVkc83AwPgW5+WBva2cH3AGKNW3kmXY3NvnQj9Zi1k5wTIYQQYyQ0KP/+97/P1KlTSU1NZXR0lJSUFK5evcrFixevs+Y5ZCxeRENNlNVc//aBfWd9Qaiy5SFAamYWtPXjIS8YoA720w5h/yOP1nQW+YureTnK1oQRV7sH+2kni5eZRca90HZuBBaEBdCLs8iIp/2IYtcbcdwALCJjTvBzw75ltMKF+y8AAAQFSURBVK3JYafkkos46PKLKOysx9aupypfgy5dAwZT5Lxn1xEqay5QsKNWWU31beXnMzYI9AeU8UeiGuZqNcwtibI1YKTA3OUOfEHQpWug03c8NkBVPmqXUrVjqdL3cmzxBKGqADh8KLr06Fs96gwGdK12uorhE7ueB4tjtBPROMG/8kUhrnEDxpIiaKynkrAtKiczJ0IIIcZIaPqKx+Ph6tWrTJ06lWnTpjE6OsrIyEjsFztjmsUjy2FDxYGIQbBvNTwrEHx6jh+i3V84J4v8o5t575T/xAgHd6lWvYcPYM1ey0F1Soda2mKWs5mX9o9E796eXar7u9m5pimQAmN8tJj2FytU5SMcrNgMyxdf1/7jMetdsIyyo6H99uyvYAPLeET9xWbOSmzHq3GsyWHnKYSIQYO5xAStzbS68KWk2Jux9US4NHzFuEeVVqIEj10fqLZW7OkI2w89dl8M86GlcZztGV2qlBDctDZ2gNnk+5KQa8Do6sDW7g5c7mxvpgUlbaRHPa4JrOpr9TykdWBrUr1o2dOMza7nwfGCV+1SCgwODtZ04PT3cRKM8/U4/c8HCIx7vt73LGKNO8D3EqeutZ5K/7WTnRMhhBBjJHSlfHR0FI/Hg0ajISUlhc8+++yGbX+Yuuo13u/P4YHszcGTym4jqavWUZb9JJl7fKfzS4tDc8aPg3VhDpmAb3W4mvyj/XG2PIuC199lIPunZL4YPBuyS0npMqjIIVPZnSV/25+w+csWbOLcvu1kLsxhA6ryVWEr3BMVs948nut7l53qfgd2kwmTthLbvn4y1+RQN4GdYcQtSrsUq9lOZU0zaTuKsFaYqKxRp5AoO43kmij8oD6Y2mIIzT82FtdibSpXlRdhNTg4OIGu6PI3YnWWh6bPqHca0ZqY21mOpVFVFlj19QWdtvX1WFoJXB/YnUU7G6dqXGNSOVTzUWAoD9l9xVyxEWrqsaz3XxTfLiXG+XpsdjeFhuv45Um5RewuacaipJgE+h7vuEPoledbj6XTRFVJnHMihBAipim9vb1evT7KFluT1NMTukyWkpLCjBkzuHTpUtR7cnO/G/8l92+JKIGsEN8y/i0RIwab31I3Y5+FEEJMmMPhSMxKeUpKSsiK+LVr18YNyFNSUhLRjZvP8AGsCzcHU238ZLVaiFuQA1ujA2PJZF7wFEIIcbNJSFCenp7O0NBQXKkqKSkppKeP8xtCbiVpK7H1rUx2L4QQSdbVVI7NLukgQghxK0lI+ooQQgghhBAiPg6HI7G7rwghhBBCCCFik6BcCCGEEEKIJJOgXAghhBBCiCSToFwIIYQQQogkk6BcCCGEEEKIJJOgXAghhBBCiCSbBr5tWIQQQgghhBDJ8f8B7mV4AQhW45oAAAAASUVORK5CYII="},74686:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},19249:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-4-5f2086df6a9def0da49899efa6b94f0c.png"},66600:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_ssh_key-9e81ecf6c50c05aac49c6c520f04dba0.png"},46338:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github_integration-bd7de16fe6d899d8dd123958d2cb6e61.png"},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1748],{26513:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>o,frontMatter:()=>r,metadata:()=>d,toc:()=>u});var t=i(74848),s=i(28453);const r={},c="Integrate GitHub",d={id:"quick-start/integrate-github",title:"Integrate GitHub",description:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.",source:"@site/versioned_docs/version-3.9.0/quick-start/integrate-github.md",sourceDirName:"quick-start",slug:"/quick-start/integrate-github",permalink:"/docs/quick-start/integrate-github",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/integrate-github.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate SonarQube",permalink:"/docs/quick-start/integrate-sonarcloud"},next:{title:"Integrate DockerHub",permalink:"/docs/quick-start/integrate-container-registry"}},a={},u=[{value:"Integration Procedure",id:"integration-procedure",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"integrate-github",children:"Integrate GitHub"}),"\n",(0,t.jsx)(n.p,{children:"To initiate work in the KubeRocketCI, integration with a Version Control System (VCS) is essential. This integration facilitates the use of create, clone, and import strategies for handling source code.\nThis tutorial focuses on the create strategy, wherein an application is directly created in the integrated VCS solution for subsequent work. Here, you will find instructions on how to integrate KubeRocketCI with GitHub."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Prior to moving forward, ensure you possess an active GitHub account and have successfully deployed the platform."})}),"\n",(0,t.jsx)(n.h2,{id:"integration-procedure",children:"Integration Procedure"}),"\n",(0,t.jsx)(n.p,{children:"To integrate KubeRocketCI with GitHub, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Generate an SSH key pair:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'ssh-keygen -t ed25519 -C "email@example.com"\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add the created SSH key (the public part) to the GitHub account:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the GitHub main page, click your user icon. Navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"SSH and GPG keys"})," and click ",(0,t.jsx)(n.strong,{children:"New SSH key"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Create the ",(0,t.jsx)(n.code,{children:"quick_start"})," key. Insert your ",(0,t.jsx)(n.code,{children:"ed25519.pub"})," key data and click ",(0,t.jsx)(n.strong,{children:"Add SSH key"}),":"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(66600).A+"",title:"Repo permission",width:"1902",height:"930"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Generate an ",(0,t.jsx)(n.code,{children:"access token"})," for the GitHub account with read/write access to the API:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Log in to GitHub."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the profile account and navigate to ",(0,t.jsx)(n.strong,{children:"Settings"})," -> ",(0,t.jsx)(n.strong,{children:"Developer Settings"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Select ",(0,t.jsx)(n.strong,{children:"Personal access tokens (classic)"})," and generate a new token with the following permissions:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Repo permission",src:i(99788).A+"",title:"Repo permission",width:"756",height:"158"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The following (Admin",":repo",", Admin",":org",", and User) access is necessary for the platform to retrieve Pull Request commits, their status, and author information."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Admin permission",src:i(50471).A+"",title:"Admin:repo permission",width:"741",height:"84"}),"\n",(0,t.jsx)(n.img,{alt:"Admin permission",src:i(19249).A+"",title:"Admin:org permission",width:"759",height:"112"}),"\n",(0,t.jsx)(n.img,{alt:"User permission",src:i(74686).A+"",title:"User permission",width:"742",height:"105"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Save a new personal access token."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In UI Portal, navigate to ",(0,t.jsx)(n.strong,{children:"Configuration"})," -> ",(0,t.jsx)(n.strong,{children:"Version Control System"})," -> ",(0,t.jsx)(n.strong,{children:"Git Servers"}),". Define the following values and click ",(0,t.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Git provider: select ",(0,t.jsx)(n.code,{children:"GitHub"})]}),"\n",(0,t.jsxs)(n.li,{children:["Host: ",(0,t.jsx)(n.code,{children:"github.com"})]}),"\n",(0,t.jsxs)(n.li,{children:["User: ",(0,t.jsx)(n.code,{children:"git"})]}),"\n",(0,t.jsxs)(n.li,{children:["SSH port: ",(0,t.jsx)(n.code,{children:"22"})]}),"\n",(0,t.jsxs)(n.li,{children:["HTTPS port: ",(0,t.jsx)(n.code,{children:"443"})]}),"\n",(0,t.jsxs)(n.li,{children:["Private SSH key: ",(0,t.jsx)(n.code,{children:"your generated SSH private key"})]}),"\n",(0,t.jsxs)(n.li,{children:["Access token: ",(0,t.jsx)(n.code,{children:"your account token generated in GitHub"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Git Server configuration",src:i(46338).A+"",title:"Git Server configuration",width:"1903",height:"930"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Ensure the Git server has a green status. To store container images, integrate platform with a container registry by navigating to the ",(0,t.jsx)(n.a,{href:"/docs/quick-start/integrate-container-registry",children:"Integrate DockerHub"})," page."]})]})}function o(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},99788:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-1-8dbd9be050bb8272e927a193a581973e.png"},50471:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},74686:(e,n,i)=>{i.d(n,{A:()=>t});const t="data:image/png;base64,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"},19249:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github-scopes-4-5f2086df6a9def0da49899efa6b94f0c.png"},66600:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/add_ssh_key-9e81ecf6c50c05aac49c6c520f04dba0.png"},46338:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/github_integration-8b22671b3a88d05a62d88c06cf0cf2a9.png"},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>d});var t=i(96540);const s={},r=t.createContext(s);function c(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df75cb30.5041ccc9.js b/assets/js/df75cb30.6f59c9e7.js similarity index 92% rename from assets/js/df75cb30.5041ccc9.js rename to assets/js/df75cb30.6f59c9e7.js index d6b4cc207..3e227508b 100644 --- a/assets/js/df75cb30.5041ccc9.js +++ b/assets/js/df75cb30.6f59c9e7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8179],{82424:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var i=t(74848),s=t(28453);const o={},l="Deploy Application",r={id:"quick-start/deploy-application",title:"Deploy Application",description:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it.",source:"@site/versioned_docs/version-3.9.0/quick-start/deploy-application.md",sourceDirName:"quick-start",slug:"/quick-start/deploy-application",permalink:"/docs/quick-start/deploy-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/deploy-application.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate Argo CD",permalink:"/docs/quick-start/integrate-argocd"},next:{title:"Basic Concepts",permalink:"/docs/basic-concepts"}},c={},a=[{value:"Create GitOps Repository",id:"create-gitops-repository",level:2},{value:"Create Environment",id:"create-environment",level:2},{value:"Application Deployment",id:"application-deployment",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deploy-application",children:"Deploy Application"}),"\n",(0,i.jsx)(n.p,{children:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it."}),"\n",(0,i.jsx)(n.h2,{id:"create-gitops-repository",children:"Create GitOps Repository"}),"\n",(0,i.jsx)(n.p,{children:"As a prerequisite, create a GitOps repository in your GitHub account. KubeRocketCI Portal adheres to the GitOps approach when working with environments. In a GitOps repository, values are saved to redefine the default behavior (parameters) of deployment for each environment. The creation of a GitOps repository involves the following two steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Deployment"})," -> ",(0,i.jsx)(n.strong,{children:"GitOps"})," -> ",(0,i.jsx)(n.strong,{children:"ADD GITOPS REPOSITORY"}),", define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git repo relative path: ",(0,i.jsx)(n.code,{children:"github_account_name"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository Name: ",(0,i.jsx)(n.code,{children:"edp-gitops"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"GitOps tab",src:t(30724).A+"",title:"GitOps tab",width:"3486",height:"2002"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-environment",children:"Create Environment"}),"\n",(0,i.jsx)(n.p,{children:"To create an environment, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Environments"})," and click the ",(0,i.jsx)(n.strong,{children:"+ CREATE ENVIRONMENT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments section",src:t(11278).A+"",title:"Environments section",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Create CD Pipeline"})," window, enter the pipeline name and click the ",(0,i.jsx)(n.strong,{children:"Proceed"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelines tab",src:t(19339).A+"",title:"Pipelines tab",width:"3484",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Applications"})," tab, select the go-application and main branch:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Applications tab",src:t(47357).A+"",title:"Applications tab",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Add Stage"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Cluster: ",(0,i.jsx)(n.code,{children:"in-cluster"})]}),"\n",(0,i.jsxs)(n.li,{children:["Stage name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Namespace: ",(0,i.jsx)(n.code,{children:"edp-my-go-gin-app-dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"Development stage"})]}),"\n",(0,i.jsxs)(n.li,{children:["Trigger type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Pipeline template: ",(0,i.jsx)(n.code,{children:"deploy"})]}),"\n",(0,i.jsxs)(n.li,{children:["Quality gate type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Step name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create Stage window",src:t(8805).A+"",title:"Create Stage window",width:"956",height:"584"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Apply"})," button."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"application-deployment",children:"Application Deployment"}),"\n",(0,i.jsx)(n.p,{children:"To Deploy application, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environments list, click the Environment name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments list",src:t(66578).A+"",title:"Environments list",width:"3486",height:"2002"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environment details page, click the stage name to enter the stage details:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environment details",src:t(98066).A+"",title:"Environment details",width:"3486",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once you enter the stage details, proceed to deploy the application:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"CONFIGURE DEPLOY"})," button;"]}),"\n",(0,i.jsx)(n.li,{children:"Select the Image stream version;"}),"\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"START DEPLOY"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Deploying application",src:t(94238).A+"",title:"Deploying application",width:"1919",height:"1112"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Congratulations on completing the Quick Start guide! We hope you found this journey enjoyable."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have a good understanding of how KubeRocketCI works, you can further enhance its capabilities by integrating it with ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/artifacts-management/nexus-sonatype",children:"Nexus"}),". Additionally, explore other functionalities detailed in our ",(0,i.jsx)(n.a,{href:"/docs/use-cases/",children:"Use Cases"})," section. If you're eager to unlock the full potential of KubeRocketCI, navigate to the ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/",children:"Operator Guide"})," to fine-tune your KubeRocketCI for your specific requirements!"]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},47357:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/applications_tab-3e76c8ef4b92ec7ffcdb69daede9c564.png"},11278:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/create_environment-0ef046568407c01fd35aa303d4d4db38.png"},94238:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/deploy_application-3cd099a21997e8ce24ce497a2b2ec533.png"},98066:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_details-52648f041e754e9f09c595f99dc52360.png"},66578:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_list-25641f988440d7b4f949026c5f92232f.png"},30724:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/gitops_section-f4296cccafe382742255c4d22414bfaf.png"},19339:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelines_tab-c1c431a7fe16d602a21c835c5f1f7392.png"},8805:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/stages_tab-1e3bc5be9d8def05846a333c01d5562e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8179],{82424:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var i=t(74848),s=t(28453);const o={},l="Deploy Application",r={id:"quick-start/deploy-application",title:"Deploy Application",description:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it.",source:"@site/versioned_docs/version-3.9.0/quick-start/deploy-application.md",sourceDirName:"quick-start",slug:"/quick-start/deploy-application",permalink:"/docs/quick-start/deploy-application",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/quick-start/deploy-application.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:172011452e4,frontMatter:{},sidebar:"quickStartSidebar",previous:{title:"Integrate Argo CD",permalink:"/docs/quick-start/integrate-argocd"},next:{title:"Basic Concepts",permalink:"/docs/basic-concepts"}},a={},c=[{value:"Create GitOps Repository",id:"create-gitops-repository",level:2},{value:"Create Environment",id:"create-environment",level:2},{value:"Application Deployment",id:"application-deployment",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"deploy-application",children:"Deploy Application"}),"\n",(0,i.jsx)(n.p,{children:"Now, let's proceed to deploy our first application. This page offers detailed instructions on how to create an environment and deploy the application within it."}),"\n",(0,i.jsx)(n.h2,{id:"create-gitops-repository",children:"Create GitOps Repository"}),"\n",(0,i.jsx)(n.p,{children:"As a prerequisite, create a GitOps repository in your GitHub account. KubeRocketCI Portal adheres to the GitOps approach when working with environments. In a GitOps repository, values are saved to redefine the default behavior (parameters) of deployment for each environment. The creation of a GitOps repository involves the following two steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Configuration"})," -> ",(0,i.jsx)(n.strong,{children:"Deployment"})," -> ",(0,i.jsx)(n.strong,{children:"GitOps"})," -> ",(0,i.jsx)(n.strong,{children:"ADD GITOPS REPOSITORY"}),", define the following values and click ",(0,i.jsx)(n.strong,{children:"Save"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Git server: ",(0,i.jsx)(n.code,{children:"github"})]}),"\n",(0,i.jsxs)(n.li,{children:["Git repo relative path: ",(0,i.jsx)(n.code,{children:"github_account_name"})]}),"\n",(0,i.jsxs)(n.li,{children:["Repository Name: ",(0,i.jsx)(n.code,{children:"edp-gitops"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"GitOps tab",src:t(30724).A+"",title:"GitOps tab",width:"3486",height:"2002"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-environment",children:"Create Environment"}),"\n",(0,i.jsx)(n.p,{children:"To create an environment, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the UI Portal, navigate to ",(0,i.jsx)(n.strong,{children:"Environments"})," and click the ",(0,i.jsx)(n.strong,{children:"+ CREATE ENVIRONMENT"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments section",src:t(11278).A+"",title:"Environments section",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Create CD Pipeline"})," window, enter the pipeline name and click the ",(0,i.jsx)(n.strong,{children:"Proceed"})," button:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Pipelines tab",src:t(19339).A+"",title:"Pipelines tab",width:"3484",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Applications"})," tab, select the go-application and main branch:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Applications tab",src:t(47357).A+"",title:"Applications tab",width:"3484",height:"2000"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Add Stage"})," button."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Define the following values and click ",(0,i.jsx)(n.strong,{children:"Apply"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Cluster: ",(0,i.jsx)(n.code,{children:"in-cluster"})]}),"\n",(0,i.jsxs)(n.li,{children:["Stage name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Namespace: ",(0,i.jsx)(n.code,{children:"edp-my-go-gin-app-dev"})]}),"\n",(0,i.jsxs)(n.li,{children:["Description: ",(0,i.jsx)(n.code,{children:"Development stage"})]}),"\n",(0,i.jsxs)(n.li,{children:["Trigger type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Pipeline template: ",(0,i.jsx)(n.code,{children:"deploy"})]}),"\n",(0,i.jsxs)(n.li,{children:["Quality gate type: ",(0,i.jsx)(n.code,{children:"Manual"})]}),"\n",(0,i.jsxs)(n.li,{children:["Step name: ",(0,i.jsx)(n.code,{children:"dev"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Create Stage window",src:t(8805).A+"",title:"Create Stage window",width:"956",height:"584"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.strong,{children:"Stages"})," tab, click the ",(0,i.jsx)(n.strong,{children:"Apply"})," button."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"application-deployment",children:"Application Deployment"}),"\n",(0,i.jsx)(n.p,{children:"To Deploy application, follow the steps below:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environments list, click the Environment name:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environments list",src:t(66578).A+"",title:"Environments list",width:"3486",height:"2002"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"In the Environment details page, click the stage name to enter the stage details:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Environment details",src:t(98066).A+"",title:"Environment details",width:"3486",height:"2004"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Once you enter the stage details, proceed to deploy the application:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"CONFIGURE DEPLOY"})," button;"]}),"\n",(0,i.jsx)(n.li,{children:"Select the Image stream version;"}),"\n",(0,i.jsxs)(n.li,{children:["Click the ",(0,i.jsx)(n.strong,{children:"START DEPLOY"})," button."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Deploying application",src:t(94238).A+"",title:"Deploying application",width:"1919",height:"1112"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Congratulations on completing the Quick Start guide! We hope you found this journey enjoyable."}),"\n",(0,i.jsxs)(n.p,{children:["Now that you have a good understanding of how KubeRocketCI works, you can further enhance its capabilities by integrating it with ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/artifacts-management/nexus-sonatype",children:"Nexus"}),". Additionally, explore other functionalities detailed in our ",(0,i.jsx)(n.a,{href:"/docs/use-cases/",children:"Use Cases"})," section. If you're eager to unlock the full potential of KubeRocketCI, navigate to the ",(0,i.jsx)(n.a,{href:"/docs/operator-guide/",children:"Operator Guide"})," to fine-tune your KubeRocketCI for your specific requirements!"]})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},47357:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/applications_tab-1fde4ca073a9080bc99675f718bce74b.png"},11278:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/create_environment-0ef046568407c01fd35aa303d4d4db38.png"},94238:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/deploy_application-3cd099a21997e8ce24ce497a2b2ec533.png"},98066:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_details-d0def95a88041d893a4ab59dd681df28.png"},66578:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/environment_list-1e53c7560ce5a459c1efe2d75d490cb5.png"},30724:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/gitops_section-67baaa2e79c6165b11a820234ac1ca35.png"},19339:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/pipelines_tab-43aa87f89af050cb8d908e74550d4764.png"},8805:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/stages_tab-1e3bc5be9d8def05846a333c01d5562e.png"},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f473c0b6.966af865.js b/assets/js/f473c0b6.c5306a07.js similarity index 60% rename from assets/js/f473c0b6.966af865.js rename to assets/js/f473c0b6.c5306a07.js index 1542d3a9b..44b7b91cf 100644 --- a/assets/js/f473c0b6.966af865.js +++ b/assets/js/f473c0b6.c5306a07.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1406],{92909:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var t=s(74848),a=s(28453);const l={},i="Install Keycloak",r={id:"operator-guide/auth/keycloak",title:"Install Keycloak",description:"Inspect the prerequisites and the main steps to perform for installing Keycloak.",source:"@site/docs/operator-guide/auth/keycloak.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/keycloak",permalink:"/docs/next/operator-guide/auth/keycloak",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/keycloak.md",tags:[],version:"current",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719481234e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Overview",permalink:"/docs/next/operator-guide/auth/platform-auth-model"},next:{title:"Portal OIDC Configuration",permalink:"/docs/next/operator-guide/auth/ui-portal-oidc"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"PostgreSQL Installation",id:"postgresql-installation",level:2},{value:"Keycloak Installation",id:"keycloak-installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components},{Details:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"install-keycloak",children:"Install Keycloak"}),"\n",(0,t.jsx)(n.p,{children:"Inspect the prerequisites and the main steps to perform for installing Keycloak."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The installation process below is given for a Kubernetes cluster. The steps that differ for an OpenShift cluster are\nindicated in the warnings blocks."})}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Kubectl version 1.26.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://kubernetes.io/releases/download/",children:"Kubernetes official website"})," for details."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://helm.sh",children:"Helm"})," version 3.14.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/helm/helm/releases",children:"Helm page"})," on GitHub for details."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Out team recommends a Keycloakx helm chart from the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"codecentric"})," repository, but other repositories can be used as well (e.g. ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/keycloak/",children:"Bitnami"}),").\nBefore installing Keycloak, it is necessary to install a ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/download/",children:"PostgreSQL database"}),"."]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["It is also possible to install Keycloak using the cluster add-ons. For details, please refer to the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/add-ons-overview",children:"Install via Add-Ons"})," page."]})}),"\n",(0,t.jsx)(n.h2,{id:"postgresql-installation",children:"PostgreSQL Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install PostgreSQL, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Check that a security namespace is created. If not, run the following command to create it:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace security\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["On the OpenShift platform, apply the ",(0,t.jsx)(n.code,{children:"SecurityContextConstraints"})," resource. Change the namespace in the ",(0,t.jsx)(n.code,{children:"users"})," section if required."]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n - KILL\n - MKNOD\n - SETUID\n - SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n - system:serviceaccount:security:keycloakx\nvolumes:\n - configMap\n - downwardAPI\n - emptyDir\n - persistentVolumeClaim\n - projected\n - secret\n'})})]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: postgresql-keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: postgresql-keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n- KILL\n- MKNOD\n- SETUID\n- SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n- system:serviceaccount:security:default\nvolumes:\n- configMap\n- downwardAPI\n- emptyDir\n- persistentVolumeClaim\n- projected\n- secret\n'})})]})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create PostgreSQL admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-postgresql \\\n--from-literal=password= \\\n--from-literal=postgres-password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a helm chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add bitnami https://charts.bitnami.com/bitnami\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install PostgreSQL v15.2.0 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/bitnami/postgresql",children:"bitnami/postgresql"})," Helm chart v12.1.15:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The PostgreSQL can be deployed in production ready mode. For example, it may include multiple replicas, persistent storage, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/postgresql",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install postgresql bitnami/postgresql \\\n--version 12.1.15 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the PostgreSQL customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# PostgreSQL read only replica parameters\nreadReplicas:\n # Number of PostgreSQL read only replicas\n replicaCount: 1\n\nimage:\n tag: 15.2.0-debian-11-r0\n\nglobal:\n postgresql:\n auth:\n username: admin\n existingSecret: keycloak-postgresql\n database: keycloak\n\nprimary:\n persistence:\n enabled: true\n size: 3Gi\n"})})]}),"\n",(0,t.jsx)(n.h2,{id:"keycloak-installation",children:"Keycloak Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install Keycloak, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"security"})," namespace from the PostgreSQL installation."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add codecentric https://codecentric.github.io/helm-charts\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create Keycloak admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-admin-creds \\\n--from-literal=username= \\\n--from-literal=password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install Keycloak 20.0.3 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/codecentric/keycloakx",children:"codecentric/keycloakx"})," Helm chart:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Keycloak can be deployed in production ready mode. For example, it may include multiple replicas, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install keycloakx codecentric/keycloakx \\\n--version 2.2.1 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the Keycloak customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'replicas: 1\n\n# Deploy the latest version\nimage:\n tag: "20.0.3"\n\n# The following parameter is unrecommended to expose. Exposed health checks lead to an unnecessary attack vector.\nhealth:\n enabled: false\n# The following parameter is unrecommended to expose. Exposed metrics lead to an unnecessary attack vector.\nmetrics:\n enabled: false\n\nextraVolumeMounts: |\n - name: realm\n mountPath: /opt/keycloak/data/import\n\ncommand:\n - "/opt/keycloak/bin/kc.sh"\n - "--verbose"\n - "start"\n - "--auto-build"\n - "--http-enabled=true"\n - "--http-port=8080"\n - "--hostname-strict=false"\n - "--hostname-strict-https=false"\n - "--spi-events-listener-jboss-logging-success-level=info"\n - "--spi-events-listener-jboss-logging-error-level=warn"\n\nextraEnv: |\n - name: KC_PROXY\n value: "passthrough"\n - name: KEYCLOAK_ADMIN\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: username\n - name: KEYCLOAK_ADMIN_PASSWORD\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: password\n - name: JAVA_OPTS_APPEND\n value: >-\n -XX:+UseContainerSupport\n -XX:MaxRAMPercentage=50.0\n -Djava.awt.headless=true\n -Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless\n -Dkeycloak.connectionsHttpClient.default.expect-continue-enabled=true\n -Dkeycloak.connectionsHttpClient.default.reuse-connections=false\n\n# This block should be uncommented if you install Keycloak on Kubernetes\ningress:\n enabled: true\n annotations:\n kubernetes.io/ingress.class: nginx\n # The following parameter is unrecommended to expose. Admin paths lead to an unnecessary attack vector.\n console:\n enabled: false\n rules:\n - host: keycloak.\n paths:\n - path: \'{{ tpl .Values.http.relativePath $ | trimSuffix "/" }}/\'\n pathType: Prefix\n\n# This block should be uncommented if you set Keycloak to OpenShift and change the host field\n# route:\n# enabled: false\n# # Path for the Route\n# path: \'/\'\n# # Host name for the Route\n# host: "keycloak."\n# # TLS configuration\n# tls:\n# enabled: true\n\nresources:\n limits:\n memory: "2048Mi"\n requests:\n cpu: "50m"\n memory: "512Mi"\n\n# Check database readiness at startup\ndbchecker:\n enabled: true\n\ndatabase:\n vendor: postgres\n existingSecret: keycloak-postgresql\n hostname: postgresql\n port: 5432\n username: admin\n database: keycloak\n'})})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["For configuring Keycloak within your environment, it's recommended to utilize the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-keycloak-operator",children:"edp-keycloak-operator"}),".\nThis operator simplifies the integration process by automating the deployment and management of Keycloak instances.\nIt ensures that Keycloak is correctly configured to serve as an identity provider, facilitating secure access management across your applications."]}),"\n",(0,t.jsx)(n.p,{children:"By leveraging the edp-keycloak-operator, you can efficiently manage realms, users, and client configurations, making it an essential tool for robust access control in Kubernetes environments."}),"\n",(0,t.jsx)(n.p,{children:"To create a Keycloak user in the Master realm who can manage other realms, follow these steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create the ",(0,t.jsx)(n.code,{children:"edp_"})," user and set the password in the ",(0,t.jsx)(n.code,{children:"Master"})," realm."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This user should be used by Keycloak Operator to access Keycloak. Please refer to the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})," page for details."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Role Mapping"})," tab, assign the proper roles to the user:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Realm Roles:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"create-realm,"}),"\n",(0,t.jsx)(n.li,{children:"offline_access,"}),"\n",(0,t.jsx)(n.li,{children:"uma_authorization"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Client Roles ",(0,t.jsx)(n.code,{children:"openshift-realm"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"impersonation,"}),"\n",(0,t.jsx)(n.li,{children:"manage-authorization,"}),"\n",(0,t.jsx)(n.li,{children:"manage-clients,"}),"\n",(0,t.jsx)(n.li,{children:"manage-users"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Role mappings",src:s(87350).A+"",title:"Role mappings",width:"1922",height:"624"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"openshift-realm"})," is the realm name used as the ",(0,t.jsx)(n.code,{children:"broker"})," realm, which is utilized for integrating third-party Identity Providers. You can find more information about this integration in the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-cluster-add-ons/tree/main/add-ons/extensions-oidc",children:"extensions-oidc"})," repository of the KubeRocketCI platform."]})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/artifacts-management/harbor-installation",children:"Install Harbor"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/add-ons-overview",children:"Install via Add-Ons"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},87350:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/keycloak-roles-b10e57ec8201ee1a5765d4fb6fbef694.png"},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>r});var t=s(96540);const a={},l=t.createContext(a);function i(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1406],{92909:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var t=s(74848),a=s(28453);const l={},r="Install Keycloak",i={id:"operator-guide/auth/keycloak",title:"Install Keycloak",description:"Inspect the prerequisites and the main steps to perform for installing Keycloak.",source:"@site/docs/operator-guide/auth/keycloak.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/keycloak",permalink:"/docs/next/operator-guide/auth/keycloak",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/keycloak.md",tags:[],version:"current",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Overview",permalink:"/docs/next/operator-guide/auth/platform-auth-model"},next:{title:"Portal OIDC Configuration",permalink:"/docs/next/operator-guide/auth/ui-portal-oidc"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"PostgreSQL Installation",id:"postgresql-installation",level:2},{value:"Keycloak Installation",id:"keycloak-installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components},{Details:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"install-keycloak",children:"Install Keycloak"}),"\n",(0,t.jsx)(n.p,{children:"Inspect the prerequisites and the main steps to perform for installing Keycloak."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The installation process below is given for a Kubernetes cluster. The steps that differ for an OpenShift cluster are\nindicated in the warnings blocks."})}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Kubectl version 1.26.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://kubernetes.io/releases/download/",children:"Kubernetes official website"})," for details."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://helm.sh",children:"Helm"})," version 3.14.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/helm/helm/releases",children:"Helm page"})," on GitHub for details."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Out team recommends a Keycloakx helm chart from the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"codecentric"})," repository, but other repositories can be used as well (e.g. ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/keycloak/",children:"Bitnami"}),").\nBefore installing Keycloak, it is necessary to install a ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/download/",children:"PostgreSQL database"}),"."]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["It is also possible to install Keycloak using the cluster add-ons. For details, please refer to the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/add-ons-overview",children:"Install via Add-Ons"})," page."]})}),"\n",(0,t.jsx)(n.h2,{id:"postgresql-installation",children:"PostgreSQL Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install PostgreSQL, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Check that a security namespace is created. If not, run the following command to create it:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace security\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["On the OpenShift platform, apply the ",(0,t.jsx)(n.code,{children:"SecurityContextConstraints"})," resource. Change the namespace in the ",(0,t.jsx)(n.code,{children:"users"})," section if required."]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n - KILL\n - MKNOD\n - SETUID\n - SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n - system:serviceaccount:security:keycloakx\nvolumes:\n - configMap\n - downwardAPI\n - emptyDir\n - persistentVolumeClaim\n - projected\n - secret\n'})})]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: postgresql-keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: postgresql-keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n- KILL\n- MKNOD\n- SETUID\n- SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n- system:serviceaccount:security:default\nvolumes:\n- configMap\n- downwardAPI\n- emptyDir\n- persistentVolumeClaim\n- projected\n- secret\n'})})]})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create PostgreSQL admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-postgresql \\\n--from-literal=password= \\\n--from-literal=postgres-password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a helm chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add bitnami https://charts.bitnami.com/bitnami\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install PostgreSQL v15.2.0 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/bitnami/postgresql",children:"bitnami/postgresql"})," Helm chart v12.1.15:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The PostgreSQL can be deployed in production ready mode. For example, it may include multiple replicas, persistent storage, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/postgresql",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install postgresql bitnami/postgresql \\\n--version 12.1.15 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the PostgreSQL customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# PostgreSQL read only replica parameters\nreadReplicas:\n # Number of PostgreSQL read only replicas\n replicaCount: 1\n\nimage:\n tag: 15.2.0-debian-11-r0\n\nglobal:\n postgresql:\n auth:\n username: admin\n existingSecret: keycloak-postgresql\n database: keycloak\n\nprimary:\n persistence:\n enabled: true\n size: 3Gi\n"})})]}),"\n",(0,t.jsx)(n.h2,{id:"keycloak-installation",children:"Keycloak Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install Keycloak, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"security"})," namespace from the PostgreSQL installation."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add codecentric https://codecentric.github.io/helm-charts\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create Keycloak admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-admin-creds \\\n--from-literal=username= \\\n--from-literal=password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install Keycloak 20.0.3 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/codecentric/keycloakx",children:"codecentric/keycloakx"})," Helm chart:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Keycloak can be deployed in production ready mode. For example, it may include multiple replicas, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install keycloakx codecentric/keycloakx \\\n--version 2.3.0 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the Keycloak customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'replicas: 1\n\n# Deploy the latest version\nimage:\n tag: "24.0.4"\n\n# The following parameter is unrecommended to expose. Exposed health checks lead to an unnecessary attack vector.\nhealth:\n enabled: false\n# The following parameter is unrecommended to expose. Exposed metrics lead to an unnecessary attack vector.\nmetrics:\n enabled: false\n\ncommand:\n - "/opt/keycloak/bin/kc.sh"\n - "--verbose"\n - "start"\n\nextraEnv: |\n - name: KC_HOSTNAME\n value: "keycloak."\n - name: KC_SPI_HOSTNAME_DEFAULT_ADMIN\n value: "keycloak."\n - name: KC_HTTP_ENABLED\n value: "true"\n - name: KC_HOSTNAME_STRICT\n value: "false"\n - name: KC_HOSTNAME_STRICT_HTTPS\n value: "false"\n - name: KC_SPI_EVENTS_LISTENER_JBOSS_LOGGING_SUCCESS_LEVEL\n value: "info"\n - name: KEYCLOAK_ADMIN\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: username\n - name: KEYCLOAK_ADMIN_PASSWORD\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: password\n - name: JAVA_OPTS_APPEND\n value: >-\n -XX:+UseContainerSupport\n -XX:MaxRAMPercentage=50.0\n -Djava.awt.headless=true\n -Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless\n -Dkeycloak.connectionsHttpClient.default.expect-continue-enabled=true\n -Dkeycloak.connectionsHttpClient.default.reuse-connections=false\n - name: HTTP_ADDRESS_FORWARDING\n value: "true"\n - name: PROXY_ADDRESS_FORWARDING\n value: "true"\n\n# This block should be uncommented if you install Keycloak on Kubernetes\ningress:\n enabled: true\n annotations:\n nginx.ingress.kubernetes.io/proxy-buffer-size: 256k\n # Defines the class of the Ingress Controller.\n # It allows you to choose which Ingress controller in cluster should be used to expose the Keycloak service to the outside world.\n ingressClassName: "nginx"\n # Exposes Keycloak paths according to the rules from documentation.\n # Ref: https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations\n console:\n enabled: false\n rules:\n - host: keycloak.\n paths:\n - path: \'{{ tpl .Values.http.relativePath $ | trimSuffix "/" }}/\'\n pathType: Prefix\n\nproxy:\n enabled: true\n mode: "edge"\n\n# This block should be uncommented if you set Keycloak to OpenShift and change the host field\n# route:\n# enabled: false\n# # Path for the Route\n# path: \'/\'\n# # Host name for the Route\n# host: "keycloak."\n# # TLS configuration\n# tls:\n# enabled: true\n\nresources:\n limits:\n memory: "2048Mi"\n requests:\n cpu: "50m"\n memory: "512Mi"\n\n# Check database readiness at startup\ndbchecker:\n enabled: true\n\ndatabase:\n vendor: postgres\n existingSecret: keycloak-postgresql\n hostname: postgresql\n port: 5432\n username: admin\n database: keycloak\n'})})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["For configuring Keycloak within your environment, it's recommended to utilize the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-keycloak-operator",children:"edp-keycloak-operator"}),".\nThis operator simplifies the integration process by automating the deployment and management of Keycloak instances.\nIt ensures that Keycloak is correctly configured to serve as an identity provider, facilitating secure access management across your applications."]}),"\n",(0,t.jsx)(n.p,{children:"By leveraging the edp-keycloak-operator, you can efficiently manage realms, users, and client configurations, making it an essential tool for robust access control in Kubernetes environments."}),"\n",(0,t.jsx)(n.p,{children:"To create a Keycloak user in the Master realm who can manage other realms, follow these steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create the ",(0,t.jsx)(n.code,{children:"edp_"})," user and set the password in the ",(0,t.jsx)(n.code,{children:"Master"})," realm."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This user should be used by Keycloak Operator to access Keycloak. Please refer to the ",(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})," page for details."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Role Mapping"})," tab, assign the proper roles to the user:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Realm Roles:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"create-realm,"}),"\n",(0,t.jsx)(n.li,{children:"offline_access,"}),"\n",(0,t.jsx)(n.li,{children:"uma_authorization"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Client Roles ",(0,t.jsx)(n.code,{children:"openshift-realm"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"impersonation,"}),"\n",(0,t.jsx)(n.li,{children:"manage-authorization,"}),"\n",(0,t.jsx)(n.li,{children:"manage-clients,"}),"\n",(0,t.jsx)(n.li,{children:"manage-users"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Role mappings",src:s(87350).A+"",title:"Role mappings",width:"1922",height:"624"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"openshift-realm"})," is the realm name used as the ",(0,t.jsx)(n.code,{children:"broker"})," realm, which is utilized for integrating third-party Identity Providers. You can find more information about this integration in the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-cluster-add-ons/tree/main/add-ons/extensions-oidc",children:"extensions-oidc"})," repository of the KubeRocketCI platform."]})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/artifacts-management/harbor-installation",children:"Install Harbor"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/operator-guide/add-ons-overview",children:"Install via Add-Ons"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},87350:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/keycloak-roles-b10e57ec8201ee1a5765d4fb6fbef694.png"},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>i});var t=s(96540);const a={},l=t.createContext(a);function r(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f75a3945.99f3d97e.js b/assets/js/f75a3945.99f3d97e.js deleted file mode 100644 index e8fb908b7..000000000 --- a/assets/js/f75a3945.99f3d97e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[45],{59139:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var t=s(74848),a=s(28453);const l={},i="Install Keycloak",r={id:"operator-guide/auth/keycloak",title:"Install Keycloak",description:"Inspect the prerequisites and the main steps to perform for installing Keycloak.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/keycloak.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/keycloak",permalink:"/docs/operator-guide/auth/keycloak",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/keycloak.md",tags:[],version:"3.9.0",lastUpdatedBy:"Sergiy Kulanov",lastUpdatedAt:1719645984e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Overview",permalink:"/docs/operator-guide/auth/platform-auth-model"},next:{title:"Portal OIDC Configuration",permalink:"/docs/operator-guide/auth/ui-portal-oidc"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"PostgreSQL Installation",id:"postgresql-installation",level:2},{value:"Keycloak Installation",id:"keycloak-installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components},{Details:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"install-keycloak",children:"Install Keycloak"}),"\n",(0,t.jsx)(n.p,{children:"Inspect the prerequisites and the main steps to perform for installing Keycloak."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"The installation process below is given for a Kubernetes cluster. The steps that differ for an OpenShift cluster are\nindicated in the warnings blocks."})}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Kubectl version 1.26.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://kubernetes.io/releases/download/",children:"Kubernetes official website"})," for details."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"https://helm.sh",children:"Helm"})," version 3.14.0+ is installed. Please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/helm/helm/releases",children:"Helm page"})," on GitHub for details."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Out team recommends a Keycloakx helm chart from the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"codecentric"})," repository, but other repositories can be used as well (e.g. ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/keycloak/",children:"Bitnami"}),").\nBefore installing Keycloak, it is necessary to install a ",(0,t.jsx)(n.a,{href:"https://www.postgresql.org/download/",children:"PostgreSQL database"}),"."]})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["It is also possible to install Keycloak using the cluster add-ons. For details, please refer to the ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/add-ons-overview",children:"Install via Add-Ons"})," page."]})}),"\n",(0,t.jsx)(n.h2,{id:"postgresql-installation",children:"PostgreSQL Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install PostgreSQL, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Check that a security namespace is created. If not, run the following command to create it:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace security\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.p,{children:["On the OpenShift platform, apply the ",(0,t.jsx)(n.code,{children:"SecurityContextConstraints"})," resource. Change the namespace in the ",(0,t.jsx)(n.code,{children:"users"})," section if required."]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n - KILL\n - MKNOD\n - SETUID\n - SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n - system:serviceaccount:security:keycloakx\nvolumes:\n - configMap\n - downwardAPI\n - emptyDir\n - persistentVolumeClaim\n - projected\n - secret\n'})})]}),(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: postgresql-keycloak-scc.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: postgresql-keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n- KILL\n- MKNOD\n- SETUID\n- SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n- system:serviceaccount:security:default\nvolumes:\n- configMap\n- downwardAPI\n- emptyDir\n- persistentVolumeClaim\n- projected\n- secret\n'})})]})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create PostgreSQL admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-postgresql \\\n--from-literal=password= \\\n--from-literal=postgres-password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a helm chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add bitnami https://charts.bitnami.com/bitnami\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install PostgreSQL v15.2.0 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/bitnami/postgresql",children:"bitnami/postgresql"})," Helm chart v12.1.15:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The PostgreSQL can be deployed in production ready mode. For example, it may include multiple replicas, persistent storage, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/postgresql",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install postgresql bitnami/postgresql \\\n--version 12.1.15 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the PostgreSQL customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# PostgreSQL read only replica parameters\nreadReplicas:\n # Number of PostgreSQL read only replicas\n replicaCount: 1\n\nimage:\n tag: 15.2.0-debian-11-r0\n\nglobal:\n postgresql:\n auth:\n username: admin\n existingSecret: keycloak-postgresql\n database: keycloak\n\nprimary:\n persistence:\n enabled: true\n size: 3Gi\n"})})]}),"\n",(0,t.jsx)(n.h2,{id:"keycloak-installation",children:"Keycloak Installation"}),"\n",(0,t.jsx)(n.p,{children:"To install Keycloak, follow the steps below:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.code,{children:"security"})," namespace from the PostgreSQL installation."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Add a chart repository:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm repo add codecentric https://codecentric.github.io/helm-charts\nhelm repo update\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Create Keycloak admin secret:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-admin-creds \\\n--from-literal=username= \\\n--from-literal=password=\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Install Keycloak 20.0.3 using ",(0,t.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/codecentric/keycloakx",children:"codecentric/keycloakx"})," Helm chart:"]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["Keycloak can be deployed in production ready mode. For example, it may include multiple replicas, autoscaling, and monitoring.\nFor details, please refer to the ",(0,t.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"official Chart documentation"}),"."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"helm install keycloakx codecentric/keycloakx \\\n--version 2.2.1 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.em,{children:"values.yaml"})," file sample of the Keycloak customization:"]}),"\n",(0,t.jsxs)(l,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"View: values.yaml"})}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'replicas: 1\n\n# Deploy the latest version\nimage:\n tag: "20.0.3"\n\n# The following parameter is unrecommended to expose. Exposed health checks lead to an unnecessary attack vector.\nhealth:\n enabled: false\n# The following parameter is unrecommended to expose. Exposed metrics lead to an unnecessary attack vector.\nmetrics:\n enabled: false\n\nextraVolumeMounts: |\n - name: realm\n mountPath: /opt/keycloak/data/import\n\ncommand:\n - "/opt/keycloak/bin/kc.sh"\n - "--verbose"\n - "start"\n - "--auto-build"\n - "--http-enabled=true"\n - "--http-port=8080"\n - "--hostname-strict=false"\n - "--hostname-strict-https=false"\n - "--spi-events-listener-jboss-logging-success-level=info"\n - "--spi-events-listener-jboss-logging-error-level=warn"\n\nextraEnv: |\n - name: KC_PROXY\n value: "passthrough"\n - name: KEYCLOAK_ADMIN\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: username\n - name: KEYCLOAK_ADMIN_PASSWORD\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: password\n - name: JAVA_OPTS_APPEND\n value: >-\n -XX:+UseContainerSupport\n -XX:MaxRAMPercentage=50.0\n -Djava.awt.headless=true\n -Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless\n -Dkeycloak.connectionsHttpClient.default.expect-continue-enabled=true\n -Dkeycloak.connectionsHttpClient.default.reuse-connections=false\n\n# This block should be uncommented if you install Keycloak on Kubernetes\ningress:\n enabled: true\n annotations:\n kubernetes.io/ingress.class: nginx\n # The following parameter is unrecommended to expose. Admin paths lead to an unnecessary attack vector.\n console:\n enabled: false\n rules:\n - host: keycloak.\n paths:\n - path: \'{{ tpl .Values.http.relativePath $ | trimSuffix "/" }}/\'\n pathType: Prefix\n\n# This block should be uncommented if you set Keycloak to OpenShift and change the host field\n# route:\n# enabled: false\n# # Path for the Route\n# path: \'/\'\n# # Host name for the Route\n# host: "keycloak."\n# # TLS configuration\n# tls:\n# enabled: true\n\nresources:\n limits:\n memory: "2048Mi"\n requests:\n cpu: "50m"\n memory: "512Mi"\n\n# Check database readiness at startup\ndbchecker:\n enabled: true\n\ndatabase:\n vendor: postgres\n existingSecret: keycloak-postgresql\n hostname: postgresql\n port: 5432\n username: admin\n database: keycloak\n'})})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsxs)(n.p,{children:["For configuring Keycloak within your environment, it's recommended to utilize the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-keycloak-operator",children:"edp-keycloak-operator"}),".\nThis operator simplifies the integration process by automating the deployment and management of Keycloak instances.\nIt ensures that Keycloak is correctly configured to serve as an identity provider, facilitating secure access management across your applications."]}),"\n",(0,t.jsx)(n.p,{children:"By leveraging the edp-keycloak-operator, you can efficiently manage realms, users, and client configurations, making it an essential tool for robust access control in Kubernetes environments."}),"\n",(0,t.jsx)(n.p,{children:"To create a Keycloak user in the Master realm who can manage other realms, follow these steps:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create the ",(0,t.jsx)(n.code,{children:"edp_"})," user and set the password in the ",(0,t.jsx)(n.code,{children:"Master"})," realm."]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This user should be used by Keycloak Operator to access Keycloak. Please refer to the ",(0,t.jsx)(n.a,{href:"/docs/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})," page for details."]})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"Role Mapping"})," tab, assign the proper roles to the user:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Realm Roles:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"create-realm,"}),"\n",(0,t.jsx)(n.li,{children:"offline_access,"}),"\n",(0,t.jsx)(n.li,{children:"uma_authorization"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Client Roles ",(0,t.jsx)(n.code,{children:"openshift-realm"}),":"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"impersonation,"}),"\n",(0,t.jsx)(n.li,{children:"manage-authorization,"}),"\n",(0,t.jsx)(n.li,{children:"manage-clients,"}),"\n",(0,t.jsx)(n.li,{children:"manage-users"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Role mappings",src:s(37692).A+"",title:"Role mappings",width:"1922",height:"624"})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"openshift-realm"})," is the realm name used as the ",(0,t.jsx)(n.code,{children:"broker"})," realm, which is utilized for integrating third-party Identity Providers. You can find more information about this integration in the ",(0,t.jsx)(n.a,{href:"https://github.com/epam/edp-cluster-add-ons/tree/main/add-ons/extensions-oidc",children:"extensions-oidc"})," repository of the KubeRocketCI platform."]})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/operator-guide/artifacts-management/harbor-installation",children:"Install Harbor"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/operator-guide/add-ons-overview",children:"Install via Add-Ons"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},37692:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/keycloak-roles-b10e57ec8201ee1a5765d4fb6fbef694.png"},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>r});var t=s(96540);const a={},l=t.createContext(a);function i(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f75a3945.9f3c62d1.js b/assets/js/f75a3945.9f3c62d1.js new file mode 100644 index 000000000..300e614f3 --- /dev/null +++ b/assets/js/f75a3945.9f3c62d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[45],{59139:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var a=s(74848),t=s(28453);const l={},r="Install Keycloak",i={id:"operator-guide/auth/keycloak",title:"Install Keycloak",description:"Inspect the prerequisites and the main steps to perform for installing Keycloak.",source:"@site/versioned_docs/version-3.9.0/operator-guide/auth/keycloak.md",sourceDirName:"operator-guide/auth",slug:"/operator-guide/auth/keycloak",permalink:"/docs/operator-guide/auth/keycloak",draft:!1,unlisted:!1,editUrl:"https://github.com/KubeRocketCI/docs/edit/main/docs/operator-guide/auth/keycloak.md",tags:[],version:"3.9.0",lastUpdatedBy:"Mykola Serdiuk",lastUpdatedAt:1720191366e3,frontMatter:{},sidebar:"operatorGuideSidebar",previous:{title:"Overview",permalink:"/docs/operator-guide/auth/platform-auth-model"},next:{title:"Portal OIDC Configuration",permalink:"/docs/operator-guide/auth/ui-portal-oidc"}},o={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"PostgreSQL Installation",id:"postgresql-installation",level:2},{value:"Keycloak Installation",id:"keycloak-installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Related Articles",id:"related-articles",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components},{Details:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"install-keycloak",children:"Install Keycloak"}),"\n",(0,a.jsx)(n.p,{children:"Inspect the prerequisites and the main steps to perform for installing Keycloak."}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsx)(n.p,{children:"The installation process below is given for a Kubernetes cluster. The steps that differ for an OpenShift cluster are\nindicated in the warnings blocks."})}),"\n",(0,a.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Kubectl version 1.26.0+ is installed. Please refer to the ",(0,a.jsx)(n.a,{href:"https://kubernetes.io/releases/download/",children:"Kubernetes official website"})," for details."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"https://helm.sh",children:"Helm"})," version 3.14.0+ is installed. Please refer to the ",(0,a.jsx)(n.a,{href:"https://github.com/helm/helm/releases",children:"Helm page"})," on GitHub for details."]}),"\n"]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["Out team recommends a Keycloakx helm chart from the ",(0,a.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"codecentric"})," repository, but other repositories can be used as well (e.g. ",(0,a.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/keycloak/",children:"Bitnami"}),").\nBefore installing Keycloak, it is necessary to install a ",(0,a.jsx)(n.a,{href:"https://www.postgresql.org/download/",children:"PostgreSQL database"}),"."]})}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["It is also possible to install Keycloak using the cluster add-ons. For details, please refer to the ",(0,a.jsx)(n.a,{href:"/docs/operator-guide/add-ons-overview",children:"Install via Add-Ons"})," page."]})}),"\n",(0,a.jsx)(n.h2,{id:"postgresql-installation",children:"PostgreSQL Installation"}),"\n",(0,a.jsx)(n.p,{children:"To install PostgreSQL, follow the steps below:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Check that a security namespace is created. If not, run the following command to create it:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace security\n"})}),"\n",(0,a.jsxs)(n.admonition,{type:"warning",children:[(0,a.jsxs)(n.p,{children:["On the OpenShift platform, apply the ",(0,a.jsx)(n.code,{children:"SecurityContextConstraints"})," resource. Change the namespace in the ",(0,a.jsx)(n.code,{children:"users"})," section if required."]}),(0,a.jsxs)(l,{children:[(0,a.jsx)("summary",{children:(0,a.jsx)("b",{children:"View: keycloak-scc.yaml"})}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n - KILL\n - MKNOD\n - SETUID\n - SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n - system:serviceaccount:security:keycloakx\nvolumes:\n - configMap\n - downwardAPI\n - emptyDir\n - persistentVolumeClaim\n - projected\n - secret\n'})})]}),(0,a.jsxs)(l,{children:[(0,a.jsx)("summary",{children:(0,a.jsx)("b",{children:"View: postgresql-keycloak-scc.yaml"})}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'allowHostDirVolumePlugin: false\nallowHostIPC: false\nallowHostNetwork: false\nallowHostPID: false\nallowHostPorts: false\nallowPrivilegeEscalation: true\nallowPrivilegedContainer: false\nallowedCapabilities: null\napiVersion: security.openshift.io/v1\nallowedFlexVolumes: []\ndefaultAddCapabilities: []\nfsGroup:\n type: MustRunAs\n ranges:\n - min: 999\n max: 65543\ngroups: []\nkind: SecurityContextConstraints\nmetadata:\n annotations:\n "helm.sh/hook": "pre-install"\n name: postgresql-keycloak\npriority: 1\nreadOnlyRootFilesystem: false\nrequiredDropCapabilities:\n- KILL\n- MKNOD\n- SETUID\n- SETGID\nrunAsUser:\n type: MustRunAsRange\n uidRangeMin: 1\n uidRangeMax: 65543\nseLinuxContext:\n type: MustRunAs\nsupplementalGroups:\n type: RunAsAny\nusers:\n- system:serviceaccount:security:default\nvolumes:\n- configMap\n- downwardAPI\n- emptyDir\n- persistentVolumeClaim\n- projected\n- secret\n'})})]})]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Create PostgreSQL admin secret:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-postgresql \\\n--from-literal=password= \\\n--from-literal=postgres-password=\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Add a helm chart repository:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"helm repo add bitnami https://charts.bitnami.com/bitnami\nhelm repo update\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Install PostgreSQL v15.2.0 using ",(0,a.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/bitnami/postgresql",children:"bitnami/postgresql"})," Helm chart v12.1.15:"]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["The PostgreSQL can be deployed in production ready mode. For example, it may include multiple replicas, persistent storage, autoscaling, and monitoring.\nFor details, please refer to the ",(0,a.jsx)(n.a,{href:"https://github.com/bitnami/charts/tree/master/bitnami/postgresql",children:"official Chart documentation"}),"."]})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"helm install postgresql bitnami/postgresql \\\n--version 12.1.15 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Check out the ",(0,a.jsx)(n.em,{children:"values.yaml"})," file sample of the PostgreSQL customization:"]}),"\n",(0,a.jsxs)(l,{children:[(0,a.jsx)("summary",{children:(0,a.jsx)("b",{children:"View: values.yaml"})}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"# PostgreSQL read only replica parameters\nreadReplicas:\n # Number of PostgreSQL read only replicas\n replicaCount: 1\n\nimage:\n tag: 15.2.0-debian-11-r0\n\nglobal:\n postgresql:\n auth:\n username: admin\n existingSecret: keycloak-postgresql\n database: keycloak\n\nprimary:\n persistence:\n enabled: true\n size: 3Gi\n"})})]}),"\n",(0,a.jsx)(n.h2,{id:"keycloak-installation",children:"Keycloak Installation"}),"\n",(0,a.jsx)(n.p,{children:"To install Keycloak, follow the steps below:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Use ",(0,a.jsx)(n.code,{children:"security"})," namespace from the PostgreSQL installation."]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Add a chart repository:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"helm repo add codecentric https://codecentric.github.io/helm-charts\nhelm repo update\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Create Keycloak admin secret:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"kubectl -n security create secret generic keycloak-admin-creds \\\n--from-literal=username= \\\n--from-literal=password=\n"})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Install Keycloak 20.0.3 using ",(0,a.jsx)(n.a,{href:"https://artifacthub.io/packages/helm/codecentric/keycloakx",children:"codecentric/keycloakx"})," Helm chart:"]}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["Keycloak can be deployed in production ready mode. For example, it may include multiple replicas, autoscaling, and monitoring.\nFor details, please refer to the ",(0,a.jsx)(n.a,{href:"https://github.com/codecentric/helm-charts/tree/master/charts/keycloakx",children:"official Chart documentation"}),"."]})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"helm install keycloakx codecentric/keycloakx \\\n--version 2.3.0 \\\n--values values.yaml \\\n--namespace security\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Check out the ",(0,a.jsx)(n.em,{children:"values.yaml"})," file sample of the Keycloak customization:"]}),"\n",(0,a.jsxs)(l,{children:[(0,a.jsx)("summary",{children:(0,a.jsx)("b",{children:"View: values.yaml"})}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:'replicas: 1\n\n# Deploy the latest version\nimage:\n tag: "24.0.4"\n\n# The following parameter is unrecommended to expose. Exposed health checks lead to an unnecessary attack vector.\nhealth:\n enabled: false\n# The following parameter is unrecommended to expose. Exposed metrics lead to an unnecessary attack vector.\nmetrics:\n enabled: false\n\ncommand:\n - "/opt/keycloak/bin/kc.sh"\n - "--verbose"\n - "start"\n\nextraEnv: |\n - name: KC_HOSTNAME\n value: "keycloak."\n - name: KC_SPI_HOSTNAME_DEFAULT_ADMIN\n value: "keycloak."\n - name: KC_HTTP_ENABLED\n value: "true"\n - name: KC_HOSTNAME_STRICT\n value: "false"\n - name: KC_HOSTNAME_STRICT_HTTPS\n value: "false"\n - name: KC_SPI_EVENTS_LISTENER_JBOSS_LOGGING_SUCCESS_LEVEL\n value: "info"\n - name: KEYCLOAK_ADMIN\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: username\n - name: KEYCLOAK_ADMIN_PASSWORD\n valueFrom:\n secretKeyRef:\n name: keycloak-admin-creds\n key: password\n - name: JAVA_OPTS_APPEND\n value: >-\n -XX:+UseContainerSupport\n -XX:MaxRAMPercentage=50.0\n -Djava.awt.headless=true\n -Djgroups.dns.query={{ include "keycloak.fullname" . }}-headless\n -Dkeycloak.connectionsHttpClient.default.expect-continue-enabled=true\n -Dkeycloak.connectionsHttpClient.default.reuse-connections=false\n - name: HTTP_ADDRESS_FORWARDING\n value: "true"\n - name: PROXY_ADDRESS_FORWARDING\n value: "true"\n\n# This block should be uncommented if you install Keycloak on Kubernetes\ningress:\n enabled: true\n annotations:\n nginx.ingress.kubernetes.io/proxy-buffer-size: 256k\n # Defines the class of the Ingress Controller.\n # It allows you to choose which Ingress controller in cluster should be used to expose the Keycloak service to the outside world.\n ingressClassName: "nginx"\n # Exposes Keycloak paths according to the rules from documentation.\n # Ref: https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations\n console:\n enabled: false\n rules:\n - host: keycloak.\n paths:\n - path: \'{{ tpl .Values.http.relativePath $ | trimSuffix "/" }}/\'\n pathType: Prefix\n\nproxy:\n enabled: true\n mode: "edge"\n\n# This block should be uncommented if you set Keycloak to OpenShift and change the host field\n# route:\n# enabled: false\n# # Path for the Route\n# path: \'/\'\n# # Host name for the Route\n# host: "keycloak."\n# # TLS configuration\n# tls:\n# enabled: true\n\nresources:\n limits:\n memory: "2048Mi"\n requests:\n cpu: "50m"\n memory: "512Mi"\n\n# Check database readiness at startup\ndbchecker:\n enabled: true\n\ndatabase:\n vendor: postgres\n existingSecret: keycloak-postgresql\n hostname: postgresql\n port: 5432\n username: admin\n database: keycloak\n'})})]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsxs)(n.p,{children:["For configuring Keycloak within your environment, it's recommended to utilize the ",(0,a.jsx)(n.a,{href:"https://github.com/epam/edp-keycloak-operator",children:"edp-keycloak-operator"}),".\nThis operator simplifies the integration process by automating the deployment and management of Keycloak instances.\nIt ensures that Keycloak is correctly configured to serve as an identity provider, facilitating secure access management across your applications."]}),"\n",(0,a.jsx)(n.p,{children:"By leveraging the edp-keycloak-operator, you can efficiently manage realms, users, and client configurations, making it an essential tool for robust access control in Kubernetes environments."}),"\n",(0,a.jsx)(n.p,{children:"To create a Keycloak user in the Master realm who can manage other realms, follow these steps:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Create the ",(0,a.jsx)(n.code,{children:"edp_"})," user and set the password in the ",(0,a.jsx)(n.code,{children:"Master"})," realm."]}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["This user should be used by Keycloak Operator to access Keycloak. Please refer to the ",(0,a.jsx)(n.a,{href:"/docs/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})," page for details."]})}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"Role Mapping"})," tab, assign the proper roles to the user:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsx)(n.p,{children:"Realm Roles:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"create-realm,"}),"\n",(0,a.jsx)(n.li,{children:"offline_access,"}),"\n",(0,a.jsx)(n.li,{children:"uma_authorization"}),"\n"]}),"\n"]}),"\n",(0,a.jsxs)(n.li,{children:["\n",(0,a.jsxs)(n.p,{children:["Client Roles ",(0,a.jsx)(n.code,{children:"openshift-realm"}),":"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"impersonation,"}),"\n",(0,a.jsx)(n.li,{children:"manage-authorization,"}),"\n",(0,a.jsx)(n.li,{children:"manage-clients,"}),"\n",(0,a.jsx)(n.li,{children:"manage-users"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Role mappings",src:s(37692).A+"",title:"Role mappings",width:"1922",height:"624"})}),"\n",(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"openshift-realm"})," is the realm name used as the ",(0,a.jsx)(n.code,{children:"broker"})," realm, which is utilized for integrating third-party Identity Providers. You can find more information about this integration in the ",(0,a.jsx)(n.a,{href:"https://github.com/epam/edp-cluster-add-ons/tree/main/add-ons/extensions-oidc",children:"extensions-oidc"})," repository of the KubeRocketCI platform."]})}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"related-articles",children:"Related Articles"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/docs/operator-guide/install-kuberocketci",children:"Install KubeRocketCI"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/docs/operator-guide/artifacts-management/harbor-installation",children:"Install Harbor"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/docs/operator-guide/add-ons-overview",children:"Install via Add-Ons"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},37692:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/keycloak-roles-b10e57ec8201ee1a5765d4fb6fbef694.png"},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>i});var a=s(96540);const t={},l=a.createContext(t);function r(e){const n=a.useContext(l);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),a.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.3a4c9525.js b/assets/js/main.7fe2f103.js similarity index 99% rename from assets/js/main.3a4c9525.js rename to assets/js/main.7fe2f103.js index 7db5805ca..ffe0d12ef 100644 --- a/assets/js/main.3a4c9525.js +++ b/assets/js/main.7fe2f103.js @@ -1,2 +1,2 @@ -/*! For license information please see main.3a4c9525.js.LICENSE.txt */ -(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6411],{89188:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(96540);function o(){return n.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},n.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},35947:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});r(96540);var n=r(53259),o=r.n(n),a=r(84054);const i={"0016d0c0":[()=>r.e(7979).then(r.bind(r,71759)),"@site/docs/user-guide/add-quality-gate.md",71759],"0058b4c6":[()=>r.e(849).then(r.t.bind(r,86164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",86164],"02a54be8":[()=>r.e(8010).then(r.bind(r,36246)),"@site/docs/user-guide/gitops.md",36246],"044271f3":[()=>Promise.all([r.e(1869),r.e(3612)]).then(r.bind(r,11872)),"@site/docs/operator-guide/kubernetes-cluster-settings.md",11872],"051b8c12":[()=>Promise.all([r.e(1869),r.e(1429)]).then(r.bind(r,94621)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.9.md",94621],"052d1f45":[()=>r.e(8084).then(r.bind(r,40376)),"@site/versioned_docs/version-3.9.0/operator-guide/project-management-and-reporting/reportportal-keycloak.md",40376],"093a4c74":[()=>r.e(1884).then(r.bind(r,60125)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/aws/deploy-aws-eks.md",60125],"094d7f0b":[()=>r.e(5435).then(r.bind(r,9178)),"@site/docs/developer-guide/aws-reference-architecture.md",9178],"0a4c11ab":[()=>r.e(1782).then(r.bind(r,3753)),"@site/versioned_docs/version-3.9.0/use-cases/autotest-as-quality-gate.md",3753],"0b7173b5":[()=>r.e(8664).then(r.bind(r,8597)),"@site/versioned_docs/version-3.9.0/operator-guide/install-ingress-nginx.md",8597],"0d3a4e50":[()=>r.e(941).then(r.bind(r,26310)),"@site/docs/about-platform.md",26310],"0da81dc0":[()=>r.e(314).then(r.bind(r,16960)),"@site/versioned_docs/version-3.9.0/user-guide/application.md",16960],"11124f48":[()=>r.e(2998).then(r.bind(r,34800)),"@site/versioned_docs/version-3.9.0/user-guide/add-cd-pipeline.md",34800],"11f27844":[()=>r.e(5260).then(r.bind(r,84627)),"@site/docs/user-guide/library.md",84627],"1219fb68":[()=>r.e(8482).then(r.bind(r,51496)),"@site/versioned_docs/version-3.9.0/operator-guide/project-management-and-reporting/reportportal-tekton.md",51496],"1273b35c":[()=>r.e(6817).then(r.bind(r,30826)),"@site/docs/quick-start/deploy-application.md",30826],"143a21b5":[()=>r.e(2672).then(r.bind(r,17355)),"@site/versioned_docs/version-3.9.0/developer-guide/reference-cicd-pipeline.md",17355],"151de72e":[()=>r.e(8973).then(r.bind(r,56547)),"@site/docs/use-cases/autotest-as-quality-gate.md",56547],"161c2893":[()=>Promise.all([r.e(1869),r.e(7096)]).then(r.bind(r,71831)),"@site/versioned_docs/version-3.9.0/operator-guide/devsecops/dependency-track.md",71831],"1638da2b":[()=>r.e(4662).then(r.bind(r,39743)),"@site/versioned_docs/version-3.9.0/quick-start/integrate-container-registry.md",39743],17896441:[()=>Promise.all([r.e(1869),r.e(8401)]).then(r.bind(r,43760)),"@theme/DocItem",43760],"184c502c":[()=>r.e(985).then(r.bind(r,67254)),"@site/docs/operator-guide/project-management-and-reporting/reportportal-keycloak.md",67254],"18fa91f9":[()=>r.e(3082).then(r.bind(r,69337)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/aws/enable-irsa.md",69337],"19ff6b73":[()=>Promise.all([r.e(1869),r.e(2871)]).then(r.bind(r,28292)),"@site/docs/user-guide/add-git-server.md",28292],"1a4e3797":[()=>Promise.all([r.e(1869),r.e(2138)]).then(r.bind(r,29057)),"@theme/SearchPage",29057],"1a7be420":[()=>Promise.all([r.e(1869),r.e(1607)]).then(r.bind(r,89506)),"@site/versioned_docs/version-3.9.0/operator-guide/artifacts-management/nexus-sonatype.md",89506],"1b41c6a5":[()=>r.e(1558).then(r.bind(r,35100)),"@site/versioned_docs/version-3.9.0/operator-guide/advanced-installation/overview.md",35100],"1cc4b918":[()=>r.e(8206).then(r.bind(r,89629)),"@site/versioned_docs/version-3.9.0/operator-guide/monitoring-and-observability/install-loki.md",89629],"1df93b7f":[()=>Promise.all([r.e(1869),r.e(2032),r.e(4583)]).then(r.bind(r,25579)),"@site/src/pages/index.tsx",25579],"1ee98dca":[()=>Promise.all([r.e(1869),r.e(5291)]).then(r.bind(r,50510)),"@site/versioned_docs/version-3.9.0/operator-guide/artifacts-management/harbor-integration.md",50510],"21b47cb7":[()=>r.e(8661).then(r.bind(r,71520)),"@site/versioned_docs/version-3.9.0/compliance.md",71520],"2264bf38":[()=>r.e(9696).then(r.bind(r,99535)),"@site/docs/operator-guide/installation-overview.md",99535],"230bd3f6":[()=>r.e(3979).then(r.bind(r,9654)),"@site/docs/developer-guide/aws-deployment-diagram.md",9654],"231619f5":[()=>r.e(2646).then(r.bind(r,96448)),"@site/versioned_docs/version-3.9.0/user-guide/gitops.md",96448],"23a849f2":[()=>r.e(3556).then(r.bind(r,52119)),"@site/docs/operator-guide/add-ons-overview.md",52119],24927069:[()=>r.e(2702).then(r.bind(r,18690)),"@site/versioned_docs/version-3.9.0/developer-guide/aws-infrastructure-cost-estimation.md",18690],"24df5786":[()=>r.e(8045).then(r.bind(r,57978)),"@site/docs/operator-guide/ci/notification-msteams.md",57978],25171791:[()=>r.e(7690).then(r.bind(r,58405)),"@site/versioned_docs/version-3.9.0/operator-guide/monitoring-and-observability/multitenant-logging.md",58405],"25384fca":[()=>r.e(1447).then(r.bind(r,57395)),"@site/versioned_docs/version-3.9.0/glossary.md",57395],"26ec4ff8":[()=>r.e(1835).then(r.bind(r,17295)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.1.md",17295],"2725482c":[()=>r.e(7268).then(r.bind(r,49842)),"@site/versioned_docs/version-3.9.0/user-guide/index.md",49842],"277da1eb":[()=>r.e(5796).then(r.bind(r,78851)),"@site/versioned_docs/version-3.9.0/operator-guide/monitoring-and-observability/loki-irsa.md",78851],"28a2ccc4":[()=>r.e(6859).then(r.bind(r,24004)),"@site/versioned_docs/version-3.9.0/developer-guide/reference-architecture.md",24004],"28dc8bcf":[()=>r.e(7495).then(r.bind(r,14870)),"@site/docs/quick-start/integrate-argocd.md",14870],"2911951e":[()=>r.e(570).then(r.bind(r,73772)),"@site/versioned_docs/version-3.9.0/operator-guide/disaster-recovery/velero-irsa.md",73772],"29b387ad":[()=>r.e(5269).then(r.bind(r,79341)),"@site/docs/user-guide/add-marketplace.md",79341],"2b79b7ee":[()=>r.e(628).then(r.bind(r,68632)),"@site/docs/operator-guide/infrastructure-providers/aws/waf-tf-configuration.md",68632],"2f7ff87c":[()=>r.e(7780).then(r.bind(r,97520)),"@site/docs/quick-start/integrate-sonarcloud.md",97520],"2fb0418d":[()=>Promise.all([r.e(1869),r.e(8792)]).then(r.bind(r,18186)),"@site/versioned_docs/version-3.9.0/operator-guide/install-kuberocketci.md",18186],"30056d2d":[()=>r.e(6995).then(r.bind(r,28904)),"@site/versioned_docs/version-3.9.0/operator-guide/ci/tekton-monitoring.md",28904],"327c873d":[()=>r.e(3308).then(r.bind(r,50812)),"@site/versioned_docs/version-3.9.0/quick-start/platform-installation.md",50812],"33df32b4":[()=>r.e(265).then(r.bind(r,72663)),"@site/versioned_docs/version-3.9.0/quick-start/create-application.md",72663],"340d0be1":[()=>r.e(5806).then(r.bind(r,1432)),"@site/docs/operator-guide/artifacts-management/harbor-installation.md",1432],"341714e6":[()=>r.e(7640).then(r.bind(r,73647)),"@site/docs/operator-guide/uninstall-kuberocketci.md",73647],"34d3477e":[()=>r.e(3718).then(r.bind(r,45038)),"@site/docs/user-guide/add-cd-pipeline.md",45038],"35f96b4d":[()=>r.e(344).then(r.bind(r,51991)),"@site/docs/user-guide/code-review-pipeline.md",51991],"362238af":[()=>r.e(9384).then(r.bind(r,83096)),"@site/docs/user-guide/git-server-overview.md",83096],"36ad4479":[()=>r.e(5691).then(r.bind(r,38388)),"@site/docs/operator-guide/install-tekton.md",38388],"36d6ef67":[()=>r.e(3138).then(r.bind(r,21942)),"@site/docs/operator-guide/ci/tekton-monitoring.md",21942],"3708546f":[()=>r.e(1102).then(r.bind(r,96182)),"@site/versioned_docs/version-3.9.0/operator-guide/artifacts-management/harbor-installation.md",96182],"371c3a19":[()=>r.e(6063).then(r.bind(r,4867)),"@site/docs/user-guide/cd-pipeline-details.md",4867],"3782fc62":[()=>Promise.all([r.e(1869),r.e(3994)]).then(r.bind(r,54157)),"@site/docs/operator-guide/code-quality/sonarqube.md",54157],"381c3eb3":[()=>r.e(9091).then(r.bind(r,51766)),"@site/docs/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton.md",51766],"385e4181":[()=>r.e(2376).then(r.bind(r,86372)),"@site/versioned_docs/version-3.9.0/operator-guide/ci/notification-msteams.md",86372],"388ee3f1":[()=>r.e(7228).then(r.bind(r,29813)),"@site/versioned_docs/version-3.9.0/user-guide/build-pipeline.md",29813],"392315a4":[()=>r.e(4647).then(r.bind(r,62490)),"@site/docs/user-guide/manage-branches.md",62490],"3a156fb0":[()=>r.e(6607).then(r.bind(r,17645)),"@site/docs/quick-start/create-application.md",17645],"3a9a22a1":[()=>r.e(1183).then(r.bind(r,26557)),"@site/versioned_docs/version-3.9.0/operator-guide/add-ons-overview.md",26557],"3ba8ce81":[()=>r.e(2482).then(r.bind(r,87983)),"@site/versioned_docs/version-3.9.0/operator-guide/artifacts-management/harbor-oidc.md",87983],"3bc95137":[()=>r.e(7324).then(r.bind(r,48224)),"@site/versioned_docs/version-3.9.0/operator-guide/disaster-recovery/install-velero.md",48224],"3c802787":[()=>r.e(6931).then(r.bind(r,2293)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.3.md",2293],"3c82a12c":[()=>r.e(7368).then(r.bind(r,20314)),"@site/versioned_docs/version-3.9.0/user-guide/add-cluster.md",20314],"3d53e649":[()=>Promise.all([r.e(1869),r.e(2718)]).then(r.bind(r,6273)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.5.md",6273],"3da37ccf":[()=>r.e(1775).then(r.bind(r,18342)),"@site/docs/operator-guide/advanced-installation/capsule.md",18342],"3dfe414d":[()=>r.e(4756).then(r.bind(r,67193)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/troubleshoot-git-server.md",67193],"3e361908":[()=>r.e(2550).then(r.bind(r,12691)),"@site/docs/operator-guide/monitoring-and-observability/kibana-ilm-rollover.md",12691],"400171ab":[()=>Promise.all([r.e(1869),r.e(2999)]).then(r.bind(r,17463)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.9.md",17463],"415a706e":[()=>r.e(3158).then(r.bind(r,69099)),"@site/docs/operator-guide/monitoring-and-observability/install-loki.md",69099],"41b8de2b":[()=>r.e(8757).then(r.bind(r,39933)),"@site/versioned_docs/version-3.9.0/operator-guide/install-argocd.md",39933],"43432c18":[()=>r.e(8129).then(r.bind(r,57798)),"@site/docs/api/sonarqube.md",57798],"438121b2":[()=>r.e(3782).then(r.bind(r,39271)),"@site/docs/user-guide/quick-links.md",39271],43958531:[()=>r.e(1111).then(r.bind(r,6383)),"@site/versioned_docs/version-3.9.0/use-cases/index.md",6383],"442a9d0d":[()=>r.e(7503).then(r.bind(r,96049)),"@site/versioned_docs/version-3.9.0/operator-guide/monitoring-and-observability/kibana-ilm-rollover.md",96049],"44ace89d":[()=>r.e(5815).then(r.bind(r,23730)),"@site/docs/use-cases/external-secrets.md",23730],"457736d8":[()=>r.e(8899).then(r.bind(r,27547)),"@site/versioned_docs/version-3.9.0/user-guide/infrastructure.md",27547],"45a79027":[()=>r.e(6300).then(r.bind(r,74243)),"@site/versioned_docs/version-3.9.0/faq/artifacts.md",74243],"46f945ac":[()=>r.e(9283).then(r.bind(r,80251)),"@site/versioned_docs/version-3.9.0/supported-versions.md",80251],"4754d71a":[()=>r.e(3278).then(r.bind(r,37879)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/application-not-built.md",37879],"47a85c86":[()=>r.e(4693).then(r.bind(r,10527)),"@site/docs/quick-start/integrate-github.md",10527],"47bc40fc":[()=>r.e(3264).then(r.bind(r,7738)),"@site/versioned_docs/version-3.9.0/quick-start/quick-start-overview.md",7738],"48ae4ba2":[()=>r.e(8042).then(r.bind(r,45033)),"@site/versioned_docs/version-3.9.0/user-guide/library.md",45033],"492f5658":[()=>r.e(1936).then(r.bind(r,99006)),"@site/docs/api/cd-pipeline.md",99006],"49a72b66":[()=>r.e(5898).then(r.bind(r,89001)),"@site/docs/developer-guide/autotest-coverage.md",89001],"4a25d6cc":[()=>Promise.all([r.e(1869),r.e(2032),r.e(2125)]).then(r.bind(r,75328)),"@site/src/pages/pricing.tsx",75328],"4a2f4ce7":[()=>r.e(7561).then(r.bind(r,57976)),"@site/versioned_docs/version-3.9.0/quick-start/integrate-argocd.md",57976],"4a42db2f":[()=>r.e(4562).then(r.bind(r,68679)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/okd/deploy-okd-4.9.md",68679],"4b8e1679":[()=>r.e(909).then(r.bind(r,7964)),"@site/docs/use-cases/tekton-custom-pipelines.md",7964],"4c101acf":[()=>r.e(9070).then(r.bind(r,5221)),"@site/docs/operator-guide/cd/customize-deploy-pipeline.md",5221],"4c3351e0":[()=>r.e(2103).then(r.bind(r,65939)),"@site/docs/operator-guide/index.md",65939],"4ceb278e":[()=>r.e(317).then(r.bind(r,23197)),"@site/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.10.md",23197],"4d2f7ccf":[()=>Promise.all([r.e(1869),r.e(9614)]).then(r.bind(r,36656)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.8.md",36656],"4da8caa1":[()=>r.e(7694).then(r.bind(r,91170)),"@site/docs/developer-guide/local-development.md",91170],"4ddadfc8":[()=>r.e(7529).then(r.bind(r,34018)),"@site/docs/operator-guide/project-management-and-reporting/reportportal-tekton.md",34018],"4e74bb46":[()=>r.e(5889).then(r.bind(r,48658)),"@site/docs/user-guide/cluster.md",48658],"4ff79524":[()=>r.e(2536).then(r.bind(r,48834)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.4.md",48834],"528010bd":[()=>Promise.all([r.e(1869),r.e(7939)]).then(r.bind(r,60926)),"@site/versioned_docs/version-3.9.0/user-guide/add-git-server.md",60926],"528ad0e2":[()=>r.e(2666).then(r.bind(r,40086)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/aws/waf-tf-configuration.md",40086],"5355abd6":[()=>r.e(686).then(r.bind(r,60900)),"@site/docs/operator-guide/project-management-and-reporting/install-reportportal.md",60900],"55fbd8a8":[()=>r.e(8194).then(r.bind(r,86425)),"@site/versioned_docs/version-3.9.0/user-guide/cd-pipeline-details.md",86425],"5901d20f":[()=>r.e(7496).then(r.bind(r,59579)),"@site/versioned_docs/version-3.9.0/user-guide/add-marketplace.md",59579],"5ac22dca":[()=>r.e(8272).then(r.bind(r,69163)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/namespace-management.md",69163],"5ba5e54c":[()=>r.e(5637).then(r.bind(r,82688)),"@site/versioned_docs/version-3.9.0/operator-guide/advanced-installation/capsule.md",82688],"5c404038":[()=>Promise.all([r.e(1869),r.e(1894)]).then(r.bind(r,68011)),"@site/versioned_docs/version-3.9.0/operator-guide/code-quality/sonarqube.md",68011],"5e95c892":[()=>r.e(9647).then(r.bind(r,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(r.bind(r,4784)),"@generated/docusaurus.config",4784],"625479af":[()=>r.e(4937).then(r.bind(r,31645)),"@site/versioned_docs/version-3.9.0/operator-guide/uninstall-kuberocketci.md",31645],"627feb40":[()=>r.e(3653).then(r.bind(r,88744)),"@site/versioned_docs/version-3.9.0/user-guide/cluster.md",88744],"62bb0db8":[()=>r.e(8485).then(r.bind(r,4704)),"@site/versioned_docs/version-3.9.0/use-cases/external-secrets.md",4704],"6408c43d":[()=>r.e(5821).then(r.bind(r,36516)),"@site/versioned_docs/version-3.9.0/developer-guide/aws-reference-architecture.md",36516],"65df3d35":[()=>r.e(8559).then(r.bind(r,97635)),"@site/docs/api/overview.md",97635],"66d59807":[()=>r.e(350).then(r.bind(r,25615)),"@site/versioned_docs/version-3.9.0/api/nexus.md",25615],"67072c6a":[()=>r.e(8371).then(r.bind(r,36601)),"@site/versioned_docs/version-3.9.0/user-guide/marketplace.md",36601],"67c0705b":[()=>r.e(7875).then(r.bind(r,10784)),"@site/versioned_docs/version-3.9.0/developer-guide/local-development.md",10784],"67e67dee":[()=>r.e(800).then(r.bind(r,14227)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/overview.md",14227],"68a073ab":[()=>r.e(9797).then(r.bind(r,33133)),"@site/docs/user-guide/add-library.md",33133],"68e2bd9a":[()=>r.e(6252).then(r.bind(r,6415)),"@site/versioned_docs/version-3.9.0/developer-guide/autotest-coverage.md",6415],"68f61b34":[()=>r.e(2809).then(r.bind(r,96844)),"@site/docs/operator-guide/troubleshooting/resource-observability.md",96844],"6abc80a3":[()=>Promise.all([r.e(1869),r.e(2153)]).then(r.bind(r,13744)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/oauth2-proxy.md",13744],"6aee56f2":[()=>r.e(1051).then(r.bind(r,49415)),"@site/docs/user-guide/add-infrastructure.md",49415],"6c20f483":[()=>r.e(8329).then(r.bind(r,37002)),"@site/versioned_docs/version-3.9.0/operator-guide/installation-overview.md",37002],"6c6ce661":[()=>r.e(4545).then(r.bind(r,75543)),"@site/docs/operator-guide/advanced-installation/custom-certificates.md",75543],"6d1ab533":[()=>r.e(8846).then(r.bind(r,84694)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.2.md",84694],"6d653d60":[()=>r.e(7057).then(r.bind(r,33684)),"@site/docs/user-guide/configuration-overview.md",33684],"6d900345":[()=>r.e(9128).then(r.bind(r,61560)),"@site/docs/api/codebase.md",61560],"70c4502e":[()=>Promise.all([r.e(1869),r.e(6507)]).then(r.bind(r,75482)),"@site/versioned_docs/version-3.9.0/operator-guide/openshift-cluster-settings.md",75482],"717f185f":[()=>Promise.all([r.e(1869),r.e(8938)]).then(r.bind(r,35751)),"@site/docs/user-guide/manage-container-registries.md",35751],"72b76acc":[()=>r.e(812).then(r.bind(r,3435)),"@site/docs/operator-guide/monitoring-and-observability/multitenant-logging.md",3435],"73b534b2":[()=>r.e(3987).then(r.bind(r,24400)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/configure-keycloak-oidc-eks.md",24400],"73c2c3cf":[()=>r.e(8263).then(r.bind(r,19459)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/aws/ebs-csi-driver.md",19459],"73e4b77e":[()=>r.e(1271).then(r.bind(r,37115)),"@site/docs/operator-guide/infrastructure-providers/aws/enable-irsa.md",37115],"74d5fa4d":[()=>r.e(8404).then(r.bind(r,68098)),"@site/versioned_docs/version-3.9.0/user-guide/git-server-overview.md",68098],"7568e6be":[()=>r.e(1651).then(r.bind(r,37512)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.0.md",37512],76045401:[()=>r.e(5398).then(r.bind(r,66032)),"@site/versioned_docs/version-3.9.0/user-guide/manage-branches.md",66032],"760559d6":[()=>r.e(4349).then(r.bind(r,86455)),"@site/docs/operator-guide/troubleshooting/troubleshoot-git-server.md",86455],"775fd917":[()=>r.e(1305).then(r.bind(r,73796)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/platform-auth-model.md",73796],77732046:[()=>Promise.all([r.e(1869),r.e(9815)]).then(r.bind(r,1338)),"@site/docs/developer-guide/edp-workflow.md",1338],"7804f330":[()=>r.e(3494).then(r.bind(r,84212)),"@site/versioned_docs/version-3.9.0/operator-guide/secrets-management/external-secrets-operator-integration.md",84212],"782d97f6":[()=>r.e(6372).then(r.bind(r,99005)),"@site/versioned_docs/version-3.9.0/operator-guide/secrets-management/install-external-secrets-operator.md",99005],"79a15700":[()=>r.e(345).then(r.bind(r,73333)),"@site/docs/api/nexus.md",73333],"79e68b9e":[()=>Promise.all([r.e(1869),r.e(8554)]).then(r.bind(r,15092)),"@site/docs/operator-guide/artifacts-management/nexus-sonatype.md",15092],"7a4e2c4f":[()=>r.e(137).then(r.bind(r,23581)),"@site/docs/operator-guide/auth/namespace-management.md",23581],"7c3516ba":[()=>r.e(3919).then(r.bind(r,85510)),"@site/docs/user-guide/change-container-registry.md",85510],"7ca8f65f":[()=>r.e(7083).then(r.bind(r,16714)),"@site/docs/operator-guide/auth/eks-oidc-integration.md",16714],"7d171f8c":[()=>r.e(5680).then(r.bind(r,64882)),"@site/docs/operator-guide/advanced-installation/overview.md",64882],"7d46240f":[()=>r.e(5364).then(r.bind(r,24884)),"@site/versioned_docs/version-3.9.0/developer-guide/aws-deployment-diagram.md",24884],"7e74569e":[()=>r.e(901).then(r.bind(r,52834)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.6.md",52834],"7fb19e33":[()=>r.e(7307).then(r.bind(r,64537)),"@site/docs/use-cases/index.md",64537],"7fc57585":[()=>r.e(6457).then(r.bind(r,30996)),"@site/versioned_docs/version-3.9.0/developer-guide/documentation-guide.md",30996],"800c9e92":[()=>r.e(983).then(r.bind(r,86192)),"@site/docs/operator-guide/troubleshooting/invalid-codebase-name.md",86192],81985284:[()=>Promise.all([r.e(1869),r.e(8180)]).then(r.bind(r,58107)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.5.md",58107],"81d15c46":[()=>Promise.all([r.e(1869),r.e(4317)]).then(r.bind(r,39134)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.8.md",39134],"8248180f":[()=>r.e(4560).then(r.bind(r,62358)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.0.md",62358],"848dab9f":[()=>r.e(3559).then(r.bind(r,37493)),"@site/docs/developer-guide/index.md",37493],"85805df7":[()=>r.e(12).then(r.bind(r,25420)),"@site/docs/user-guide/index.md",25420],"858df7e6":[()=>r.e(3186).then(r.bind(r,60963)),"@site/docs/operator-guide/troubleshooting/overview.md",60963],"85f883a4":[()=>r.e(2620).then(r.bind(r,83102)),"@site/versioned_docs/version-3.9.0/user-guide/manage-environments.md",83102],"85fc6906":[()=>r.e(402).then(r.bind(r,57529)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/overview.md",57529],"8623342a":[()=>r.e(7150).then(r.bind(r,2469)),"@site/versioned_docs/version-3.9.0/operator-guide/ci/tekton-overview.md",2469],86467831:[()=>r.e(8910).then(r.bind(r,9033)),"@site/docs/basic-concepts.md",9033],"86d6db2a":[()=>Promise.all([r.e(1869),r.e(438)]).then(r.bind(r,73346)),"@site/versioned_docs/version-3.9.0/operator-guide/kubernetes-cluster-settings.md",73346],"87458d22":[()=>r.e(2709).then(r.bind(r,30239)),"@site/docs/operator-guide/auth/ui-portal-oidc.md",30239],"888c1272":[()=>r.e(1378).then(r.bind(r,6745)),"@site/docs/api/keycloak.md",6745],"88d9469f":[()=>r.e(8725).then(r.bind(r,70005)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.1.md",70005],"898b3af1":[()=>r.e(9167).then(r.bind(r,60208)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton.md",60208],"8a6822c6":[()=>r.e(4271).then(r.bind(r,31958)),"@site/docs/developer-guide/telemetry.md",31958],"8a83b3c7":[()=>r.e(2770).then(r.bind(r,38374)),"@site/versioned_docs/version-3.9.0/use-cases/tekton-custom-pipelines.md",38374],"8af691e7":[()=>r.e(6908).then(r.bind(r,31054)),"@site/docs/operator-guide/auth/configure-keycloak-oidc-eks.md",31054],"8b654d4b":[()=>r.e(2520).then(r.bind(r,61999)),"@site/docs/operator-guide/ci/tekton-overview.md",61999],"8c940c46":[()=>r.e(7802).then(r.bind(r,33512)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.2.md",33512],"8ca4e1a6":[()=>r.e(9372).then(r.bind(r,83410)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/invalid-codebase-name.md",83410],"8d4aa1c0":[()=>Promise.all([r.e(1869),r.e(7993)]).then(r.bind(r,23244)),"@site/versioned_docs/version-3.9.0/developer-guide/edp-workflow.md",23244],"8d53a34c":[()=>r.e(5080).then(r.bind(r,92868)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.6.md",92868],"8e13ce48":[()=>Promise.all([r.e(1869),r.e(6762)]).then(r.bind(r,6570)),"@site/docs/operator-guide/cd/argocd-integration.md",6570],"8e374a73":[()=>r.e(9827).then(r.bind(r,94928)),"@site/docs/developer-guide/artifacts-verification.md",94928],"8e748517":[()=>r.e(6578).then(r.bind(r,70205)),"@site/versioned_docs/version-3.9.0/api/overview.md",70205],"9089e853":[()=>r.e(6934).then(r.bind(r,64847)),"@site/docs/user-guide/build-pipeline.md",64847],"930e7aa9":[()=>r.e(3508).then(r.bind(r,22127)),"@site/versioned_docs/version-3.9.0/operator-guide/install-via-civo.md",22127],"9324bd8e":[()=>r.e(5346).then(r.bind(r,22861)),"@site/docs/developer-guide/kubernetes-deployment.md",22861],"940fd2cd":[()=>r.e(9909).then(r.bind(r,23005)),"@site/versioned_docs/version-3.9.0/user-guide/quick-links.md",23005],"943a01fa":[()=>r.e(7334).then(r.bind(r,9262)),"@site/versioned_docs/version-3.9.0/user-guide/configuration-overview.md",9262],"948bd26e":[()=>r.e(2219).then(r.bind(r,70879)),"@site/docs/operator-guide/secrets-management/install-external-secrets-operator.md",70879],"9767a533":[()=>r.e(8610).then(r.bind(r,11543)),"@site/versioned_docs/version-3.9.0/api/keycloak.md",11543],"9796649a":[()=>r.e(2562).then(r.bind(r,60548)),"@site/versioned_docs/version-3.9.0/about-platform.md",60548],"97f2eb7c":[()=>r.e(9448).then(r.bind(r,11529)),"@site/docs/developer-guide/reference-cicd-pipeline.md",11529],"987472ad":[()=>r.e(2361).then(r.bind(r,76691)),"@site/versioned_docs/version-3.9.0/operator-guide/cd/customize-deploy-pipeline.md",76691],"9a8a7fd9":[()=>r.e(4394).then(r.bind(r,93084)),"@site/docs/use-cases/application-scaffolding.md",93084],"9caf552b":[()=>r.e(6520).then(r.bind(r,44400)),"@site/docs/operator-guide/prerequisites.md",44400],"9ce0a1f2":[()=>r.e(898).then(r.bind(r,45618)),"@site/versioned_docs/version-3.9.0/quick-start/integrate-sonarcloud.md",45618],"9e71e711":[()=>r.e(4207).then(r.bind(r,341)),"@site/versioned_docs/version-3.9.0/faq/observability.md",341],"9e7f40fd":[()=>r.e(4464).then(r.bind(r,2354)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/troubleshoot-applications.md",2354],"9f00b4be":[()=>r.e(2755).then(r.bind(r,6923)),"@site/versioned_docs/version-3.9.0/user-guide/autotest.md",6923],"9f751592":[()=>r.e(4493).then(r.bind(r,60140)),"@site/versioned_docs/version-3.9.0/developer-guide/telemetry.md",60140],a19dc9df:[()=>r.e(5616).then(r.bind(r,61186)),"@site/docs/developer-guide/documentation-guide.md",61186],a2652869:[()=>r.e(7772).then(r.bind(r,21623)),"@site/docs/operator-guide/disaster-recovery/velero-restore-platform.md",21623],a44abd16:[()=>r.e(9982).then(r.bind(r,5250)),"@site/versioned_docs/version-3.9.0/user-guide/add-application.md",5250],a49f37ed:[()=>r.e(480).then(r.bind(r,9995)),"@site/docs/operator-guide/infrastructure-providers/aws/kaniko-irsa.md",9995],a4b66926:[()=>r.e(5727).then(r.bind(r,51401)),"@site/docs/quick-start/integrate-container-registry.md",51401],a61962e1:[()=>r.e(8786).then(r.bind(r,13191)),"@site/docs/faq/observability.md",13191],a71a789b:[()=>r.e(9525).then(r.bind(r,56793)),"@site/docs/operator-guide/install-via-civo.md",56793],a7456010:[()=>r.e(1235).then(r.t.bind(r,88552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",88552],a777fecc:[()=>r.e(9368).then(r.bind(r,59045)),"@site/docs/supported-versions.md",59045],a77efc2c:[()=>Promise.all([r.e(1869),r.e(975)]).then(r.bind(r,50112)),"@site/docs/operator-guide/openshift-cluster-settings.md",50112],a7aa31e0:[()=>r.e(7826).then(r.bind(r,20775)),"@site/versioned_docs/version-3.9.0/operator-guide/artifacts-management/package-registry.md",20775],a7bd4aaa:[()=>r.e(7098).then(r.bind(r,74532)),"@theme/DocVersionRoot",74532],a8716f2a:[()=>r.e(739).then(r.bind(r,8123)),"@site/versioned_docs/version-3.9.0/user-guide/add-library.md",8123],a94703ab:[()=>Promise.all([r.e(1869),r.e(9048)]).then(r.bind(r,92559)),"@theme/DocRoot",92559],ab416cbf:[()=>r.e(3094).then(r.bind(r,74674)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/resource-observability.md",74674],ab6d40ba:[()=>r.e(7243).then(r.bind(r,37241)),"@site/docs/operator-guide/troubleshooting/application-not-built.md",37241],aba21aa0:[()=>r.e(5742).then(r.t.bind(r,27093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",27093],abae9bb0:[()=>r.e(759).then(r.bind(r,68989)),"@site/versioned_docs/version-3.9.0/operator-guide/disaster-recovery/velero-restore-platform.md",68989],ae17d0c5:[()=>r.e(4705).then(r.bind(r,82811)),"@site/docs/developer-guide/annotations-and-labels.md",82811],b0c1c603:[()=>r.e(6313).then(r.bind(r,73737)),"@site/versioned_docs/version-3.9.0/user-guide/add-infrastructure.md",73737],b0e9d19b:[()=>r.e(9255).then(r.bind(r,89416)),"@site/versioned_docs/version-3.9.0/user-guide/ci-pipeline-details.md",89416],b197dc8d:[()=>r.e(603).then(r.bind(r,28122)),"@site/versioned_docs/version-3.9.0/operator-guide/ci/ci-pipeline-terraform.md",28122],b2e1341b:[()=>r.e(269).then(r.bind(r,73959)),"@site/versioned_docs/version-3.9.0/operator-guide/devsecops/overview.md",73959],b2e3315c:[()=>Promise.all([r.e(1869),r.e(531)]).then(r.bind(r,40602)),"@site/docs/operator-guide/auth/oauth2-proxy.md",40602],b6e7cf93:[()=>r.e(3216).then(r.bind(r,87429)),"@site/docs/operator-guide/monitoring-and-observability/loki-irsa.md",87429],b89de35c:[()=>r.e(2574).then(r.bind(r,15517)),"@site/versioned_docs/version-3.9.0/developer-guide/annotations-and-labels.md",15517],b987cff0:[()=>Promise.all([r.e(1869),r.e(8890)]).then(r.bind(r,32240)),"@site/versioned_docs/version-3.9.0/operator-guide/cd/argocd-integration.md",32240],ba901201:[()=>r.e(4303).then(r.bind(r,88269)),"@site/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.9.md",88269],bcd72955:[()=>r.e(7656).then(r.bind(r,58993)),"@site/docs/operator-guide/infrastructure-providers/overview.md",58993],bd0f1528:[()=>r.e(5219).then(r.bind(r,78607)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.3.md",78607],bd6d44a7:[()=>r.e(7519).then(r.bind(r,19092)),"@site/versioned_docs/version-3.9.0/operator-guide/code-quality/sonarqube-visibility.md",19092],bd8a80e4:[()=>r.e(8155).then(r.bind(r,95756)),"@site/docs/user-guide/add-application.md",95756],bde950ad:[()=>r.e(3379).then(r.bind(r,85640)),"@site/docs/developer-guide/aws-infrastructure-cost-estimation.md",85640],bf1307fc:[()=>r.e(1906).then(r.t.bind(r,31413,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-next-d71.json",31413],c141421f:[()=>r.e(957).then(r.t.bind(r,40936,19)),"@generated/docusaurus-theme-search-algolia/default/__plugin.json",40936],c1496376:[()=>r.e(7408).then(r.bind(r,89530)),"@site/docs/operator-guide/disaster-recovery/install-velero.md",89530],c150db1c:[()=>r.e(4270).then(r.bind(r,36449)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.7.md",36449],c1a3750d:[()=>r.e(4835).then(r.bind(r,35181)),"@site/docs/user-guide/autotest.md",35181],c27a25a0:[()=>r.e(6292).then(r.bind(r,47526)),"@site/docs/quick-start/platform-installation.md",47526],c319d5eb:[()=>Promise.all([r.e(1869),r.e(2023)]).then(r.bind(r,63895)),"@site/versioned_docs/version-3.9.0/operator-guide/project-management-and-reporting/jira-integration.md",63895],c3338e1b:[()=>r.e(2035).then(r.bind(r,41973)),"@site/versioned_docs/version-3.9.0/user-guide/code-review-pipeline.md",41973],c3f2cea3:[()=>r.e(2805).then(r.bind(r,31820)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/eks-oidc-integration.md",31820],c43a28ac:[()=>r.e(964).then(r.bind(r,75126)),"@site/versioned_docs/version-3.9.0/operator-guide/install-tekton.md",75126],c4ee272c:[()=>r.e(112).then(r.bind(r,90537)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/aws/kaniko-irsa.md",90537],c60720d5:[()=>r.e(3840).then(r.bind(r,84495)),"@site/docs/operator-guide/infrastructure-providers/aws/deploy-aws-eks.md",84495],c6ac71c4:[()=>r.e(9765).then(r.bind(r,26418)),"@site/versioned_docs/version-3.9.0/operator-guide/project-management-and-reporting/install-reportportal.md",26418],c80b71a7:[()=>r.e(9912).then(r.bind(r,43923)),"@site/docs/user-guide/marketplace.md",43923],c8301fd8:[()=>r.e(1494).then(r.bind(r,7120)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/troubleshoot-container-registries.md",7120],c85bca81:[()=>r.e(3150).then(r.bind(r,27016)),"@site/versioned_docs/version-3.9.0/user-guide/change-container-registry.md",27016],c9cbadcb:[()=>r.e(1836).then(r.bind(r,112)),"@site/docs/quick-start/quick-start-overview.md",112],ca1d8a52:[()=>r.e(8876).then(r.bind(r,40779)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-keycloak-19.0.md",40779],cab7373a:[()=>r.e(2364).then(r.bind(r,50395)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/okd/deploy-okd-4.10.md",50395],cb58fed2:[()=>r.e(5202).then(r.bind(r,93377)),"@site/docs/operator-guide/upgrade/upgrade-keycloak-19.0.md",93377],cba74878:[()=>r.e(2117).then(r.bind(r,9682)),"@site/docs/operator-guide/secrets-management/external-secrets-operator-integration.md",9682],cdb5ac83:[()=>r.e(5802).then(r.bind(r,18786)),"@site/docs/operator-guide/troubleshooting/troubleshoot-container-registries.md",18786],ce31bfe2:[()=>r.e(6114).then(r.bind(r,77667)),"@site/versioned_docs/version-3.9.0/developer-guide/kubernetes-deployment.md",77667],ce7bc824:[()=>Promise.all([r.e(1869),r.e(8715)]).then(r.bind(r,52713)),"@site/docs/operator-guide/project-management-and-reporting/jira-integration.md",52713],cf5c85ec:[()=>r.e(3509).then(r.bind(r,47617)),"@site/versioned_docs/version-3.9.0/operator-guide/index.md",47617],d07136a5:[()=>r.e(6118).then(r.bind(r,45722)),"@site/docs/user-guide/application.md",45722],d1aa0b03:[()=>r.e(9309).then(r.bind(r,18250)),"@site/docs/developer-guide/reference-architecture.md",18250],d228832a:[()=>r.e(9895).then(r.bind(r,80584)),"@site/docs/operator-guide/ci/ci-pipeline-terraform.md",80584],d447e5db:[()=>r.e(2344).then(r.bind(r,89514)),"@site/docs/user-guide/ci-pipeline-details.md",89514],d48632b4:[()=>Promise.all([r.e(1869),r.e(1864)]).then(r.bind(r,4768)),"@site/docs/operator-guide/install-kuberocketci.md",4768],d4b46edc:[()=>Promise.all([r.e(1869),r.e(8405)]).then(r.bind(r,83075)),"@site/versioned_docs/version-3.9.0/operator-guide/devsecops/defectdojo.md",83075],d58bc2be:[()=>r.e(1888).then(r.bind(r,75618)),"@site/docs/operator-guide/auth/platform-auth-model.md",75618],d5b57750:[()=>r.e(9e3).then(r.bind(r,90465)),"@site/docs/user-guide/infrastructure.md",90465],d720547e:[()=>Promise.all([r.e(1869),r.e(2165)]).then(r.bind(r,4185)),"@site/docs/operator-guide/devsecops/dependency-track.md",4185],d743684d:[()=>r.e(4965).then(r.bind(r,10773)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/ui-portal-oidc.md",10773],d9d03a6c:[()=>r.e(6595).then(r.bind(r,67104)),"@site/docs/user-guide/manage-environments.md",67104],db40af26:[()=>r.e(5812).then(r.bind(r,68114)),"@site/docs/operator-guide/aws-marketplace-install.md",68114],db5b5246:[()=>r.e(599).then(r.bind(r,84187)),"@site/versioned_docs/version-3.9.0/operator-guide/upgrade/upgrade-edp-3.7.md",84187],dbe4c68a:[()=>r.e(1748).then(r.bind(r,26513)),"@site/versioned_docs/version-3.9.0/quick-start/integrate-github.md",26513],dd7827d4:[()=>r.e(8215).then(r.bind(r,33631)),"@site/docs/user-guide/add-autotest.md",33631],dd7c1c12:[()=>r.e(7276).then(r.bind(r,67971)),"@site/versioned_docs/version-3.9.0/developer-guide/index.md",67971],ddac93a7:[()=>r.e(5515).then(r.bind(r,52293)),"@site/docs/operator-guide/devsecops/overview.md",52293],df75cb30:[()=>r.e(8179).then(r.bind(r,82424)),"@site/versioned_docs/version-3.9.0/quick-start/deploy-application.md",82424],df7734cc:[()=>r.e(9064).then(r.bind(r,1734)),"@site/docs/operator-guide/code-quality/sonarqube-visibility.md",1734],e02b2488:[()=>r.e(3502).then(r.bind(r,96868)),"@site/docs/operator-guide/upgrade/upgrade-edp-3.4.md",96868],e1b2e473:[()=>r.e(9324).then(r.bind(r,58894)),"@site/versioned_docs/version-3.9.0/developer-guide/artifacts-verification.md",58894],e25dde82:[()=>r.e(7446).then(r.bind(r,87554)),"@site/versioned_docs/version-3.9.0/operator-guide/prerequisites.md",87554],e276dffd:[()=>r.e(4325).then(r.bind(r,2360)),"@site/versioned_docs/version-3.9.0/api/cd-pipeline.md",2360],e376fc56:[()=>r.e(3480).then(r.bind(r,20886)),"@site/docs/compliance.md",20886],e3a12174:[()=>r.e(455).then(r.bind(r,22752)),"@site/docs/operator-guide/troubleshooting/troubleshoot-stages.md",22752],e3d66ab4:[()=>r.e(9836).then(r.bind(r,96411)),"@site/docs/operator-guide/install-ingress-nginx.md",96411],e44c82f9:[()=>r.e(3774).then(r.bind(r,52426)),"@site/versioned_docs/version-3.9.0/operator-guide/troubleshooting/troubleshoot-stages.md",52426],e6663c1e:[()=>r.e(8498).then(r.bind(r,39717)),"@site/docs/operator-guide/infrastructure-providers/aws/ebs-csi-driver.md",39717],e6e4e7e8:[()=>r.e(1958).then(r.bind(r,32740)),"@site/versioned_docs/version-3.9.0/api/sonarqube.md",32740],e747ec83:[()=>r.e(7051).then(r.bind(r,95077)),"@site/docs/glossary.md",95077],e7f9f93c:[()=>r.e(3421).then(r.bind(r,33720)),"@site/docs/operator-guide/infrastructure-providers/okd/ssl-automation-okd.md",33720],e84bdefe:[()=>r.e(908).then(r.bind(r,8173)),"@site/docs/faq/artifacts.md",8173],e9a23086:[()=>r.e(5339).then(r.bind(r,54345)),"@site/docs/operator-guide/artifacts-management/harbor-oidc.md",54345],eabfd353:[()=>r.e(5690).then(r.bind(r,64848)),"@site/versioned_docs/version-3.9.0/operator-guide/aws-marketplace-install.md",64848],ebc96097:[()=>r.e(9184).then(r.bind(r,78070)),"@site/versioned_docs/version-3.9.0/operator-guide/infrastructure-providers/okd/ssl-automation-okd.md",78070],ed30a543:[()=>r.e(4768).then(r.bind(r,14838)),"@site/docs/user-guide/components.md",14838],ee0cdc98:[()=>r.e(5870).then(r.bind(r,11716)),"@site/docs/user-guide/add-cluster.md",11716],ee115e08:[()=>r.e(9329).then(r.bind(r,57049)),"@site/docs/operator-guide/artifacts-management/package-registry.md",57049],ef72b93a:[()=>Promise.all([r.e(1869),r.e(5330)]).then(r.bind(r,73912)),"@site/docs/operator-guide/artifacts-management/harbor-integration.md",73912],f130c3c7:[()=>r.e(6977).then(r.bind(r,39907)),"@site/versioned_docs/version-3.9.0/basic-concepts.md",39907],f3352c51:[()=>r.e(9009).then(r.bind(r,30070)),"@site/versioned_docs/version-3.9.0/use-cases/application-scaffolding.md",30070],f473c0b6:[()=>r.e(1406).then(r.bind(r,92909)),"@site/docs/operator-guide/auth/keycloak.md",92909],f69e9f90:[()=>r.e(1587).then(r.bind(r,86892)),"@site/versioned_docs/version-3.9.0/user-guide/components.md",86892],f702e503:[()=>r.e(2701).then(r.bind(r,2598)),"@site/versioned_docs/version-3.9.0/api/codebase.md",2598],f75a3945:[()=>r.e(45).then(r.bind(r,59139)),"@site/versioned_docs/version-3.9.0/operator-guide/auth/keycloak.md",59139],f829ab6a:[()=>Promise.all([r.e(1869),r.e(9312)]).then(r.bind(r,62905)),"@site/docs/operator-guide/devsecops/defectdojo.md",62905],f92f0b66:[()=>r.e(7702).then(r.bind(r,65029)),"@site/versioned_docs/version-3.9.0/user-guide/add-autotest.md",65029],f98f2601:[()=>r.e(8839).then(r.bind(r,72569)),"@site/versioned_docs/version-3.9.0/user-guide/add-quality-gate.md",72569],fc733e34:[()=>r.e(7457).then(r.bind(r,58175)),"@site/docs/operator-guide/install-argocd.md",58175],fd137651:[()=>r.e(1728).then(r.bind(r,50308)),"@site/docs/operator-guide/troubleshooting/troubleshoot-applications.md",50308],fdbbed9d:[()=>r.e(3793).then(r.bind(r,57386)),"@site/docs/operator-guide/disaster-recovery/velero-irsa.md",57386],feed017a:[()=>r.e(3798).then(r.bind(r,10481)),"@site/versioned_docs/version-3.9.0/operator-guide/advanced-installation/custom-certificates.md",10481],fff25a8b:[()=>Promise.all([r.e(1869),r.e(8367)]).then(r.bind(r,69233)),"@site/versioned_docs/version-3.9.0/user-guide/manage-container-registries.md",69233]};var s=r(74848);function d(e){let{error:t,retry:r,pastDelay:n}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:r,children:"Retry"})})]}):n?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=r(86921),u=r(53102);function l(e,t){if("*"===e)return o()({loading:d,loader:()=>r.e(2237).then(r.bind(r,82237)),modules:["@theme/NotFound"],webpack:()=>[82237],render(e,t){const r=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(r,{...t})})}});const n=a[`${e}-${t}`],l={},p=[],g=[],f=(0,c.A)(n);return Object.entries(f).forEach((e=>{let[t,r]=e;const n=i[r];n&&(l[t]=n[0],p.push(n[1]),g.push(n[2]))})),o().Map({loading:d,loader:l,modules:p,webpack:()=>g,render(t,r){const o=JSON.parse(JSON.stringify(n));Object.entries(t).forEach((t=>{let[r,n]=t;const a=n.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(n).filter((e=>"default"!==e)).forEach((e=>{a[e]=n[e]}));let i=o;const s=r.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const d=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...d,...r})})}})}const p=[{path:"/pricing",component:l("/pricing","26c"),exact:!0},{path:"/search",component:l("/search","5de"),exact:!0},{path:"/docs",component:l("/docs","e1f"),routes:[{path:"/docs/next",component:l("/docs/next","f9e"),routes:[{path:"/docs/next",component:l("/docs/next","0df"),routes:[{path:"/docs/next/about-platform",component:l("/docs/next/about-platform","a3e"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/api/cd-pipeline",component:l("/docs/next/api/cd-pipeline","8b7"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/api/codebase",component:l("/docs/next/api/codebase","cfe"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/api/keycloak",component:l("/docs/next/api/keycloak","d37"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/api/nexus",component:l("/docs/next/api/nexus","6cc"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/api/overview",component:l("/docs/next/api/overview","87f"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/api/sonarqube",component:l("/docs/next/api/sonarqube","bbb"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/next/basic-concepts",component:l("/docs/next/basic-concepts","619"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/compliance",component:l("/docs/next/compliance","f9b"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/developer-guide",component:l("/docs/next/developer-guide","5b3"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/annotations-and-labels",component:l("/docs/next/developer-guide/annotations-and-labels","fc2"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/artifacts-verification",component:l("/docs/next/developer-guide/artifacts-verification","ff5"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/autotest-coverage",component:l("/docs/next/developer-guide/autotest-coverage","3e0"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/aws-deployment-diagram",component:l("/docs/next/developer-guide/aws-deployment-diagram","65a"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/aws-infrastructure-cost-estimation",component:l("/docs/next/developer-guide/aws-infrastructure-cost-estimation","dc0"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/aws-reference-architecture",component:l("/docs/next/developer-guide/aws-reference-architecture","ea1"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/documentation-guide",component:l("/docs/next/developer-guide/documentation-guide","9fb"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/edp-workflow",component:l("/docs/next/developer-guide/edp-workflow","4df"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/kubernetes-deployment",component:l("/docs/next/developer-guide/kubernetes-deployment","340"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/local-development",component:l("/docs/next/developer-guide/local-development","28c"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/reference-architecture",component:l("/docs/next/developer-guide/reference-architecture","5f3"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/reference-cicd-pipeline",component:l("/docs/next/developer-guide/reference-cicd-pipeline","4c1"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/developer-guide/telemetry",component:l("/docs/next/developer-guide/telemetry","8aa"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/next/faq/artifacts",component:l("/docs/next/faq/artifacts","a20"),exact:!0,sidebar:"faqSidebar"},{path:"/docs/next/faq/observability",component:l("/docs/next/faq/observability","369"),exact:!0,sidebar:"faqSidebar"},{path:"/docs/next/glossary",component:l("/docs/next/glossary","2c1"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/operator-guide",component:l("/docs/next/operator-guide","dc8"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/add-ons-overview",component:l("/docs/next/operator-guide/add-ons-overview","b8d"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/advanced-installation/capsule",component:l("/docs/next/operator-guide/advanced-installation/capsule","73b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/advanced-installation/custom-certificates",component:l("/docs/next/operator-guide/advanced-installation/custom-certificates","fcd"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/advanced-installation/overview",component:l("/docs/next/operator-guide/advanced-installation/overview","c07"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/artifacts-management/harbor-installation",component:l("/docs/next/operator-guide/artifacts-management/harbor-installation","5ed"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/artifacts-management/harbor-integration",component:l("/docs/next/operator-guide/artifacts-management/harbor-integration","3dc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/artifacts-management/harbor-oidc",component:l("/docs/next/operator-guide/artifacts-management/harbor-oidc","067"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/artifacts-management/nexus-sonatype",component:l("/docs/next/operator-guide/artifacts-management/nexus-sonatype","839"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/artifacts-management/package-registry",component:l("/docs/next/operator-guide/artifacts-management/package-registry","89e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks",component:l("/docs/next/operator-guide/auth/configure-keycloak-oidc-eks","1e9"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/eks-oidc-integration",component:l("/docs/next/operator-guide/auth/eks-oidc-integration","588"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/keycloak",component:l("/docs/next/operator-guide/auth/keycloak","feb"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/namespace-management",component:l("/docs/next/operator-guide/auth/namespace-management","457"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/oauth2-proxy",component:l("/docs/next/operator-guide/auth/oauth2-proxy","8b7"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/platform-auth-model",component:l("/docs/next/operator-guide/auth/platform-auth-model","9e2"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/auth/ui-portal-oidc",component:l("/docs/next/operator-guide/auth/ui-portal-oidc","a80"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/aws-marketplace-install",component:l("/docs/next/operator-guide/aws-marketplace-install","952"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/cd/argocd-integration",component:l("/docs/next/operator-guide/cd/argocd-integration","06b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/cd/customize-deploy-pipeline",component:l("/docs/next/operator-guide/cd/customize-deploy-pipeline","367"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/ci/ci-pipeline-terraform",component:l("/docs/next/operator-guide/ci/ci-pipeline-terraform","031"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/ci/notification-msteams",component:l("/docs/next/operator-guide/ci/notification-msteams","910"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/ci/tekton-monitoring",component:l("/docs/next/operator-guide/ci/tekton-monitoring","fed"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/ci/tekton-overview",component:l("/docs/next/operator-guide/ci/tekton-overview","2d8"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/code-quality/sonarqube",component:l("/docs/next/operator-guide/code-quality/sonarqube","cf6"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/code-quality/sonarqube-visibility",component:l("/docs/next/operator-guide/code-quality/sonarqube-visibility","ddc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/devsecops/defectdojo",component:l("/docs/next/operator-guide/devsecops/defectdojo","258"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/devsecops/dependency-track",component:l("/docs/next/operator-guide/devsecops/dependency-track","2cf"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/devsecops/overview",component:l("/docs/next/operator-guide/devsecops/overview","5d3"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/disaster-recovery/install-velero",component:l("/docs/next/operator-guide/disaster-recovery/install-velero","43a"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/disaster-recovery/velero-irsa",component:l("/docs/next/operator-guide/disaster-recovery/velero-irsa","e6a"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/disaster-recovery/velero-restore-platform",component:l("/docs/next/operator-guide/disaster-recovery/velero-restore-platform","810"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/aws/deploy-aws-eks",component:l("/docs/next/operator-guide/infrastructure-providers/aws/deploy-aws-eks","7e5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/aws/ebs-csi-driver",component:l("/docs/next/operator-guide/infrastructure-providers/aws/ebs-csi-driver","513"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/aws/enable-irsa",component:l("/docs/next/operator-guide/infrastructure-providers/aws/enable-irsa","f38"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/aws/kaniko-irsa",component:l("/docs/next/operator-guide/infrastructure-providers/aws/kaniko-irsa","e33"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/aws/waf-tf-configuration",component:l("/docs/next/operator-guide/infrastructure-providers/aws/waf-tf-configuration","2f9"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.10",component:l("/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.10","446"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.9",component:l("/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.9","3b5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/okd/ssl-automation-okd",component:l("/docs/next/operator-guide/infrastructure-providers/okd/ssl-automation-okd","f2e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/infrastructure-providers/overview",component:l("/docs/next/operator-guide/infrastructure-providers/overview","146"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/install-argocd",component:l("/docs/next/operator-guide/install-argocd","e9a"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/install-ingress-nginx",component:l("/docs/next/operator-guide/install-ingress-nginx","b27"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/install-kuberocketci",component:l("/docs/next/operator-guide/install-kuberocketci","983"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/install-tekton",component:l("/docs/next/operator-guide/install-tekton","0cc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/install-via-civo",component:l("/docs/next/operator-guide/install-via-civo","721"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/installation-overview",component:l("/docs/next/operator-guide/installation-overview","b5e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/kubernetes-cluster-settings",component:l("/docs/next/operator-guide/kubernetes-cluster-settings","a88"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/monitoring-and-observability/install-loki",component:l("/docs/next/operator-guide/monitoring-and-observability/install-loki","73e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/monitoring-and-observability/kibana-ilm-rollover",component:l("/docs/next/operator-guide/monitoring-and-observability/kibana-ilm-rollover","e97"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/monitoring-and-observability/loki-irsa",component:l("/docs/next/operator-guide/monitoring-and-observability/loki-irsa","ffb"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/monitoring-and-observability/multitenant-logging",component:l("/docs/next/operator-guide/monitoring-and-observability/multitenant-logging","92c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/openshift-cluster-settings",component:l("/docs/next/operator-guide/openshift-cluster-settings","d02"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/prerequisites",component:l("/docs/next/operator-guide/prerequisites","b06"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/project-management-and-reporting/install-reportportal",component:l("/docs/next/operator-guide/project-management-and-reporting/install-reportportal","09f"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/project-management-and-reporting/jira-integration",component:l("/docs/next/operator-guide/project-management-and-reporting/jira-integration","4aa"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/project-management-and-reporting/reportportal-keycloak",component:l("/docs/next/operator-guide/project-management-and-reporting/reportportal-keycloak","5a5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/project-management-and-reporting/reportportal-tekton",component:l("/docs/next/operator-guide/project-management-and-reporting/reportportal-tekton","861"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration",component:l("/docs/next/operator-guide/secrets-management/external-secrets-operator-integration","94d"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/secrets-management/install-external-secrets-operator",component:l("/docs/next/operator-guide/secrets-management/install-external-secrets-operator","c64"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/application-not-built",component:l("/docs/next/operator-guide/troubleshooting/application-not-built","61b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/invalid-codebase-name",component:l("/docs/next/operator-guide/troubleshooting/invalid-codebase-name","dbb"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/overview",component:l("/docs/next/operator-guide/troubleshooting/overview","cd2"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/resource-observability",component:l("/docs/next/operator-guide/troubleshooting/resource-observability","80f"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/troubleshoot-applications",component:l("/docs/next/operator-guide/troubleshooting/troubleshoot-applications","7e9"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/troubleshoot-container-registries",component:l("/docs/next/operator-guide/troubleshooting/troubleshoot-container-registries","c30"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/troubleshoot-git-server",component:l("/docs/next/operator-guide/troubleshooting/troubleshoot-git-server","990"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/troubleshooting/troubleshoot-stages",component:l("/docs/next/operator-guide/troubleshooting/troubleshoot-stages","e23"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/uninstall-kuberocketci",component:l("/docs/next/operator-guide/uninstall-kuberocketci","00f"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton",component:l("/docs/next/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","f11"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.0",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.0","680"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.1",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.1","286"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.2",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.2","6da"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.3",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.3","4b8"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.4",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.4","06b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.5",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.5","40c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.6",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.6","f31"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.7",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.7","8b0"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.8",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.8","0c9"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-edp-3.9",component:l("/docs/next/operator-guide/upgrade/upgrade-edp-3.9","505"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/operator-guide/upgrade/upgrade-keycloak-19.0",component:l("/docs/next/operator-guide/upgrade/upgrade-keycloak-19.0","c70"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/next/quick-start/create-application",component:l("/docs/next/quick-start/create-application","248"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/deploy-application",component:l("/docs/next/quick-start/deploy-application","bd9"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/integrate-argocd",component:l("/docs/next/quick-start/integrate-argocd","cc2"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/integrate-container-registry",component:l("/docs/next/quick-start/integrate-container-registry","52f"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/integrate-github",component:l("/docs/next/quick-start/integrate-github","ce3"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/integrate-sonarcloud",component:l("/docs/next/quick-start/integrate-sonarcloud","0fa"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/platform-installation",component:l("/docs/next/quick-start/platform-installation","ce3"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/quick-start/quick-start-overview",component:l("/docs/next/quick-start/quick-start-overview","e54"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/supported-versions",component:l("/docs/next/supported-versions","f76"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/next/use-cases",component:l("/docs/next/use-cases","3c4"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/next/use-cases/application-scaffolding",component:l("/docs/next/use-cases/application-scaffolding","b49"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/next/use-cases/autotest-as-quality-gate",component:l("/docs/next/use-cases/autotest-as-quality-gate","c28"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/next/use-cases/external-secrets",component:l("/docs/next/use-cases/external-secrets","f71"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/next/use-cases/tekton-custom-pipelines",component:l("/docs/next/use-cases/tekton-custom-pipelines","055"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/next/user-guide",component:l("/docs/next/user-guide","c18"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-application",component:l("/docs/next/user-guide/add-application","ed6"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-autotest",component:l("/docs/next/user-guide/add-autotest","10f"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-cd-pipeline",component:l("/docs/next/user-guide/add-cd-pipeline","bd7"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-cluster",component:l("/docs/next/user-guide/add-cluster","257"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-git-server",component:l("/docs/next/user-guide/add-git-server","29c"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-infrastructure",component:l("/docs/next/user-guide/add-infrastructure","3c4"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-library",component:l("/docs/next/user-guide/add-library","ea7"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-marketplace",component:l("/docs/next/user-guide/add-marketplace","958"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/add-quality-gate",component:l("/docs/next/user-guide/add-quality-gate","69b"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/application",component:l("/docs/next/user-guide/application","9d7"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/autotest",component:l("/docs/next/user-guide/autotest","dd7"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/build-pipeline",component:l("/docs/next/user-guide/build-pipeline","f18"),exact:!0},{path:"/docs/next/user-guide/cd-pipeline-details",component:l("/docs/next/user-guide/cd-pipeline-details","bd0"),exact:!0},{path:"/docs/next/user-guide/change-container-registry",component:l("/docs/next/user-guide/change-container-registry","2de"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/ci-pipeline-details",component:l("/docs/next/user-guide/ci-pipeline-details","e3d"),exact:!0},{path:"/docs/next/user-guide/cluster",component:l("/docs/next/user-guide/cluster","881"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/code-review-pipeline",component:l("/docs/next/user-guide/code-review-pipeline","1c1"),exact:!0},{path:"/docs/next/user-guide/components",component:l("/docs/next/user-guide/components","5ed"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/configuration-overview",component:l("/docs/next/user-guide/configuration-overview","372"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/git-server-overview",component:l("/docs/next/user-guide/git-server-overview","a8f"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/gitops",component:l("/docs/next/user-guide/gitops","5a5"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/infrastructure",component:l("/docs/next/user-guide/infrastructure","17c"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/library",component:l("/docs/next/user-guide/library","5a1"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/manage-branches",component:l("/docs/next/user-guide/manage-branches","4c9"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/manage-container-registries",component:l("/docs/next/user-guide/manage-container-registries","fd1"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/manage-environments",component:l("/docs/next/user-guide/manage-environments","02e"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/marketplace",component:l("/docs/next/user-guide/marketplace","97f"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/next/user-guide/quick-links",component:l("/docs/next/user-guide/quick-links","1a8"),exact:!0,sidebar:"userGuideSidebar"}]}]},{path:"/docs",component:l("/docs","2d8"),routes:[{path:"/docs",component:l("/docs","d6c"),routes:[{path:"/docs/about-platform",component:l("/docs/about-platform","a57"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/api/cd-pipeline",component:l("/docs/api/cd-pipeline","2dd"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/codebase",component:l("/docs/api/codebase","854"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/keycloak",component:l("/docs/api/keycloak","b57"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/nexus",component:l("/docs/api/nexus","303"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/overview",component:l("/docs/api/overview","d9b"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/api/sonarqube",component:l("/docs/api/sonarqube","4b9"),exact:!0,sidebar:"apiSidebar"},{path:"/docs/basic-concepts",component:l("/docs/basic-concepts","d11"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/compliance",component:l("/docs/compliance","b9a"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/developer-guide",component:l("/docs/developer-guide","2ee"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/annotations-and-labels",component:l("/docs/developer-guide/annotations-and-labels","e8c"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/artifacts-verification",component:l("/docs/developer-guide/artifacts-verification","69f"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/autotest-coverage",component:l("/docs/developer-guide/autotest-coverage","e74"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/aws-deployment-diagram",component:l("/docs/developer-guide/aws-deployment-diagram","1e4"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/aws-infrastructure-cost-estimation",component:l("/docs/developer-guide/aws-infrastructure-cost-estimation","acb"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/aws-reference-architecture",component:l("/docs/developer-guide/aws-reference-architecture","8db"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/documentation-guide",component:l("/docs/developer-guide/documentation-guide","e57"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/edp-workflow",component:l("/docs/developer-guide/edp-workflow","329"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/kubernetes-deployment",component:l("/docs/developer-guide/kubernetes-deployment","1e1"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/local-development",component:l("/docs/developer-guide/local-development","da4"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/reference-architecture",component:l("/docs/developer-guide/reference-architecture","c1e"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/reference-cicd-pipeline",component:l("/docs/developer-guide/reference-cicd-pipeline","5cc"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/developer-guide/telemetry",component:l("/docs/developer-guide/telemetry","ea1"),exact:!0,sidebar:"developerGuideSidebar"},{path:"/docs/faq/artifacts",component:l("/docs/faq/artifacts","b2d"),exact:!0,sidebar:"faqSidebar"},{path:"/docs/faq/observability",component:l("/docs/faq/observability","886"),exact:!0,sidebar:"faqSidebar"},{path:"/docs/glossary",component:l("/docs/glossary","3d6"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/operator-guide",component:l("/docs/operator-guide","17b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/add-ons-overview",component:l("/docs/operator-guide/add-ons-overview","d3f"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/advanced-installation/capsule",component:l("/docs/operator-guide/advanced-installation/capsule","235"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/advanced-installation/custom-certificates",component:l("/docs/operator-guide/advanced-installation/custom-certificates","a40"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/advanced-installation/overview",component:l("/docs/operator-guide/advanced-installation/overview","76d"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/artifacts-management/harbor-installation",component:l("/docs/operator-guide/artifacts-management/harbor-installation","9b8"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/artifacts-management/harbor-integration",component:l("/docs/operator-guide/artifacts-management/harbor-integration","b1c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/artifacts-management/harbor-oidc",component:l("/docs/operator-guide/artifacts-management/harbor-oidc","772"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/artifacts-management/nexus-sonatype",component:l("/docs/operator-guide/artifacts-management/nexus-sonatype","271"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/artifacts-management/package-registry",component:l("/docs/operator-guide/artifacts-management/package-registry","4d4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/configure-keycloak-oidc-eks",component:l("/docs/operator-guide/auth/configure-keycloak-oidc-eks","80b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/eks-oidc-integration",component:l("/docs/operator-guide/auth/eks-oidc-integration","63c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/keycloak",component:l("/docs/operator-guide/auth/keycloak","282"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/namespace-management",component:l("/docs/operator-guide/auth/namespace-management","fec"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/oauth2-proxy",component:l("/docs/operator-guide/auth/oauth2-proxy","13b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/platform-auth-model",component:l("/docs/operator-guide/auth/platform-auth-model","4f4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/auth/ui-portal-oidc",component:l("/docs/operator-guide/auth/ui-portal-oidc","cd0"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/aws-marketplace-install",component:l("/docs/operator-guide/aws-marketplace-install","38a"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/cd/argocd-integration",component:l("/docs/operator-guide/cd/argocd-integration","f9d"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/cd/customize-deploy-pipeline",component:l("/docs/operator-guide/cd/customize-deploy-pipeline","a84"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/ci/ci-pipeline-terraform",component:l("/docs/operator-guide/ci/ci-pipeline-terraform","8de"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/ci/notification-msteams",component:l("/docs/operator-guide/ci/notification-msteams","522"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/ci/tekton-monitoring",component:l("/docs/operator-guide/ci/tekton-monitoring","279"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/ci/tekton-overview",component:l("/docs/operator-guide/ci/tekton-overview","bbb"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/code-quality/sonarqube",component:l("/docs/operator-guide/code-quality/sonarqube","0d9"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/code-quality/sonarqube-visibility",component:l("/docs/operator-guide/code-quality/sonarqube-visibility","82c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/devsecops/defectdojo",component:l("/docs/operator-guide/devsecops/defectdojo","757"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/devsecops/dependency-track",component:l("/docs/operator-guide/devsecops/dependency-track","6f5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/devsecops/overview",component:l("/docs/operator-guide/devsecops/overview","6bc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/disaster-recovery/install-velero",component:l("/docs/operator-guide/disaster-recovery/install-velero","c50"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/disaster-recovery/velero-irsa",component:l("/docs/operator-guide/disaster-recovery/velero-irsa","ab4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/disaster-recovery/velero-restore-platform",component:l("/docs/operator-guide/disaster-recovery/velero-restore-platform","14e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/aws/deploy-aws-eks",component:l("/docs/operator-guide/infrastructure-providers/aws/deploy-aws-eks","409"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/aws/ebs-csi-driver",component:l("/docs/operator-guide/infrastructure-providers/aws/ebs-csi-driver","699"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/aws/enable-irsa",component:l("/docs/operator-guide/infrastructure-providers/aws/enable-irsa","4e7"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/aws/kaniko-irsa",component:l("/docs/operator-guide/infrastructure-providers/aws/kaniko-irsa","7db"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/aws/waf-tf-configuration",component:l("/docs/operator-guide/infrastructure-providers/aws/waf-tf-configuration","2bb"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.10",component:l("/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.10","0b7"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.9",component:l("/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.9","1bc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/okd/ssl-automation-okd",component:l("/docs/operator-guide/infrastructure-providers/okd/ssl-automation-okd","a54"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/infrastructure-providers/overview",component:l("/docs/operator-guide/infrastructure-providers/overview","490"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/install-argocd",component:l("/docs/operator-guide/install-argocd","c93"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/install-ingress-nginx",component:l("/docs/operator-guide/install-ingress-nginx","831"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/install-kuberocketci",component:l("/docs/operator-guide/install-kuberocketci","64e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/install-tekton",component:l("/docs/operator-guide/install-tekton","28f"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/install-via-civo",component:l("/docs/operator-guide/install-via-civo","bba"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/installation-overview",component:l("/docs/operator-guide/installation-overview","777"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/kubernetes-cluster-settings",component:l("/docs/operator-guide/kubernetes-cluster-settings","c46"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/monitoring-and-observability/install-loki",component:l("/docs/operator-guide/monitoring-and-observability/install-loki","e96"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/monitoring-and-observability/kibana-ilm-rollover",component:l("/docs/operator-guide/monitoring-and-observability/kibana-ilm-rollover","edc"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/monitoring-and-observability/loki-irsa",component:l("/docs/operator-guide/monitoring-and-observability/loki-irsa","312"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/monitoring-and-observability/multitenant-logging",component:l("/docs/operator-guide/monitoring-and-observability/multitenant-logging","281"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/openshift-cluster-settings",component:l("/docs/operator-guide/openshift-cluster-settings","8ee"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/prerequisites",component:l("/docs/operator-guide/prerequisites","5a2"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/project-management-and-reporting/install-reportportal",component:l("/docs/operator-guide/project-management-and-reporting/install-reportportal","db5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/project-management-and-reporting/jira-integration",component:l("/docs/operator-guide/project-management-and-reporting/jira-integration","430"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/project-management-and-reporting/reportportal-keycloak",component:l("/docs/operator-guide/project-management-and-reporting/reportportal-keycloak","b91"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/project-management-and-reporting/reportportal-tekton",component:l("/docs/operator-guide/project-management-and-reporting/reportportal-tekton","830"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/secrets-management/external-secrets-operator-integration",component:l("/docs/operator-guide/secrets-management/external-secrets-operator-integration","372"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/secrets-management/install-external-secrets-operator",component:l("/docs/operator-guide/secrets-management/install-external-secrets-operator","5a4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/application-not-built",component:l("/docs/operator-guide/troubleshooting/application-not-built","8a2"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/invalid-codebase-name",component:l("/docs/operator-guide/troubleshooting/invalid-codebase-name","fb0"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/overview",component:l("/docs/operator-guide/troubleshooting/overview","f5c"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/resource-observability",component:l("/docs/operator-guide/troubleshooting/resource-observability","bad"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/troubleshoot-applications",component:l("/docs/operator-guide/troubleshooting/troubleshoot-applications","bb0"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/troubleshoot-container-registries",component:l("/docs/operator-guide/troubleshooting/troubleshoot-container-registries","cc4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/troubleshoot-git-server",component:l("/docs/operator-guide/troubleshooting/troubleshoot-git-server","731"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/troubleshooting/troubleshoot-stages",component:l("/docs/operator-guide/troubleshooting/troubleshoot-stages","760"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/uninstall-kuberocketci",component:l("/docs/operator-guide/uninstall-kuberocketci","6e5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton",component:l("/docs/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","87b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.0",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.0","56e"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.1",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.1","f95"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.2",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.2","bf6"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.3",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.3","e59"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.4",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.4","86b"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.5",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.5","e75"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.6",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.6","eff"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.7",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.7","ed0"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.8",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.8","775"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-edp-3.9",component:l("/docs/operator-guide/upgrade/upgrade-edp-3.9","2f5"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/operator-guide/upgrade/upgrade-keycloak-19.0",component:l("/docs/operator-guide/upgrade/upgrade-keycloak-19.0","5d4"),exact:!0,sidebar:"operatorGuideSidebar"},{path:"/docs/quick-start/create-application",component:l("/docs/quick-start/create-application","de9"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/deploy-application",component:l("/docs/quick-start/deploy-application","ce4"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/integrate-argocd",component:l("/docs/quick-start/integrate-argocd","5c3"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/integrate-container-registry",component:l("/docs/quick-start/integrate-container-registry","9be"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/integrate-github",component:l("/docs/quick-start/integrate-github","249"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/integrate-sonarcloud",component:l("/docs/quick-start/integrate-sonarcloud","86a"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/platform-installation",component:l("/docs/quick-start/platform-installation","efb"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/quick-start/quick-start-overview",component:l("/docs/quick-start/quick-start-overview","0be"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/supported-versions",component:l("/docs/supported-versions","ad1"),exact:!0,sidebar:"quickStartSidebar"},{path:"/docs/use-cases",component:l("/docs/use-cases","9a6"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/use-cases/application-scaffolding",component:l("/docs/use-cases/application-scaffolding","218"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/use-cases/autotest-as-quality-gate",component:l("/docs/use-cases/autotest-as-quality-gate","786"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/use-cases/external-secrets",component:l("/docs/use-cases/external-secrets","566"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/use-cases/tekton-custom-pipelines",component:l("/docs/use-cases/tekton-custom-pipelines","e90"),exact:!0,sidebar:"useCasesSidebar"},{path:"/docs/user-guide",component:l("/docs/user-guide","3eb"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-application",component:l("/docs/user-guide/add-application","32a"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-autotest",component:l("/docs/user-guide/add-autotest","033"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-cd-pipeline",component:l("/docs/user-guide/add-cd-pipeline","6b3"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-cluster",component:l("/docs/user-guide/add-cluster","d1a"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-git-server",component:l("/docs/user-guide/add-git-server","ddf"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-infrastructure",component:l("/docs/user-guide/add-infrastructure","5bb"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-library",component:l("/docs/user-guide/add-library","1b7"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-marketplace",component:l("/docs/user-guide/add-marketplace","d66"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/add-quality-gate",component:l("/docs/user-guide/add-quality-gate","039"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/application",component:l("/docs/user-guide/application","ab6"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/autotest",component:l("/docs/user-guide/autotest","6b4"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/build-pipeline",component:l("/docs/user-guide/build-pipeline","e78"),exact:!0},{path:"/docs/user-guide/cd-pipeline-details",component:l("/docs/user-guide/cd-pipeline-details","cdc"),exact:!0},{path:"/docs/user-guide/change-container-registry",component:l("/docs/user-guide/change-container-registry","c55"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/ci-pipeline-details",component:l("/docs/user-guide/ci-pipeline-details","95e"),exact:!0},{path:"/docs/user-guide/cluster",component:l("/docs/user-guide/cluster","ebf"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/code-review-pipeline",component:l("/docs/user-guide/code-review-pipeline","414"),exact:!0},{path:"/docs/user-guide/components",component:l("/docs/user-guide/components","683"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/configuration-overview",component:l("/docs/user-guide/configuration-overview","6ad"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/git-server-overview",component:l("/docs/user-guide/git-server-overview","731"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/gitops",component:l("/docs/user-guide/gitops","e21"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/infrastructure",component:l("/docs/user-guide/infrastructure","fdc"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/library",component:l("/docs/user-guide/library","f40"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/manage-branches",component:l("/docs/user-guide/manage-branches","ca0"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/manage-container-registries",component:l("/docs/user-guide/manage-container-registries","cbd"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/manage-environments",component:l("/docs/user-guide/manage-environments","6be"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/marketplace",component:l("/docs/user-guide/marketplace","28a"),exact:!0,sidebar:"userGuideSidebar"},{path:"/docs/user-guide/quick-links",component:l("/docs/user-guide/quick-links","7f7"),exact:!0,sidebar:"userGuideSidebar"}]}]}]},{path:"/",component:l("/","e5f"),exact:!0},{path:"*",component:l("*")}]},6125:(e,t,r)=>{"use strict";r.d(t,{o:()=>a,x:()=>i});var n=r(96540),o=r(74848);const a=n.createContext(!1);function i(e){let{children:t}=e;const[r,i]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:r,children:t})}},38536:(e,t,r)=>{"use strict";var n=r(96540),o=r(5338),a=r(80545),i=r(54625),s=r(4784),d=r(38193);const c=[r(31911),r(10119),r(26134),r(76294),r(51043)];var u=r(35947),l=r(56347),p=r(22831),g=r(74848);function f(e){let{children:t}=e;return(0,g.jsx)(g.Fragment,{children:t})}var m=r(5260),b=r(44586),h=r(86025),v=r(6342),y=r(69024),x=r(32131),k=r(14090),S=r(2967),w=r(70440),_=r(41463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:r}}=(0,b.A)(),n=(0,x.o)(),o=r[e].htmlLang,a=e=>e.replace("-","_");return(0,g.jsxs)(m.A,{children:[Object.entries(r).map((e=>{let[t,{htmlLang:r}]=e;return(0,g.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:r},t)})),(0,g.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,g.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(r).filter((e=>o!==e.htmlLang)).map((e=>(0,g.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:r}}=(0,b.A)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:r}}=(0,b.A)(),{pathname:n}=(0,l.zy)();return e+(0,w.applyTrailingSlash)((0,h.Ay)(n),{trailingSlash:r,baseUrl:t})}(),o=t?`${r}${t}`:n;return(0,g.jsxs)(m.A,{children:[(0,g.jsx)("meta",{property:"og:url",content:o}),(0,g.jsx)("link",{rel:"canonical",href:o})]})}function A(){const{i18n:{currentLocale:e}}=(0,b.A)(),{metadata:t,image:r}=(0,v.p)();return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(m.A,{children:[(0,g.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,g.jsx)("body",{className:k.w})]}),r&&(0,g.jsx)(y.be,{image:r}),(0,g.jsx)(C,{}),(0,g.jsx)(E,{}),(0,g.jsx)(_.A,{tag:S.Cy,locale:e}),(0,g.jsx)(m.A,{children:t.map(((e,t)=>(0,g.jsx)("meta",{...e},t)))})]})}const T=new Map;var j=r(6125),P=r(26988),N=r(205);function L(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{const n=t.default?.[e]??t[e];return n?.(...r)}));return()=>o.forEach((e=>e?.()))}const R=function(e){let{children:t,location:r,previousLocation:n}=e;return(0,N.A)((()=>{n!==r&&(!function(e){let{location:t,previousLocation:r}=e;if(!r)return;const n=t.pathname===r.pathname,o=t.hash===r.hash,a=t.search===r.search;if(n&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:r,previousLocation:n}),L("onRouteDidUpdate",{previousLocation:n,location:r}))}),[n,r]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends n.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=d.A.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const r=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:r}),O(r.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,g.jsx)(R,{previousLocation:this.previousLocation,location:t,children:(0,g.jsx)(l.qh,{location:t,render:()=>e})})}}const G=I,F="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container";function $(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,l.zy)());return(0,g.jsx)(G,{location:e,children:W})}function Y(){return(0,g.jsx)(U.A,{children:(0,g.jsx)(P.l,{children:(0,g.jsxs)(j.x,{children:[(0,g.jsxs)(f,{children:[(0,g.jsx)(q,{}),(0,g.jsx)(A,{}),(0,g.jsx)(B,{}),(0,g.jsx)(K,{})]}),(0,g.jsx)(V,{})]})})})}var Z=r(84054);const Q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,r)=>{if("undefined"==typeof document)return void r();const n=document.createElement("link");n.setAttribute("rel","prefetch"),n.setAttribute("href",e),n.onload=()=>t(),n.onerror=()=>r();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(n)}))}:function(e){return new Promise(((t,r)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.withCredentials=!0,n.onload=()=>{200===n.status?t():r()},n.send(null)}))};var X=r(86921);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,re={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[r]=e;return r.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=r.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),O(e))},ne=Object.freeze(re);function oe(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,g.jsx)(i.I9,{children:t}):(0,g.jsx)(i.Kd,{children:t})}const ae=Boolean(!0);if(d.A.canUseDOM){window.docusaurus=ne;const e=document.getElementById("__docusaurus"),t=(0,g.jsx)(a.vd,{children:(0,g.jsx)(oe,{children:(0,g.jsx)(Y,{})})}),r=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ae)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:r});else{const n=o.createRoot(e,{onRecoverableError:r});n.render(t),window.docusaurusRoot=n}};O(window.location.pathname).then((()=>{(0,n.startTransition)(i)}))}},26988:(e,t,r)=>{"use strict";r.d(t,{o:()=>l,l:()=>p});var n=r(96540),o=r(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":false,"path":"/docs/next","mainDocId":"about-platform","docs":[{"id":"about-platform","path":"/docs/next/about-platform","sidebar":"quickStartSidebar"},{"id":"api/cd-pipeline","path":"/docs/next/api/cd-pipeline","sidebar":"apiSidebar"},{"id":"api/codebase","path":"/docs/next/api/codebase","sidebar":"apiSidebar"},{"id":"api/keycloak","path":"/docs/next/api/keycloak","sidebar":"apiSidebar"},{"id":"api/nexus","path":"/docs/next/api/nexus","sidebar":"apiSidebar"},{"id":"api/overview","path":"/docs/next/api/overview","sidebar":"apiSidebar"},{"id":"api/sonarqube","path":"/docs/next/api/sonarqube","sidebar":"apiSidebar"},{"id":"basic-concepts","path":"/docs/next/basic-concepts","sidebar":"quickStartSidebar"},{"id":"compliance","path":"/docs/next/compliance","sidebar":"quickStartSidebar"},{"id":"developer-guide/annotations-and-labels","path":"/docs/next/developer-guide/annotations-and-labels","sidebar":"developerGuideSidebar"},{"id":"developer-guide/artifacts-verification","path":"/docs/next/developer-guide/artifacts-verification","sidebar":"developerGuideSidebar"},{"id":"developer-guide/autotest-coverage","path":"/docs/next/developer-guide/autotest-coverage","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-deployment-diagram","path":"/docs/next/developer-guide/aws-deployment-diagram","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-infrastructure-cost-estimation","path":"/docs/next/developer-guide/aws-infrastructure-cost-estimation","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-reference-architecture","path":"/docs/next/developer-guide/aws-reference-architecture","sidebar":"developerGuideSidebar"},{"id":"developer-guide/documentation-guide","path":"/docs/next/developer-guide/documentation-guide","sidebar":"developerGuideSidebar"},{"id":"developer-guide/edp-workflow","path":"/docs/next/developer-guide/edp-workflow","sidebar":"developerGuideSidebar"},{"id":"developer-guide/index","path":"/docs/next/developer-guide/","sidebar":"developerGuideSidebar"},{"id":"developer-guide/kubernetes-deployment","path":"/docs/next/developer-guide/kubernetes-deployment","sidebar":"developerGuideSidebar"},{"id":"developer-guide/local-development","path":"/docs/next/developer-guide/local-development","sidebar":"developerGuideSidebar"},{"id":"developer-guide/reference-architecture","path":"/docs/next/developer-guide/reference-architecture","sidebar":"developerGuideSidebar"},{"id":"developer-guide/reference-cicd-pipeline","path":"/docs/next/developer-guide/reference-cicd-pipeline","sidebar":"developerGuideSidebar"},{"id":"developer-guide/telemetry","path":"/docs/next/developer-guide/telemetry","sidebar":"developerGuideSidebar"},{"id":"faq/artifacts","path":"/docs/next/faq/artifacts","sidebar":"faqSidebar"},{"id":"faq/observability","path":"/docs/next/faq/observability","sidebar":"faqSidebar"},{"id":"glossary","path":"/docs/next/glossary","sidebar":"quickStartSidebar"},{"id":"operator-guide/add-ons-overview","path":"/docs/next/operator-guide/add-ons-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/capsule","path":"/docs/next/operator-guide/advanced-installation/capsule","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/custom-certificates","path":"/docs/next/operator-guide/advanced-installation/custom-certificates","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/overview","path":"/docs/next/operator-guide/advanced-installation/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-installation","path":"/docs/next/operator-guide/artifacts-management/harbor-installation","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-integration","path":"/docs/next/operator-guide/artifacts-management/harbor-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-oidc","path":"/docs/next/operator-guide/artifacts-management/harbor-oidc","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/nexus-sonatype","path":"/docs/next/operator-guide/artifacts-management/nexus-sonatype","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/package-registry","path":"/docs/next/operator-guide/artifacts-management/package-registry","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/configure-keycloak-oidc-eks","path":"/docs/next/operator-guide/auth/configure-keycloak-oidc-eks","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/eks-oidc-integration","path":"/docs/next/operator-guide/auth/eks-oidc-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/keycloak","path":"/docs/next/operator-guide/auth/keycloak","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/namespace-management","path":"/docs/next/operator-guide/auth/namespace-management","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/oauth2-proxy","path":"/docs/next/operator-guide/auth/oauth2-proxy","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/platform-auth-model","path":"/docs/next/operator-guide/auth/platform-auth-model","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/ui-portal-oidc","path":"/docs/next/operator-guide/auth/ui-portal-oidc","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/aws-marketplace-install","path":"/docs/next/operator-guide/aws-marketplace-install","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/cd/argocd-integration","path":"/docs/next/operator-guide/cd/argocd-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/cd/customize-deploy-pipeline","path":"/docs/next/operator-guide/cd/customize-deploy-pipeline","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/ci-pipeline-terraform","path":"/docs/next/operator-guide/ci/ci-pipeline-terraform","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/notification-msteams","path":"/docs/next/operator-guide/ci/notification-msteams","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/tekton-monitoring","path":"/docs/next/operator-guide/ci/tekton-monitoring","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/tekton-overview","path":"/docs/next/operator-guide/ci/tekton-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/code-quality/sonarqube","path":"/docs/next/operator-guide/code-quality/sonarqube","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/code-quality/sonarqube-visibility","path":"/docs/next/operator-guide/code-quality/sonarqube-visibility","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/defectdojo","path":"/docs/next/operator-guide/devsecops/defectdojo","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/dependency-track","path":"/docs/next/operator-guide/devsecops/dependency-track","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/overview","path":"/docs/next/operator-guide/devsecops/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/install-velero","path":"/docs/next/operator-guide/disaster-recovery/install-velero","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/velero-irsa","path":"/docs/next/operator-guide/disaster-recovery/velero-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/velero-restore-platform","path":"/docs/next/operator-guide/disaster-recovery/velero-restore-platform","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/index","path":"/docs/next/operator-guide/","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/deploy-aws-eks","path":"/docs/next/operator-guide/infrastructure-providers/aws/deploy-aws-eks","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/ebs-csi-driver","path":"/docs/next/operator-guide/infrastructure-providers/aws/ebs-csi-driver","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/enable-irsa","path":"/docs/next/operator-guide/infrastructure-providers/aws/enable-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/kaniko-irsa","path":"/docs/next/operator-guide/infrastructure-providers/aws/kaniko-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/waf-tf-configuration","path":"/docs/next/operator-guide/infrastructure-providers/aws/waf-tf-configuration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/deploy-okd-4.10","path":"/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.10","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/deploy-okd-4.9","path":"/docs/next/operator-guide/infrastructure-providers/okd/deploy-okd-4.9","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/ssl-automation-okd","path":"/docs/next/operator-guide/infrastructure-providers/okd/ssl-automation-okd","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/overview","path":"/docs/next/operator-guide/infrastructure-providers/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-argocd","path":"/docs/next/operator-guide/install-argocd","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-ingress-nginx","path":"/docs/next/operator-guide/install-ingress-nginx","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-kuberocketci","path":"/docs/next/operator-guide/install-kuberocketci","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-tekton","path":"/docs/next/operator-guide/install-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-via-civo","path":"/docs/next/operator-guide/install-via-civo","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/installation-overview","path":"/docs/next/operator-guide/installation-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/kubernetes-cluster-settings","path":"/docs/next/operator-guide/kubernetes-cluster-settings","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/install-loki","path":"/docs/next/operator-guide/monitoring-and-observability/install-loki","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/kibana-ilm-rollover","path":"/docs/next/operator-guide/monitoring-and-observability/kibana-ilm-rollover","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/loki-irsa","path":"/docs/next/operator-guide/monitoring-and-observability/loki-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/multitenant-logging","path":"/docs/next/operator-guide/monitoring-and-observability/multitenant-logging","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/openshift-cluster-settings","path":"/docs/next/operator-guide/openshift-cluster-settings","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/prerequisites","path":"/docs/next/operator-guide/prerequisites","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/install-reportportal","path":"/docs/next/operator-guide/project-management-and-reporting/install-reportportal","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/jira-integration","path":"/docs/next/operator-guide/project-management-and-reporting/jira-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/reportportal-keycloak","path":"/docs/next/operator-guide/project-management-and-reporting/reportportal-keycloak","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/reportportal-tekton","path":"/docs/next/operator-guide/project-management-and-reporting/reportportal-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/secrets-management/external-secrets-operator-integration","path":"/docs/next/operator-guide/secrets-management/external-secrets-operator-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/secrets-management/install-external-secrets-operator","path":"/docs/next/operator-guide/secrets-management/install-external-secrets-operator","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/application-not-built","path":"/docs/next/operator-guide/troubleshooting/application-not-built","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/invalid-codebase-name","path":"/docs/next/operator-guide/troubleshooting/invalid-codebase-name","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/overview","path":"/docs/next/operator-guide/troubleshooting/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/resource-observability","path":"/docs/next/operator-guide/troubleshooting/resource-observability","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-applications","path":"/docs/next/operator-guide/troubleshooting/troubleshoot-applications","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-container-registries","path":"/docs/next/operator-guide/troubleshooting/troubleshoot-container-registries","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-git-server","path":"/docs/next/operator-guide/troubleshooting/troubleshoot-git-server","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-stages","path":"/docs/next/operator-guide/troubleshooting/troubleshoot-stages","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/uninstall-kuberocketci","path":"/docs/next/operator-guide/uninstall-kuberocketci","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","path":"/docs/next/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.0","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.0","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.1","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.1","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.2","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.2","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.3","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.3","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.4","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.4","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.5","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.5","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.6","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.6","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.7","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.7","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.8","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.8","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.9","path":"/docs/next/operator-guide/upgrade/upgrade-edp-3.9","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-keycloak-19.0","path":"/docs/next/operator-guide/upgrade/upgrade-keycloak-19.0","sidebar":"operatorGuideSidebar"},{"id":"quick-start/create-application","path":"/docs/next/quick-start/create-application","sidebar":"quickStartSidebar"},{"id":"quick-start/deploy-application","path":"/docs/next/quick-start/deploy-application","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-argocd","path":"/docs/next/quick-start/integrate-argocd","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-container-registry","path":"/docs/next/quick-start/integrate-container-registry","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-github","path":"/docs/next/quick-start/integrate-github","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-sonarcloud","path":"/docs/next/quick-start/integrate-sonarcloud","sidebar":"quickStartSidebar"},{"id":"quick-start/platform-installation","path":"/docs/next/quick-start/platform-installation","sidebar":"quickStartSidebar"},{"id":"quick-start/quick-start-overview","path":"/docs/next/quick-start/quick-start-overview","sidebar":"quickStartSidebar"},{"id":"supported-versions","path":"/docs/next/supported-versions","sidebar":"quickStartSidebar"},{"id":"use-cases/application-scaffolding","path":"/docs/next/use-cases/application-scaffolding","sidebar":"useCasesSidebar"},{"id":"use-cases/autotest-as-quality-gate","path":"/docs/next/use-cases/autotest-as-quality-gate","sidebar":"useCasesSidebar"},{"id":"use-cases/external-secrets","path":"/docs/next/use-cases/external-secrets","sidebar":"useCasesSidebar"},{"id":"use-cases/index","path":"/docs/next/use-cases/","sidebar":"useCasesSidebar"},{"id":"use-cases/tekton-custom-pipelines","path":"/docs/next/use-cases/tekton-custom-pipelines","sidebar":"useCasesSidebar"},{"id":"user-guide/add-application","path":"/docs/next/user-guide/add-application","sidebar":"userGuideSidebar"},{"id":"user-guide/add-autotest","path":"/docs/next/user-guide/add-autotest","sidebar":"userGuideSidebar"},{"id":"user-guide/add-cd-pipeline","path":"/docs/next/user-guide/add-cd-pipeline","sidebar":"userGuideSidebar"},{"id":"user-guide/add-cluster","path":"/docs/next/user-guide/add-cluster","sidebar":"userGuideSidebar"},{"id":"user-guide/add-git-server","path":"/docs/next/user-guide/add-git-server","sidebar":"userGuideSidebar"},{"id":"user-guide/add-infrastructure","path":"/docs/next/user-guide/add-infrastructure","sidebar":"userGuideSidebar"},{"id":"user-guide/add-library","path":"/docs/next/user-guide/add-library","sidebar":"userGuideSidebar"},{"id":"user-guide/add-marketplace","path":"/docs/next/user-guide/add-marketplace","sidebar":"userGuideSidebar"},{"id":"user-guide/add-quality-gate","path":"/docs/next/user-guide/add-quality-gate","sidebar":"userGuideSidebar"},{"id":"user-guide/application","path":"/docs/next/user-guide/application","sidebar":"userGuideSidebar"},{"id":"user-guide/autotest","path":"/docs/next/user-guide/autotest","sidebar":"userGuideSidebar"},{"id":"user-guide/build-pipeline","path":"/docs/next/user-guide/build-pipeline"},{"id":"user-guide/cd-pipeline-details","path":"/docs/next/user-guide/cd-pipeline-details"},{"id":"user-guide/change-container-registry","path":"/docs/next/user-guide/change-container-registry","sidebar":"userGuideSidebar"},{"id":"user-guide/ci-pipeline-details","path":"/docs/next/user-guide/ci-pipeline-details"},{"id":"user-guide/cluster","path":"/docs/next/user-guide/cluster","sidebar":"userGuideSidebar"},{"id":"user-guide/code-review-pipeline","path":"/docs/next/user-guide/code-review-pipeline"},{"id":"user-guide/components","path":"/docs/next/user-guide/components","sidebar":"userGuideSidebar"},{"id":"user-guide/configuration-overview","path":"/docs/next/user-guide/configuration-overview","sidebar":"userGuideSidebar"},{"id":"user-guide/git-server-overview","path":"/docs/next/user-guide/git-server-overview","sidebar":"userGuideSidebar"},{"id":"user-guide/gitops","path":"/docs/next/user-guide/gitops","sidebar":"userGuideSidebar"},{"id":"user-guide/index","path":"/docs/next/user-guide/","sidebar":"userGuideSidebar"},{"id":"user-guide/infrastructure","path":"/docs/next/user-guide/infrastructure","sidebar":"userGuideSidebar"},{"id":"user-guide/library","path":"/docs/next/user-guide/library","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-branches","path":"/docs/next/user-guide/manage-branches","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-container-registries","path":"/docs/next/user-guide/manage-container-registries","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-environments","path":"/docs/next/user-guide/manage-environments","sidebar":"userGuideSidebar"},{"id":"user-guide/marketplace","path":"/docs/next/user-guide/marketplace","sidebar":"userGuideSidebar"},{"id":"user-guide/quick-links","path":"/docs/next/user-guide/quick-links","sidebar":"userGuideSidebar"}],"draftIds":[],"sidebars":{"quickStartSidebar":{"link":{"path":"/docs/next/about-platform","label":"about-platform"}},"operatorGuideSidebar":{"link":{"path":"/docs/next/operator-guide/","label":"operator-guide/index"}},"userGuideSidebar":{"link":{"path":"/docs/next/user-guide/","label":"user-guide/index"}},"developerGuideSidebar":{"link":{"path":"/docs/next/developer-guide/","label":"developer-guide/index"}},"useCasesSidebar":{"link":{"path":"/docs/next/use-cases/","label":"use-cases/index"}},"faqSidebar":{"link":{"path":"/docs/next/faq/artifacts","label":"Artifact Management"}},"apiSidebar":{"link":{"path":"/docs/next/api/overview","label":"api/overview"}}}},{"name":"3.9.0","label":"3.9.0","isLast":true,"path":"/docs","mainDocId":"about-platform","docs":[{"id":"about-platform","path":"/docs/about-platform","sidebar":"quickStartSidebar"},{"id":"api/cd-pipeline","path":"/docs/api/cd-pipeline","sidebar":"apiSidebar"},{"id":"api/codebase","path":"/docs/api/codebase","sidebar":"apiSidebar"},{"id":"api/keycloak","path":"/docs/api/keycloak","sidebar":"apiSidebar"},{"id":"api/nexus","path":"/docs/api/nexus","sidebar":"apiSidebar"},{"id":"api/overview","path":"/docs/api/overview","sidebar":"apiSidebar"},{"id":"api/sonarqube","path":"/docs/api/sonarqube","sidebar":"apiSidebar"},{"id":"basic-concepts","path":"/docs/basic-concepts","sidebar":"quickStartSidebar"},{"id":"compliance","path":"/docs/compliance","sidebar":"quickStartSidebar"},{"id":"developer-guide/annotations-and-labels","path":"/docs/developer-guide/annotations-and-labels","sidebar":"developerGuideSidebar"},{"id":"developer-guide/artifacts-verification","path":"/docs/developer-guide/artifacts-verification","sidebar":"developerGuideSidebar"},{"id":"developer-guide/autotest-coverage","path":"/docs/developer-guide/autotest-coverage","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-deployment-diagram","path":"/docs/developer-guide/aws-deployment-diagram","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-infrastructure-cost-estimation","path":"/docs/developer-guide/aws-infrastructure-cost-estimation","sidebar":"developerGuideSidebar"},{"id":"developer-guide/aws-reference-architecture","path":"/docs/developer-guide/aws-reference-architecture","sidebar":"developerGuideSidebar"},{"id":"developer-guide/documentation-guide","path":"/docs/developer-guide/documentation-guide","sidebar":"developerGuideSidebar"},{"id":"developer-guide/edp-workflow","path":"/docs/developer-guide/edp-workflow","sidebar":"developerGuideSidebar"},{"id":"developer-guide/index","path":"/docs/developer-guide/","sidebar":"developerGuideSidebar"},{"id":"developer-guide/kubernetes-deployment","path":"/docs/developer-guide/kubernetes-deployment","sidebar":"developerGuideSidebar"},{"id":"developer-guide/local-development","path":"/docs/developer-guide/local-development","sidebar":"developerGuideSidebar"},{"id":"developer-guide/reference-architecture","path":"/docs/developer-guide/reference-architecture","sidebar":"developerGuideSidebar"},{"id":"developer-guide/reference-cicd-pipeline","path":"/docs/developer-guide/reference-cicd-pipeline","sidebar":"developerGuideSidebar"},{"id":"developer-guide/telemetry","path":"/docs/developer-guide/telemetry","sidebar":"developerGuideSidebar"},{"id":"faq/artifacts","path":"/docs/faq/artifacts","sidebar":"faqSidebar"},{"id":"faq/observability","path":"/docs/faq/observability","sidebar":"faqSidebar"},{"id":"glossary","path":"/docs/glossary","sidebar":"quickStartSidebar"},{"id":"operator-guide/add-ons-overview","path":"/docs/operator-guide/add-ons-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/capsule","path":"/docs/operator-guide/advanced-installation/capsule","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/custom-certificates","path":"/docs/operator-guide/advanced-installation/custom-certificates","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/advanced-installation/overview","path":"/docs/operator-guide/advanced-installation/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-installation","path":"/docs/operator-guide/artifacts-management/harbor-installation","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-integration","path":"/docs/operator-guide/artifacts-management/harbor-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/harbor-oidc","path":"/docs/operator-guide/artifacts-management/harbor-oidc","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/nexus-sonatype","path":"/docs/operator-guide/artifacts-management/nexus-sonatype","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/artifacts-management/package-registry","path":"/docs/operator-guide/artifacts-management/package-registry","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/configure-keycloak-oidc-eks","path":"/docs/operator-guide/auth/configure-keycloak-oidc-eks","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/eks-oidc-integration","path":"/docs/operator-guide/auth/eks-oidc-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/keycloak","path":"/docs/operator-guide/auth/keycloak","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/namespace-management","path":"/docs/operator-guide/auth/namespace-management","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/oauth2-proxy","path":"/docs/operator-guide/auth/oauth2-proxy","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/platform-auth-model","path":"/docs/operator-guide/auth/platform-auth-model","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/auth/ui-portal-oidc","path":"/docs/operator-guide/auth/ui-portal-oidc","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/aws-marketplace-install","path":"/docs/operator-guide/aws-marketplace-install","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/cd/argocd-integration","path":"/docs/operator-guide/cd/argocd-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/cd/customize-deploy-pipeline","path":"/docs/operator-guide/cd/customize-deploy-pipeline","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/ci-pipeline-terraform","path":"/docs/operator-guide/ci/ci-pipeline-terraform","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/notification-msteams","path":"/docs/operator-guide/ci/notification-msteams","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/tekton-monitoring","path":"/docs/operator-guide/ci/tekton-monitoring","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/ci/tekton-overview","path":"/docs/operator-guide/ci/tekton-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/code-quality/sonarqube","path":"/docs/operator-guide/code-quality/sonarqube","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/code-quality/sonarqube-visibility","path":"/docs/operator-guide/code-quality/sonarqube-visibility","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/defectdojo","path":"/docs/operator-guide/devsecops/defectdojo","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/dependency-track","path":"/docs/operator-guide/devsecops/dependency-track","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/devsecops/overview","path":"/docs/operator-guide/devsecops/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/install-velero","path":"/docs/operator-guide/disaster-recovery/install-velero","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/velero-irsa","path":"/docs/operator-guide/disaster-recovery/velero-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/disaster-recovery/velero-restore-platform","path":"/docs/operator-guide/disaster-recovery/velero-restore-platform","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/index","path":"/docs/operator-guide/","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/deploy-aws-eks","path":"/docs/operator-guide/infrastructure-providers/aws/deploy-aws-eks","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/ebs-csi-driver","path":"/docs/operator-guide/infrastructure-providers/aws/ebs-csi-driver","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/enable-irsa","path":"/docs/operator-guide/infrastructure-providers/aws/enable-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/kaniko-irsa","path":"/docs/operator-guide/infrastructure-providers/aws/kaniko-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/aws/waf-tf-configuration","path":"/docs/operator-guide/infrastructure-providers/aws/waf-tf-configuration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/deploy-okd-4.10","path":"/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.10","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/deploy-okd-4.9","path":"/docs/operator-guide/infrastructure-providers/okd/deploy-okd-4.9","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/okd/ssl-automation-okd","path":"/docs/operator-guide/infrastructure-providers/okd/ssl-automation-okd","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/infrastructure-providers/overview","path":"/docs/operator-guide/infrastructure-providers/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-argocd","path":"/docs/operator-guide/install-argocd","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-ingress-nginx","path":"/docs/operator-guide/install-ingress-nginx","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-kuberocketci","path":"/docs/operator-guide/install-kuberocketci","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-tekton","path":"/docs/operator-guide/install-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/install-via-civo","path":"/docs/operator-guide/install-via-civo","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/installation-overview","path":"/docs/operator-guide/installation-overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/kubernetes-cluster-settings","path":"/docs/operator-guide/kubernetes-cluster-settings","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/install-loki","path":"/docs/operator-guide/monitoring-and-observability/install-loki","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/kibana-ilm-rollover","path":"/docs/operator-guide/monitoring-and-observability/kibana-ilm-rollover","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/loki-irsa","path":"/docs/operator-guide/monitoring-and-observability/loki-irsa","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/monitoring-and-observability/multitenant-logging","path":"/docs/operator-guide/monitoring-and-observability/multitenant-logging","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/openshift-cluster-settings","path":"/docs/operator-guide/openshift-cluster-settings","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/prerequisites","path":"/docs/operator-guide/prerequisites","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/install-reportportal","path":"/docs/operator-guide/project-management-and-reporting/install-reportportal","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/jira-integration","path":"/docs/operator-guide/project-management-and-reporting/jira-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/reportportal-keycloak","path":"/docs/operator-guide/project-management-and-reporting/reportportal-keycloak","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/project-management-and-reporting/reportportal-tekton","path":"/docs/operator-guide/project-management-and-reporting/reportportal-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/secrets-management/external-secrets-operator-integration","path":"/docs/operator-guide/secrets-management/external-secrets-operator-integration","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/secrets-management/install-external-secrets-operator","path":"/docs/operator-guide/secrets-management/install-external-secrets-operator","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/application-not-built","path":"/docs/operator-guide/troubleshooting/application-not-built","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/invalid-codebase-name","path":"/docs/operator-guide/troubleshooting/invalid-codebase-name","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/overview","path":"/docs/operator-guide/troubleshooting/overview","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/resource-observability","path":"/docs/operator-guide/troubleshooting/resource-observability","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-applications","path":"/docs/operator-guide/troubleshooting/troubleshoot-applications","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-container-registries","path":"/docs/operator-guide/troubleshooting/troubleshoot-container-registries","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-git-server","path":"/docs/operator-guide/troubleshooting/troubleshoot-git-server","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/troubleshooting/troubleshoot-stages","path":"/docs/operator-guide/troubleshooting/troubleshoot-stages","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/uninstall-kuberocketci","path":"/docs/operator-guide/uninstall-kuberocketci","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","path":"/docs/operator-guide/upgrade/migrate-ci-pipelines-from-jenkins-to-tekton","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.0","path":"/docs/operator-guide/upgrade/upgrade-edp-3.0","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.1","path":"/docs/operator-guide/upgrade/upgrade-edp-3.1","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.2","path":"/docs/operator-guide/upgrade/upgrade-edp-3.2","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.3","path":"/docs/operator-guide/upgrade/upgrade-edp-3.3","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.4","path":"/docs/operator-guide/upgrade/upgrade-edp-3.4","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.5","path":"/docs/operator-guide/upgrade/upgrade-edp-3.5","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.6","path":"/docs/operator-guide/upgrade/upgrade-edp-3.6","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.7","path":"/docs/operator-guide/upgrade/upgrade-edp-3.7","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.8","path":"/docs/operator-guide/upgrade/upgrade-edp-3.8","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-edp-3.9","path":"/docs/operator-guide/upgrade/upgrade-edp-3.9","sidebar":"operatorGuideSidebar"},{"id":"operator-guide/upgrade/upgrade-keycloak-19.0","path":"/docs/operator-guide/upgrade/upgrade-keycloak-19.0","sidebar":"operatorGuideSidebar"},{"id":"quick-start/create-application","path":"/docs/quick-start/create-application","sidebar":"quickStartSidebar"},{"id":"quick-start/deploy-application","path":"/docs/quick-start/deploy-application","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-argocd","path":"/docs/quick-start/integrate-argocd","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-container-registry","path":"/docs/quick-start/integrate-container-registry","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-github","path":"/docs/quick-start/integrate-github","sidebar":"quickStartSidebar"},{"id":"quick-start/integrate-sonarcloud","path":"/docs/quick-start/integrate-sonarcloud","sidebar":"quickStartSidebar"},{"id":"quick-start/platform-installation","path":"/docs/quick-start/platform-installation","sidebar":"quickStartSidebar"},{"id":"quick-start/quick-start-overview","path":"/docs/quick-start/quick-start-overview","sidebar":"quickStartSidebar"},{"id":"supported-versions","path":"/docs/supported-versions","sidebar":"quickStartSidebar"},{"id":"use-cases/application-scaffolding","path":"/docs/use-cases/application-scaffolding","sidebar":"useCasesSidebar"},{"id":"use-cases/autotest-as-quality-gate","path":"/docs/use-cases/autotest-as-quality-gate","sidebar":"useCasesSidebar"},{"id":"use-cases/external-secrets","path":"/docs/use-cases/external-secrets","sidebar":"useCasesSidebar"},{"id":"use-cases/index","path":"/docs/use-cases/","sidebar":"useCasesSidebar"},{"id":"use-cases/tekton-custom-pipelines","path":"/docs/use-cases/tekton-custom-pipelines","sidebar":"useCasesSidebar"},{"id":"user-guide/add-application","path":"/docs/user-guide/add-application","sidebar":"userGuideSidebar"},{"id":"user-guide/add-autotest","path":"/docs/user-guide/add-autotest","sidebar":"userGuideSidebar"},{"id":"user-guide/add-cd-pipeline","path":"/docs/user-guide/add-cd-pipeline","sidebar":"userGuideSidebar"},{"id":"user-guide/add-cluster","path":"/docs/user-guide/add-cluster","sidebar":"userGuideSidebar"},{"id":"user-guide/add-git-server","path":"/docs/user-guide/add-git-server","sidebar":"userGuideSidebar"},{"id":"user-guide/add-infrastructure","path":"/docs/user-guide/add-infrastructure","sidebar":"userGuideSidebar"},{"id":"user-guide/add-library","path":"/docs/user-guide/add-library","sidebar":"userGuideSidebar"},{"id":"user-guide/add-marketplace","path":"/docs/user-guide/add-marketplace","sidebar":"userGuideSidebar"},{"id":"user-guide/add-quality-gate","path":"/docs/user-guide/add-quality-gate","sidebar":"userGuideSidebar"},{"id":"user-guide/application","path":"/docs/user-guide/application","sidebar":"userGuideSidebar"},{"id":"user-guide/autotest","path":"/docs/user-guide/autotest","sidebar":"userGuideSidebar"},{"id":"user-guide/build-pipeline","path":"/docs/user-guide/build-pipeline"},{"id":"user-guide/cd-pipeline-details","path":"/docs/user-guide/cd-pipeline-details"},{"id":"user-guide/change-container-registry","path":"/docs/user-guide/change-container-registry","sidebar":"userGuideSidebar"},{"id":"user-guide/ci-pipeline-details","path":"/docs/user-guide/ci-pipeline-details"},{"id":"user-guide/cluster","path":"/docs/user-guide/cluster","sidebar":"userGuideSidebar"},{"id":"user-guide/code-review-pipeline","path":"/docs/user-guide/code-review-pipeline"},{"id":"user-guide/components","path":"/docs/user-guide/components","sidebar":"userGuideSidebar"},{"id":"user-guide/configuration-overview","path":"/docs/user-guide/configuration-overview","sidebar":"userGuideSidebar"},{"id":"user-guide/git-server-overview","path":"/docs/user-guide/git-server-overview","sidebar":"userGuideSidebar"},{"id":"user-guide/gitops","path":"/docs/user-guide/gitops","sidebar":"userGuideSidebar"},{"id":"user-guide/index","path":"/docs/user-guide/","sidebar":"userGuideSidebar"},{"id":"user-guide/infrastructure","path":"/docs/user-guide/infrastructure","sidebar":"userGuideSidebar"},{"id":"user-guide/library","path":"/docs/user-guide/library","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-branches","path":"/docs/user-guide/manage-branches","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-container-registries","path":"/docs/user-guide/manage-container-registries","sidebar":"userGuideSidebar"},{"id":"user-guide/manage-environments","path":"/docs/user-guide/manage-environments","sidebar":"userGuideSidebar"},{"id":"user-guide/marketplace","path":"/docs/user-guide/marketplace","sidebar":"userGuideSidebar"},{"id":"user-guide/quick-links","path":"/docs/user-guide/quick-links","sidebar":"userGuideSidebar"}],"draftIds":[],"sidebars":{"quickStartSidebar":{"link":{"path":"/docs/about-platform","label":"about-platform"}},"operatorGuideSidebar":{"link":{"path":"/docs/operator-guide/","label":"operator-guide/index"}},"userGuideSidebar":{"link":{"path":"/docs/user-guide/","label":"user-guide/index"}},"developerGuideSidebar":{"link":{"path":"/docs/developer-guide/","label":"developer-guide/index"}},"useCasesSidebar":{"link":{"path":"/docs/use-cases/","label":"use-cases/index"}},"faqSidebar":{"link":{"path":"/docs/faq/artifacts","label":"Artifact Management"}},"apiSidebar":{"link":{"path":"/docs/api/overview","label":"api/overview"}}}}],"breadcrumbs":true}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-4V1NZ8PQWG"],"anonymizeIP":false,"id":"default"}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=r(22654);const d=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.4.0"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.4.0"}}}');var c=r(74848);const u={siteConfig:o.default,siteMetadata:d,globalData:a,i18n:i,codeTranslations:s},l=n.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(l.Provider,{value:u,children:t})}},67489:(e,t,r)=>{"use strict";r.d(t,{A:()=>m});var n=r(96540),o=r(38193),a=r(5260),i=r(70440),s=r(44561),d=r(53102),c=r(74848);function u(e){let{error:t,tryAgain:r}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:r,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(l,{error:t})]})}function l(e){let{error:t}=e;const r=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:r})}function p(e){let{children:t}=e;return(0,c.jsx)(d.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function g(e){let{error:t,tryAgain:r}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:r}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:r})})]})})}const f=e=>(0,c.jsx)(g,{...e});class m extends n.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},38193:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const n="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:n,canUseEventListeners:n&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&"screen"in window}},5260:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);var n=r(80545),o=r(74848);function a(e){return(0,o.jsx)(n.mg,{...e})}},28774:(e,t,r)=>{"use strict";r.d(t,{A:()=>g});var n=r(96540),o=r(54625),a=r(70440),i=r(44586),s=r(16654),d=r(38193),c=r(63427),u=r(86025),l=r(74848);function p(e,t){let{isNavLink:r,to:p,href:g,activeClassName:f,isActive:m,"data-noBrokenLinkCheck":b,autoAddBaseUrl:h=!0,...v}=e;const{siteConfig:y}=(0,i.A)(),{trailingSlash:x,baseUrl:k}=y,S=y.future.experimental_router,{withBaseUrl:w}=(0,u.hH)(),_=(0,c.A)(),E=(0,n.useRef)(null);(0,n.useImperativeHandle)(t,(()=>E.current));const C=p||g;const A=(0,s.A)(C),T=C?.replace("pathname://","");let j=void 0!==T?(P=T,h&&(e=>e.startsWith("/"))(P)?w(P):P):void 0;var P;"hash"===S&&j?.startsWith("./")&&(j=j?.slice(1)),j&&A&&(j=(0,a.applyTrailingSlash)(j,{trailingSlash:x,baseUrl:k}));const N=(0,n.useRef)(!1),L=r?o.k2:o.N_,R=d.A.canUseIntersectionObserver,O=(0,n.useRef)(),I=()=>{N.current||null==j||(window.docusaurus.preload(j),N.current=!0)};(0,n.useEffect)((()=>(!R&&A&&null!=j&&window.docusaurus.prefetch(j),()=>{R&&O.current&&O.current.disconnect()})),[O,j,R,A]);const G=j?.startsWith("#")??!1,F=!v.target||"_self"===v.target,D=!j||!A||!F;return b||!G&&D||_.collectLink(j),v.id&&_.collectAnchor(v.id),D?(0,l.jsx)("a",{ref:E,href:j,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...v}):(0,l.jsx)(L,{...v,onMouseEnter:I,onTouchStart:I,innerRef:e=>{E.current=e,R&&e&&A&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),O.current.observe(e))},to:j,...r&&{isActive:m,activeClassName:f}})}const g=n.forwardRef(p)},21312:(e,t,r)=>{"use strict";r.d(t,{A:()=>c,T:()=>d});var n=r(96540),o=r(74848);function a(e,t){const r=e.split(/(\{\w+\})/).map(((e,r)=>{if(r%2==1){const r=t?.[e.slice(1,-1)];if(void 0!==r)return r}return e}));return r.some((e=>(0,n.isValidElement)(e)))?r.map(((e,t)=>(0,n.isValidElement)(e)?n.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):r.join("")}var i=r(22654);function s(e){let{id:t,message:r}=e;if(void 0===t&&void 0===r)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??r]??r??t}function d(e,t){let{message:r,id:n}=e;return a(s({message:r,id:n}),t)}function c(e){let{children:t,id:r,values:n}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:r});return(0,o.jsx)(o.Fragment,{children:a(i,n)})}},17065:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n="default"},16654:(e,t,r)=>{"use strict";function n(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!n(e)}r.d(t,{A:()=>o,z:()=>n})},86025:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>s,hH:()=>i});var n=r(96540),o=r(44586),a=r(16654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:r}=e,i=e.future.experimental_router,s=(0,n.useCallback)(((e,n)=>function(e){let{siteUrl:t,baseUrl:r,url:n,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!n||n.startsWith("#")||(0,a.z)(n))return n;if("hash"===s)return n.startsWith("/")?`.${n}`:`./${n}`;if(o)return r+n.replace(/^\//,"");if(n===r.replace(/\/$/,""))return r;const d=n.startsWith(r)?n:r+n.replace(/^\//,"");return i?t+d:d}({siteUrl:r,baseUrl:t,url:e,options:n,router:i})),[r,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:r}=i();return r(e,t)}},63427:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(96540);r(74848);const o=n.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,n.useContext)(o);function i(){return a()}},44586:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(96540),o=r(26988);function a(){return(0,n.useContext)(o.o)}},92303:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(96540),o=r(6125);function a(){return(0,n.useContext)(o.o)}},205:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(96540);const o=r(38193).A.canUseDOM?n.useLayoutEffect:n.useEffect},86921:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});const n=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(r,o){Object.entries(r).forEach((r=>{let[a,i]=r;const s=o?`${o}.${a}`:a;n(i)?e(i,s):t[s]=i}))}(e),t}},53102:(e,t,r)=>{"use strict";r.d(t,{W:()=>i,o:()=>a});var n=r(96540),o=r(74848);const a=n.createContext(null);function i(e){let{children:t,value:r}=e;const i=n.useContext(a),s=(0,n.useMemo)((()=>function(e){let{parent:t,value:r}=e;if(!t){if(!r)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in r))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return r}const n={...t.data,...r?.data};return{plugin:t.plugin,data:n}}({parent:i,value:r})),[i,r]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},44070:(e,t,r)=>{"use strict";r.d(t,{zK:()=>h,vT:()=>g,gk:()=>f,Gy:()=>l,HW:()=>v,ht:()=>p,r7:()=>b,jh:()=>m});var n=r(56347),o=r(44586),a=r(17065);function i(e,t){void 0===t&&(t={});const r=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!r&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return r}const s=e=>e.versions.find((e=>e.isLast));function d(e,t){const r=s(e);return[...e.versions.filter((e=>e!==r)),r].find((e=>!!(0,n.B6)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const r=d(e,t),o=r?.docs.find((e=>!!(0,n.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:r,activeDoc:o,alternateDocVersions:o?function(t){const r={};return e.versions.forEach((e=>{e.docs.forEach((n=>{n.id===t&&(r[e.name]=n)}))})),r}(o.id):{}}}const u={},l=()=>i("docusaurus-plugin-content-docs")??u,p=e=>{try{return function(e,t,r){void 0===t&&(t=a.W),void 0===r&&(r={});const n=i(e),o=n?.[t];if(!o&&r.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function g(e){void 0===e&&(e={});const t=l(),{pathname:r}=(0,n.zy)();return function(e,t,r){void 0===r&&(r={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,r]=e;return!!(0,n.B6)(t,{path:r.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&r.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,r,e)}function f(e){void 0===e&&(e={});const t=g(e),{pathname:r}=(0,n.zy)();if(!t)return;return{activePlugin:t,activeVersion:d(t.pluginData,r)}}function m(e){return p(e).versions}function b(e){const t=p(e);return s(t)}function h(e){const t=p(e),{pathname:r}=(0,n.zy)();return c(t,r)}function v(e){const t=p(e),{pathname:r}=(0,n.zy)();return function(e,t){const r=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[r.name],latestVersionSuggestion:r}}(t,r)}},31911:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>n});const n={onRouteDidUpdate(e){let{location:t,previousLocation:r}=e;!r||t.pathname===r.pathname&&t.search===r.search&&t.hash===r.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},76294:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>a});var n=r(5947),o=r.n(n);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:r}=e;if(r&&t.pathname!==r.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},26134:(e,t,r)=>{"use strict";r.r(t);var n=r(71765),o=r(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:n}=t;globalThis.Prism=e,n.forEach((e=>{"php"===e&&r(19700),r(54644)(`./prism-${e}`)})),delete globalThis.Prism}(n.My)},51107:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});r(96540);var n=r(34164),o=r(21312),a=r(6342),i=r(28774),s=r(63427);const d={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=r(74848);function u(e){let{as:t,id:r,...u}=e;const l=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!r)return(0,c.jsx)(t,{...u,id:void 0});l.collectAnchor(r);const g=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:r});return(0,c.jsxs)(t,{...u,className:(0,n.A)("anchor",p?d.anchorWithHideOnScrollNavbar:d.anchorWithStickyNavbar,u.className),id:r,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${r}`,"aria-label":g,title:g,children:"\u200b"})]})}},43186:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);const n={iconExternalLink:"iconExternalLink_nPIU"};var o=r(74848);function a(e){let{width:t=13.5,height:r=13.5}=e;return(0,o.jsx)("svg",{width:t,height:r,"aria-hidden":"true",viewBox:"0 0 24 24",className:n.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},44561:(e,t,r)=>{"use strict";r.d(t,{A:()=>jt});var n=r(96540),o=r(34164),a=r(67489),i=r(69024),s=r(56347),d=r(21312),c=r(75062),u=r(74848);const l="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function g(){const e=(0,n.useRef)(null),{action:t}=(0,s.W6)(),r=(0,n.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(l);t&&p(t)}),[]);return(0,c.$)((r=>{let{location:n}=r;e.current&&!n.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:r}}const f=(0,d.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??f,{containerRef:r,onClick:n}=g();return(0,u.jsx)("div",{ref:r,role:"region","aria-label":f,children:(0,u.jsx)("a",{...e,href:`#${l}`,onClick:n,children:t})})}var b=r(17559),h=r(14090);const v={skipToContent:"skipToContent_fXgn"};function y(){return(0,u.jsx)(m,{className:v.skipToContent})}var x=r(6342),k=r(65041);function S(e){let{width:t=21,height:r=21,color:n="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:r,...i,children:(0,u.jsx)("g",{stroke:n,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const w={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,d.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",w.closeButton,e.className),children:(0,u.jsx)(S,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,x.p)(),{content:r}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:r}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,x.p)(),{isActive:t,close:r}=(0,k.M)();if(!t)return null;const{backgroundColor:n,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:n,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(C,{className:A.announcementBarContent}),a&&(0,u.jsx)(_,{onClick:r,className:A.announcementBarClose})]})}var j=r(22069),P=r(23104);var N=r(89532),L=r(75600);const R=n.createContext(null);function O(e){let{children:t}=e;const r=function(){const e=(0,j.M)(),t=(0,L.YL)(),[r,o]=(0,n.useState)(!1),a=null!==t.component,i=(0,N.ZC)(a);return(0,n.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,n.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,n.useMemo)((()=>[r,o]),[r])}();return(0,u.jsx)(R.Provider,{value:r,children:t})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function G(){const e=(0,n.useContext)(R);if(!e)throw new N.dV("NavbarSecondaryMenuDisplayProvider");const[t,r]=e,o=(0,n.useCallback)((()=>r(!1)),[r]),a=(0,L.YL)();return(0,n.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:r,secondaryMenu:n}=e;const{shown:a}=G();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n})]})]})}var D=r(95293),M=r(92303);function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const B={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:r,value:n,onChange:a}=e;const i=(0,M.A)(),s=(0,d.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,d.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,d.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(B.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",B.toggleButton,!i&&B.toggleButtonDisabled,r),type:"button",onClick:()=>a("dark"===n?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)($,{className:(0,o.A)(B.toggleIcon,B.lightToggleIcon)}),(0,u.jsx)(z,{className:(0,o.A)(B.toggleIcon,B.darkToggleIcon)})]})})}const U=n.memo(q),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const r=(0,x.p)().navbar.style,n=(0,x.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,D.G)();return n?null:(0,u.jsx)(U,{className:t,buttonClassName:"dark"===r?H.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=r(23465);function K(){return(0,u.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,d.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(S,{color:"var(--ifm-color-emphasis-600)"})})}function Z(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(K,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(Y,{})]})}var Q=r(28774),X=r(86025),J=r(16654),ee=r(91252),te=r(43186);function re(e){let{activeBasePath:t,activeBaseRegex:r,to:n,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:d,...c}=e;const l=(0,X.Ay)(n),p=(0,X.Ay)(t),g=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),f=a&&o&&!(0,J.A)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,f&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Q.A,{href:d?g:o,...c,...m}):(0,u.jsx)(Q.A,{to:l,isNavLink:!0,...(t||r)&&{isActive:(e,t)=>r?(0,ee.G)(r,t.pathname):t.pathname.startsWith(p)},...c,...m})}function ne(e){let{className:t,isDropdownItem:r=!1,...n}=e;const a=(0,u.jsx)(re,{className:(0,o.A)(r?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:r,...n});return r?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:r,...n}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(re,{className:(0,o.A)("menu__link",t),...n})})}function ae(e){let{mobile:t=!1,position:r,...n}=e;const o=t?oe:ne;return(0,u.jsx)(o,{...n,activeClassName:n.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=r(41422),se=r(99169),de=r(44586);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!(0,ee.G)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function le(e){let{items:t,position:r,className:a,onClick:i,...s}=e;const d=(0,n.useRef)(null),[c,l]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{const e=e=>{d.current&&!d.current.contains(e.target)&&l(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[d]),(0,u.jsxs)("div",{ref:d,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===r,"dropdown--show":c}),children:[(0,u.jsx)(re,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),l(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,n.createElement)(He,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:r,position:a,onClick:i,...d}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,de.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),l=ue(t,c),{collapsed:p,toggleCollapsed:g,setCollapsed:f}=(0,ie.u)({initialState:()=>!l});return(0,n.useEffect)((()=>{l&&f(!l)}),[c,l,f]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(re,{role:"button",className:(0,o.A)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",r),...d,onClick:e=>{e.preventDefault(),g()},children:d.children??d.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,n.createElement)(He,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function ge(e){let{mobile:t=!1,...r}=e;const n=t?pe:le;return(0,u.jsx)(n,{...r})}var fe=r(32131);function me(e){let{width:t=20,height:r=20,...n}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:r,"aria-hidden":!0,...n,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const be="iconLanguage_nlXk";var he=r(40961);function ve(){return n.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},n.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ye=r(89188),xe=["translations"];function ke(){return ke=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ee="Ctrl";var Ce=n.forwardRef((function(e,t){var r=e.translations,o=void 0===r?{}:r,a=_e(e,xe),i=o.buttonText,s=void 0===i?"Search":i,d=o.buttonAriaLabel,c=void 0===d?"Search":d,u=Se((0,n.useState)(null),2),l=u[0],p=u[1];return(0,n.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Ee))}),[]),n.createElement("button",ke({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},a,{ref:t}),n.createElement("span",{className:"DocSearch-Button-Container"},n.createElement(ye.W,null),n.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),n.createElement("span",{className:"DocSearch-Button-Keys"},null!==l&&n.createElement(n.Fragment,null,n.createElement(Ae,{reactsToKey:l===Ee?Ee:"Meta"},l===Ee?n.createElement(ve,null):l),n.createElement(Ae,{reactsToKey:"k"},"K"))))}));function Ae(e){var t=e.reactsToKey,r=e.children,o=Se((0,n.useState)(!1),2),a=o[0],i=o[1];return(0,n.useEffect)((function(){if(t)return window.addEventListener("keydown",e),window.addEventListener("keyup",r),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",r)};function e(e){e.key===t&&i(!0)}function r(e){e.key!==t&&"Meta"!==e.key||i(!1)}}),[t]),n.createElement("kbd",{className:a?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},r)}var Te=r(5260),je=r(24255),Pe=r(51062),Ne=r(2967);const Le={button:{buttonText:(0,d.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,d.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,d.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,d.T)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,d.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,d.T)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,d.T)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,d.T)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,d.T)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,d.T)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,d.T)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,d.T)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,d.T)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,d.T)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,d.T)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,d.T)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,d.T)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,d.T)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,d.T)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,d.T)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,d.T)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,d.T)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,d.T)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,d.T)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,d.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,d.T)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,d.T)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Re=null;function Oe(e){let{hit:t,children:r}=e;return(0,u.jsx)(Q.A,{to:t.url,children:r})}function Ie(e){let{state:t,onClose:r}=e;const n=(0,je.w)();return(0,u.jsx)(Q.A,{to:n(t.query),onClick:r,children:(0,u.jsx)(d.A,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Ge(e){let{contextualSearch:t,externalUrlRegex:o,...a}=e;const{siteMetadata:i}=(0,de.A)(),d=(0,Pe.C)(),c=function(){const{locale:e,tags:t}=(0,Ne.af)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),l=a.searchParameters?.facetFilters??[],p=t?function(e,t){const r=e=>"string"==typeof e?[e]:e;return[...r(e),...r(t)]}(c,l):l,g={...a.searchParameters,facetFilters:p},f=(0,s.W6)(),m=(0,n.useRef)(null),b=(0,n.useRef)(null),[h,v]=(0,n.useState)(!1),[y,x]=(0,n.useState)(void 0),k=(0,n.useCallback)((()=>Re?Promise.resolve():Promise.all([r.e(9462).then(r.bind(r,9462)),Promise.all([r.e(1869),r.e(8913)]).then(r.bind(r,58913)),Promise.all([r.e(1869),r.e(416)]).then(r.bind(r,90416))]).then((e=>{let[{DocSearchModal:t}]=e;Re=t}))),[]),S=(0,n.useCallback)((()=>{if(!m.current){const e=document.createElement("div");m.current=e,document.body.insertBefore(e,document.body.firstChild)}}),[]),w=(0,n.useCallback)((()=>{S(),k().then((()=>v(!0)))}),[k,S]),_=(0,n.useCallback)((()=>{v(!1),b.current?.focus()}),[]),E=(0,n.useCallback)((e=>{e.preventDefault(),x(e.key),w()}),[w]),C=(0,n.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.G)(o,t)?window.location.href=t:f.push(t)}}).current,A=(0,n.useRef)((e=>a.transformItems?a.transformItems(e):e.map((e=>({...e,url:d(e.url)}))))).current,T=(0,n.useMemo)((()=>e=>(0,u.jsx)(Ie,{...e,onClose:_})),[_]),j=(0,n.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,r=e.onOpen,o=e.onClose,a=e.onInput,i=e.searchButtonRef;n.useEffect((function(){function e(e){var n;(27===e.keyCode&&t||"k"===(null===(n=e.key)||void 0===n?void 0:n.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,r=t.tagName;return t.isContentEditable||"INPUT"===r||"SELECT"===r||"TEXTAREA"===r}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?o():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||r()),i&&i.current===document.activeElement&&a&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&a(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,r,o,a,i])}({isOpen:h,onOpen:w,onClose:_,onInput:E,searchButtonRef:b}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te.A,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${a.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ce,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:w,ref:b,translations:Le.button}),h&&Re&&m.current&&(0,he.createPortal)((0,u.jsx)(Re,{onClose:_,initialScrollY:window.scrollY,initialQuery:y,navigator:C,transformItems:A,hitComponent:Oe,transformSearchClient:j,...a.searchPagePath&&{resultsFooterComponent:T},...a,searchParameters:g,placeholder:Le.placeholder,translations:Le.modal}),m.current)]})}function Fe(){const{siteConfig:e}=(0,de.A)();return(0,u.jsx)(Ge,{...e.themeConfig.algolia})}const De={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Me(e){let{children:t,className:r}=e;return(0,u.jsx)("div",{className:(0,o.A)(r,De.navbarSearchContainer),children:t})}var $e=r(44070),ze=r(84142);var Be=r(55597);const qe=e=>e.docs.find((t=>t.id===e.mainDocId));const Ue={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:r,dropdownItemsAfter:n,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:l}}=(0,de.A)(),p=(0,fe.o)(),{search:g,hash:f}=(0,s.zy)(),m=[...r,...c.map((e=>{const r=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${g}${f}${o}`;return{label:l[e].label,lang:l[e].htmlLang,to:r,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...n],b=t?(0,d.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):l[i].label;return(0,u.jsx)(ge,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:be}),b]}),items:m})},search:function(e){let{mobile:t,className:r}=e;return t?null:(0,u.jsx)(Me,{className:r,children:(0,u.jsx)(Fe,{})})},dropdown:ge,html:function(e){let{value:t,className:r,mobile:n=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!n&&!a,"menu__list-item":n},r),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:r,docsPluginId:n,...o}=e;const{activeDoc:a}=(0,$e.zK)(n),i=(0,ze.QB)(t,n),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:r??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:r,docsPluginId:n,...o}=e;const{activeDoc:a}=(0,$e.zK)(n),i=(0,ze.fW)(t,n).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:r??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:r,docsPluginId:n,...o}=e;const a=(0,ze.Vd)(n)[0],i=t??a.label,s=r??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:r,dropdownActiveClassDisabled:n,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:l}=(0,s.zy)(),p=(0,$e.zK)(r),g=(0,$e.jh)(r),{savePreferredVersionName:f}=(0,Be.g1)(r),m=[...o,...g.map((e=>{const t=p.alternateDocVersions[e.name]??qe(e);return{label:e.label,to:`${t.path}${c}${l}`,isActive:()=>e===p.activeVersion,onClick:()=>f(e.name)}})),...a],b=(0,ze.Vd)(r)[0],h=t&&m.length>1?(0,d.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&m.length>1?void 0:qe(b).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:h,to:v,isActive:n?()=>!1:void 0}):(0,u.jsx)(ge,{...i,mobile:t,label:h,to:v,items:m,isActive:n?()=>!1:void 0})}};function He(e){let{type:t,...r}=e;const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,r),o=Ue[n];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...r})}function Ve(){const e=(0,j.M)(),t=(0,x.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,r)=>(0,n.createElement)(He,{mobile:!0,...t,onClick:()=>e.toggle(),key:r})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(d.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ke(){const e=0===(0,x.p)().navbar.items.length,t=G();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function Ye(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,n.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Z,{}),primaryMenu:(0,u.jsx)(Ve,{}),secondaryMenu:(0,u.jsx)(Ke,{})}):null}const Ze={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Qe(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Xe(e){let{children:t}=e;const{navbar:{hideOnScroll:r,style:a}}=(0,x.p)(),i=(0,j.M)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,r]=(0,n.useState)(e),o=(0,n.useRef)(!1),a=(0,n.useRef)(0),i=(0,n.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,P.Mq)(((t,n)=>{let{scrollY:i}=t;if(!e)return;if(i=s?r(!1):i+c{if(!e)return;const n=t.location.hash;if(n?document.getElementById(n.substring(1)):void 0)return o.current=!0,void r(!1);r(!0)})),{navbarRef:i,isNavbarVisible:t}}(r);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,d.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",r&&[Ze.navbarHideable,!l&&Ze.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Qe,{onClick:i.toggle}),(0,u.jsx)(Ye,{})]})}var Je=r(12181);const et="right";function tt(e){let{width:t=30,height:r=30,className:n,...o}=e;return(0,u.jsx)("svg",{className:n,width:t,height:r,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function rt(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,d.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(tt,{})})}const nt={colorModeToggle:"colorModeToggle_DEke"};function ot(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Je.k2,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(He,{...e})},t)))})}function at(e){let{left:t,right:r}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:r})]})}function it(){const e=(0,j.M)(),t=(0,x.p)().navbar.items,[r,n]=function(e){function t(e){return"left"===(e.position??et)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(at,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(rt,{}),(0,u.jsx)(K,{}),(0,u.jsx)(ot,{items:r})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ot,{items:n}),(0,u.jsx)(V,{className:nt.colorModeToggle}),!o&&(0,u.jsx)(Me,{children:(0,u.jsx)(Fe,{})})]})})}function st(){return(0,u.jsx)(Xe,{children:(0,u.jsx)(it,{})})}function dt(e){let{item:t}=e;const{to:r,href:n,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Ay)(r),d=(0,X.Ay)(n,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.A,{className:"footer__link-item",...n?{href:a?d:n}:{to:s},...i,children:[o,n&&!(0,J.A)(n)&&(0,u.jsx)(te.A,{})]})}function ct(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(dt,{item:t})},t.href??t.to)}function ut(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ct,{item:e},t)))})]})}function lt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ut,{column:e},t)))})}function pt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function gt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(dt,{item:t})}function ft(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,r)=>(0,u.jsxs)(n.Fragment,{children:[(0,u.jsx)(gt,{item:e}),t.length!==r+1&&(0,u.jsx)(pt,{})]},r)))})})}function mt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(lt,{columns:t}):(0,u.jsx)(ft,{links:t})}var bt=r(21122);const ht={footerLogoLink:"footerLogoLink_BH7S"};function vt(e){let{logo:t}=e;const{withBaseUrl:r}=(0,X.hH)(),n={light:r(t.src),dark:r(t.srcDark??t.src)};return(0,u.jsx)(bt.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:n,width:t.width,height:t.height,style:t.style})}function yt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.A,{href:t.href,className:ht.footerLogoLink,target:t.target,children:(0,u.jsx)(vt,{logo:t})}):(0,u.jsx)(vt,{logo:t})}function xt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function kt(e){let{style:t,links:r,logo:n,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[r,(n||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:n}),a]})]})})}function St(){const{footer:e}=(0,x.p)();if(!e)return null;const{copyright:t,links:r,logo:n,style:o}=e;return(0,u.jsx)(kt,{style:o,links:r&&r.length>0&&(0,u.jsx)(mt,{links:r}),logo:n&&(0,u.jsx)(yt,{logo:n}),copyright:t&&(0,u.jsx)(xt,{copyright:t})})}const wt=n.memo(St),_t=(0,N.fM)([D.a,k.o,P.Tv,Be.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(L.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(O,{children:t})})})}]);function Et(e){let{children:t}=e;return(0,u.jsx)(_t,{children:t})}var Ct=r(51107);function At(e){let{error:t,tryAgain:r}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Ct.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(d.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Je.a2,{onClick:r,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Je.bq,{error:t})})]})})})}const Tt={mainWrapper:"mainWrapper_z2l0"};function jt(e){const{children:t,noFooter:r,wrapperClassName:n,title:s,description:d}=e;return(0,h.J)(),(0,u.jsxs)(Et,{children:[(0,u.jsx)(i.be,{title:s,description:d}),(0,u.jsx)(y,{}),(0,u.jsx)(T,{}),(0,u.jsx)(st,{}),(0,u.jsx)("div",{id:l,className:(0,o.A)(b.G.wrapper.main,Tt.mainWrapper,n),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(At,{...e}),children:t})}),!r&&(0,u.jsx)(wt,{})]})}},23465:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});r(96540);var n=r(28774),o=r(86025),a=r(44586),i=r(6342),s=r(21122),d=r(74848);function c(e){let{logo:t,alt:r,imageClassName:n}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,d.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:r,style:t.style});return n?(0,d.jsx)("div",{className:n,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:r,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:l,...p}=e,g=(0,o.Ay)(s?.href||"/"),f=r?"":t,m=s?.alt??f;return(0,d.jsxs)(n.A,{to:g,...p,...s?.target&&{target:s.target},children:[s&&(0,d.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=r&&(0,d.jsx)("b",{className:l,children:r})]})}},41463:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});r(96540);var n=r(5260),o=r(74848);function a(e){let{locale:t,version:r,tag:a}=e;const i=t;return(0,o.jsxs)(n.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),r&&(0,o.jsx)("meta",{name:"docusaurus_version",content:r}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),r&&(0,o.jsx)("meta",{name:"docsearch:version",content:r}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},21122:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var n=r(96540),o=r(34164),a=r(92303),i=r(95293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var d=r(74848);function c(e){let{className:t,children:r}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,d.jsx)(d.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=r({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,d.jsx)(n.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:r,alt:n,...o}=e;return(0,d.jsx)(c,{className:r,children:e=>{let{theme:r,className:a}=e;return(0,d.jsx)("img",{src:t[r],alt:n,className:a,...o})}})}},41422:(e,t,r)=>{"use strict";r.d(t,{N:()=>h,u:()=>c});var n=r(96540),o=r(38193),a=r(205),i=r(53109),s=r(74848);const d="ease-in-out";function c(e){let{initialState:t}=e;const[r,o]=(0,n.useState)(t??!1),a=(0,n.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:r,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},l={display:"block",overflow:"visible",height:"auto"};function p(e,t){const r=t?u:l;e.style.display=r.display,e.style.overflow=r.overflow,e.style.height=r.height}function g(e){let{collapsibleRef:t,collapsed:r,animation:o}=e;const a=(0,n.useRef)(!1);(0,n.useEffect)((()=>{const e=t.current;function n(){const t=e.scrollHeight,r=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${r}ms ${o?.easing??d}`,height:`${t}px`}}function s(){const t=n();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,r),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{r?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,r,o])}function f(e){if(!o.A.canUseDOM)return e?u:l}function m(e){let{as:t="div",collapsed:r,children:o,animation:a,onCollapseTransitionEnd:i,className:d,disableSSRStyle:c}=e;const u=(0,n.useRef)(null);return g({collapsibleRef:u,collapsed:r,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:f(r),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,r),i?.(r))},className:d,children:o})}function b(e){let{collapsed:t,...r}=e;const[o,i]=(0,n.useState)(!t),[d,c]=(0,n.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...r,collapsed:d}):null}function h(e){let{lazy:t,...r}=e;const n=t?b:m;return(0,s.jsx)(n,{...r})}},65041:(e,t,r)=>{"use strict";r.d(t,{M:()=>m,o:()=>f});var n=r(96540),o=r(92303),a=r(70679),i=r(89532),s=r(6342),d=r(74848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),l=()=>"true"===c.get(),p=e=>c.set(String(e)),g=n.createContext(null);function f(e){let{children:t}=e;const r=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[r,a]=(0,n.useState)((()=>!!t&&l()));(0,n.useEffect)((()=>{a(l())}),[]);const i=(0,n.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,n.useEffect)((()=>{if(!e)return;const{id:t}=e;let r=u.get();"annoucement-bar"===r&&(r="announcement-bar");const n=t!==r;u.set(t),n&&p(!1),!n&&l()||a(!1)}),[e]),(0,n.useMemo)((()=>({isActive:!!e&&!r,close:i})),[e,r,i])}();return(0,d.jsx)(g.Provider,{value:r,children:t})}function m(){const e=(0,n.useContext)(g);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},95293:(e,t,r)=>{"use strict";r.d(t,{G:()=>h,a:()=>b});var n=r(96540),o=r(38193),a=r(89532),i=r(70679),s=r(6342),d=r(74848);const c=n.createContext(void 0),u="theme",l=(0,i.Wf)(u),p={light:"light",dark:"dark"},g=e=>e===p.dark?p.dark:p.light,f=e=>o.A.canUseDOM?g(document.documentElement.getAttribute("data-theme")):g(e),m=e=>{l.set(g(e))};function b(e){let{children:t}=e;const r=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:r}}=(0,s.p)(),[o,a]=(0,n.useState)(f(e));(0,n.useEffect)((()=>{t&&l.del()}),[t]);const i=(0,n.useCallback)((function(t,n){void 0===n&&(n={});const{persist:o=!0}=n;t?(a(t),o&&m(t)):(a(r?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),l.del())}),[r,e]);(0,n.useEffect)((()=>{document.documentElement.setAttribute("data-theme",g(o))}),[o]),(0,n.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=l.get();null!==t&&i(g(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const d=(0,n.useRef)(!1);return(0,n.useEffect)((()=>{if(t&&!r)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{window.matchMedia("print").matches||d.current?d.current=window.matchMedia("print").matches:i(null)};return e.addListener(n),()=>e.removeListener(n)}),[i,t,r]),(0,n.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,d.jsx)(c.Provider,{value:r,children:t})}function h(){const e=(0,n.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},55597:(e,t,r)=>{"use strict";r.d(t,{VQ:()=>h,XK:()=>x,g1:()=>y});var n=r(96540),o=r(44070),a=r(17065),i=r(6342),s=r(84142),d=r(89532),c=r(70679),u=r(74848);const l=e=>`docs-preferred-version-${e}`,p={save:(e,t,r)=>{(0,c.Wf)(l(e),{persistence:t}).set(r)},read:(e,t)=>(0,c.Wf)(l(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.Wf)(l(e),{persistence:t}).del()}},g=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=n.createContext(null);function m(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,r=(0,n.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,n.useState)((()=>g(r)));(0,n.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:r,allDocsData:n}=e;function o(e){const t=p.read(e,r);return n[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,r),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:r}))}),[e,t,r]);return[a,(0,n.useMemo)((()=>({savePreferredVersion:function(e,r){p.save(e,t,r),s((t=>({...t,[e]:{preferredVersionName:r}})))}})),[t])]}function b(e){let{children:t}=e;const r=m();return(0,u.jsx)(f.Provider,{value:r,children:t})}function h(e){let{children:t}=e;return s.C5?(0,u.jsx)(b,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function v(){const e=(0,n.useContext)(f);if(!e)throw new d.dV("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[r,i]=v(),{preferredVersionName:s}=r[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,n.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function x(){const e=(0,o.Gy)(),[t]=v();function r(r){const n=e[r],{preferredVersionName:o}=t[r];return n.versions.find((e=>e.name===o))??null}const n=Object.keys(e);return Object.fromEntries(n.map((e=>[e,r(e)])))}},26588:(e,t,r)=>{"use strict";r.d(t,{V:()=>d,t:()=>c});var n=r(96540),o=r(89532),a=r(74848);const i=Symbol("EmptyContext"),s=n.createContext(i);function d(e){let{children:t,name:r,items:o}=e;const i=(0,n.useMemo)((()=>r&&o?{name:r,items:o}:null),[r,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,n.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},32252:(e,t,r)=>{"use strict";r.d(t,{n:()=>s,r:()=>d});var n=r(96540),o=r(89532),a=r(74848);const i=n.createContext(null);function s(e){let{children:t,version:r}=e;return(0,a.jsx)(i.Provider,{value:r,children:t})}function d(){const e=(0,n.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},22069:(e,t,r)=>{"use strict";r.d(t,{M:()=>g,e:()=>p});var n=r(96540),o=r(75600),a=r(24581),i=r(57485),s=r(6342),d=r(89532),c=r(74848);const u=n.createContext(void 0);function l(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),r=!e&&"mobile"===t,[d,c]=(0,n.useState)(!1);(0,i.$Z)((()=>{if(d)return c(!1),!1}));const u=(0,n.useCallback)((()=>{c((e=>!e))}),[]);return(0,n.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,n.useMemo)((()=>({disabled:e,shouldRender:r,toggle:u,shown:d})),[e,r,u,d])}function p(e){let{children:t}=e;const r=l();return(0,c.jsx)(u.Provider,{value:r,children:t})}function g(){const e=n.useContext(u);if(void 0===e)throw new d.dV("NavbarMobileSidebarProvider");return e}},75600:(e,t,r)=>{"use strict";r.d(t,{GX:()=>c,YL:()=>d,y_:()=>s});var n=r(96540),o=r(89532),a=r(74848);const i=n.createContext(null);function s(e){let{children:t}=e;const r=(0,n.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:r,children:t})}function d(){const e=(0,n.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:r}=e;const a=(0,n.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,d=(0,o.Be)(r);return(0,n.useEffect)((()=>{s({component:t,props:d})}),[s,t,d]),(0,n.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},14090:(e,t,r)=>{"use strict";r.d(t,{w:()=>o,J:()=>a});var n=r(96540);const o="navigation-with-keyboard";function a(){(0,n.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},24255:(e,t,r)=>{"use strict";r.d(t,{b:()=>s,w:()=>d});var n=r(96540),o=r(44586),a=r(57485);const i="q";function s(){return(0,a.l)(i)}function d(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,o.A)(),{algolia:{searchPagePath:r}}=t;return(0,n.useCallback)((t=>`${e}${r}?${i}=${encodeURIComponent(t)}`),[e,r])}},24581:(e,t,r)=>{"use strict";r.d(t,{l:()=>s});var n=r(96540),o=r(38193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[r,s]=(0,n.useState)((()=>"ssr"));return(0,n.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),r}},17559:(e,t,r)=>{"use strict";r.d(t,{G:()=>n});const n={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},53109:(e,t,r)=>{"use strict";function n(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}r.d(t,{O:()=>n})},84142:(e,t,r)=>{"use strict";r.d(t,{B5:()=>_,C5:()=>p,Nr:()=>g,OF:()=>x,QB:()=>w,Vd:()=>k,Y:()=>v,fW:()=>S,w8:()=>b});var n=r(96540),o=r(56347),a=r(22831),i=r(44070),s=r(55597),d=r(32252),c=r(26588),u=r(31682),l=r(99169);const p=!!i.Gy;function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}const f=(e,t)=>void 0!==e&&(0,l.ys)(e,t),m=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function h(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>h(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function v(e,t){return(0,n.useMemo)((()=>e.filter((e=>h(e,t)))),[e,t])}function y(e){let{sidebarItems:t,pathname:r,onlyCategories:n=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,l.ys)(a.href,r)||e(a.items))||"link"===a.type&&(0,l.ys)(a.href,r)){return n&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function x(){const e=(0,c.t)(),{pathname:t}=(0,o.zy)(),r=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==r&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:r}=(0,s.g1)(e),o=(0,i.r7)(e);return(0,n.useMemo)((()=>(0,u.s)([t,r,o].filter(Boolean))),[t,r,o])}function S(e,t){const r=k(t);return(0,n.useMemo)((()=>{const t=r.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),n=t.find((t=>t[0]===e));if(!n)throw new Error(`Can't find any sidebar with id "${e}" in version${r.length>1?"s":""} ${r.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return n[1]}),[e,r])}function w(e,t){const r=k(t);return(0,n.useMemo)((()=>{const t=r.flatMap((e=>e.docs)),n=t.find((t=>t.id===e));if(!n){if(r.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${r.length>1?"s":""} "${r.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.s)(t.map((e=>e.id))).join("\n- ")}`)}return n}),[e,r])}function _(e){let{route:t}=e;const r=(0,o.zy)(),n=(0,d.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(r.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?n.docsSidebars[c]:void 0;return{docElement:(0,a.v)(i),sidebarName:c,sidebarItems:u}}},12181:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,MN:()=>c,a2:()=>d,k2:()=>l});var n=r(96540),o=r(21312),a=r(70440);const i={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var s=r(74848);function d(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(o.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:r}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(d,{onClick:r})]})}function u(e){let{error:t}=e;const r=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:r})}class l extends n.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},20481:(e,t,r)=>{"use strict";r.d(t,{s:()=>o});var n=r(44586);function o(e){const{siteConfig:t}=(0,n.A)(),{title:r,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${r}`:r}},57485:(e,t,r)=>{"use strict";r.d(t,{$Z:()=>i,aZ:()=>d,l:()=>c});var n=r(96540),o=r(56347),a=r(89532);function i(e){!function(e){const t=(0,o.W6)(),r=(0,a._q)(e);(0,n.useEffect)((()=>t.block(((e,t)=>r(e,t)))),[t,r])}(((t,r)=>{if("POP"===r)return e(t,r)}))}function s(e){const t=(0,o.W6)();return(0,n.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function d(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){const t=d(e)??"",r=function(e){const t=(0,o.W6)();return(0,n.useCallback)(((r,n)=>{const o=new URLSearchParams(t.location.search);r?o.set(e,r):o.delete(e),(n?.push?t.push:t.replace)({search:o.toString()})}),[e,t])}(e);return[t,r]}},31682:(e,t,r)=>{"use strict";function n(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((r,n)=>e.findIndex((e=>t(e,r)))!==n))}function o(e){return Array.from(new Set(e))}r.d(t,{X:()=>n,s:()=>o})},69024:(e,t,r)=>{"use strict";r.d(t,{e3:()=>g,be:()=>l,Jx:()=>f});var n=r(96540),o=r(34164),a=r(5260),i=r(53102);function s(){const e=n.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var d=r(86025),c=r(20481),u=r(74848);function l(e){let{title:t,description:r,keywords:n,image:o,children:i}=e;const s=(0,c.s)(t),{withBaseUrl:l}=(0,d.hH)(),p=o?l(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.A,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),r&&(0,u.jsx)("meta",{name:"description",content:r}),r&&(0,u.jsx)("meta",{property:"og:description",content:r}),n&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(n)?n.join(","):n}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=n.createContext(void 0);function g(e){let{className:t,children:r}=e;const i=n.useContext(p),s=(0,o.A)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("html",{className:s})}),r]})}function f(e){let{children:t}=e;const r=s(),n=`plugin-${r.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${r.plugin.id}`;return(0,u.jsx)(g,{className:(0,o.A)(n,a),children:t})}},89532:(e,t,r)=>{"use strict";r.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>d,fM:()=>u});var n=r(96540),o=r(205),a=r(74848);function i(e){const t=(0,n.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,n.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,n.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class d extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,n.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:r}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),r)})}}},91252:(e,t,r)=>{"use strict";function n(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}r.d(t,{G:()=>n})},99169:(e,t,r)=>{"use strict";r.d(t,{Dt:()=>s,ys:()=>i});var n=r(96540),o=r(35947),a=r(44586);function i(e,t){const r=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return r(e)===r(t)}function s(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,n.useMemo)((()=>function(e){let{baseUrl:t,routes:r}=e;function n(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(o).flatMap((e=>e.routes??[])))}(r)}({routes:o.A,baseUrl:e})),[e])}},23104:(e,t,r)=>{"use strict";r.d(t,{Mq:()=>g,Tv:()=>u,a_:()=>f,gk:()=>m});var n=r(96540),o=r(38193),a=r(92303),i=r(205),s=r(89532),d=r(74848);const c=n.createContext(void 0);function u(e){let{children:t}=e;const r=function(){const e=(0,n.useRef)(!0);return(0,n.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,d.jsx)(c.Provider,{value:r,children:t})}function l(){const e=(0,n.useContext)(c);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const p=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function g(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:r}=l(),o=(0,n.useRef)(p()),a=(0,s._q)(e);(0,n.useEffect)((()=>{const e=()=>{if(!r.current)return;const e=p();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,r,...t])}function f(){const e=l(),t=function(){const e=(0,n.useRef)({elem:null,top:0}),t=(0,n.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),r=(0,n.useCallback)((()=>{const{current:{elem:t,top:r}}=e;if(!t)return{restored:!1};const n=t.getBoundingClientRect().top-r;return n&&window.scrollBy({left:0,top:n}),e.current={elem:null,top:0},{restored:0!==n}}),[]);return(0,n.useMemo)((()=>({save:t,restore:r})),[r,t])}(),r=(0,n.useRef)(void 0),o=(0,n.useCallback)((n=>{t.save(n),e.disableScrollEvents(),r.current=()=>{const{restored:n}=t.restore();if(r.current=void 0,n){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>r.current?.()))})),{blockElementScrollPositionUntilNextRender:o}}function m(){const e=(0,n.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:r=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(r):function(e){let t=null;const r=document.documentElement.scrollTop>e;return function n(){const o=document.documentElement.scrollTop;(r&&o>e||!r&&ot&&cancelAnimationFrame(t)}(r)},cancelScroll:()=>e.current?.()}}},2967:(e,t,r)=>{"use strict";r.d(t,{Cy:()=>i,af:()=>d,tU:()=>s});var n=r(44070),o=r(44586),a=r(55597);const i="default";function s(e,t){return`docs-${e}-${t}`}function d(){const{i18n:e}=(0,o.A)(),t=(0,n.Gy)(),r=(0,n.gk)(),d=(0,a.XK)();const c=[i,...Object.keys(t).map((function(e){const n=r?.activePlugin.pluginId===e?r.activeVersion:void 0,o=d[e],a=t[e].versions.find((e=>e.isLast));return s(e,(n??o??a).name)}))];return{locale:e.currentLocale,tags:c}}},70679:(e,t,r)=>{"use strict";r.d(t,{Wf:()=>u,Dv:()=>l});var n=r(96540);const o=JSON.parse('{"N":"localStorage","M":""}'),a=o.N;function i(e){let{key:t,oldValue:r,newValue:n,storage:o}=e;if(r===n)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,r,n,window.location.href,o),window.dispatchEvent(a)}function s(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(r){return t=r,d||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),d=!0),null}var t}let d=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const r=`${e}${o.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(r);const n=s(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(r)}catch(e){return console.error(`Docusaurus storage error, can't get key=${r}`,e),null}},set:e=>{try{const t=n.getItem(r);n.setItem(r,e),i({key:r,oldValue:t,newValue:e,storage:n})}catch(t){console.error(`Docusaurus storage error, can't set ${r}=${e}`,t)}},del:()=>{try{const e=n.getItem(r);n.removeItem(r),i({key:r,oldValue:e,newValue:null,storage:n})}catch(e){console.error(`Docusaurus storage error, can't delete key=${r}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===n&&t.key===r&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${r}`,t),()=>{}}}}}function l(e,t){const r=(0,n.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,n.useCallback)((e=>"undefined"==typeof window?()=>{}:r.listen(e)),[r]);return[(0,n.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:r.get()),(()=>null)),r]}},32131:(e,t,r)=>{"use strict";r.d(t,{o:()=>i});var n=r(44586),o=r(56347),a=r(70440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:r},i18n:{defaultLocale:i,currentLocale:s}}=(0,n.A)(),{pathname:d}=(0,o.zy)(),c=(0,a.applyTrailingSlash)(d,{trailingSlash:r,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),l=c.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:n}=e;return`${n?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(r)}${l}`}}}},75062:(e,t,r)=>{"use strict";r.d(t,{$:()=>i});var n=r(96540),o=r(56347),a=r(89532);function i(e){const t=(0,o.zy)(),r=(0,a.ZC)(t),i=(0,a._q)(e);(0,n.useEffect)((()=>{r&&t!==r&&i({location:t,previousLocation:r})}),[i,t,r])}},6342:(e,t,r)=>{"use strict";r.d(t,{p:()=>o});var n=r(44586);function o(){return(0,n.A)().siteConfig.themeConfig}},38126:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(44586);function o(){const{siteConfig:{themeConfig:e}}=(0,n.A)();return e}},51062:(e,t,r)=>{"use strict";r.d(t,{C:()=>s});var n=r(96540),o=r(91252),a=r(86025),i=r(38126);function s(){const{withBaseUrl:e}=(0,a.hH)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:r}}=(0,i.c)();return(0,n.useCallback)((n=>{const a=new URL(n);if((0,o.G)(t,a.href))return n;const i=`${a.pathname+a.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,r))}),[e,t,r])}},12983:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const n=r(42566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,n.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:r,baseUrl:n}=t;if(e.startsWith("#"))return e;if(void 0===r)return e;const[i]=e.split(/[#?]/),s="/"===i||i===n?i:(d=i,r?o(d):a(d));var d;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,n.addPrefix)(e,"/")},t.removeTrailingSlash=a},80253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},70440:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=r(12983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return n(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=r(42566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=r(80253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},42566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},31513:(e,t,r)=>{"use strict";r.d(t,{zR:()=>x,TM:()=>C,yJ:()=>g,sC:()=>T,AO:()=>p});var n=r(58168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var r=t,n=r+1,o=e.length;n=0;p--){var g=i[p];"."===g?a(i,p):".."===g?(a(i,p),l++):l&&(a(i,p),l--)}if(!c)for(;l--;l)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var f=i.join("/");return r&&"/"!==f.substr(-1)&&(f+="/"),f};var s=r(11561);function d(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function l(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,r=e.search,n=e.hash,o=t||"/";return r&&"?"!==r&&(o+="?"===r.charAt(0)?r:"?"+r),n&&"#"!==n&&(o+="#"===n.charAt(0)?n:"#"+n),o}function g(e,t,r,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",r="",n="",o=t.indexOf("#");-1!==o&&(n=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(r=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===r?"":r,hash:"#"===n?"":n}}(e),a.state=t):(void 0===(a=(0,n.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return r&&(a.key=r),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function f(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,r,n,o){if(null!=e){var a="function"==typeof e?e(t,r):e;"string"==typeof a?"function"==typeof n?n(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var r=!0;function n(){r&&e.apply(void 0,arguments)}return t.push(n),function(){r=!1,t=t.filter((function(e){return e!==n}))}},notifyListeners:function(){for(var e=arguments.length,r=new Array(e),n=0;nt?r.splice(t,r.length-t,o):r.push(o),l({action:n,location:o,index:t,entries:r})}}))},replace:function(e,t){var n="REPLACE",o=g(e,t,m(),x.location);u.confirmTransitionTo(o,n,r,(function(e){e&&(x.entries[x.index]=o,l({action:n,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=x.index+e;return t>=0&&t{"use strict";var n=r(44363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function d(e){return n.isMemo(e)?i:s[e.$$typeof]||o}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,l=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,g=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(f){var o=g(r);o&&o!==f&&e(t,o,n)}var i=u(r);l&&(i=i.concat(l(r)));for(var s=d(t),m=d(r),b=0;b{"use strict";e.exports=function(e,t,r,n,o,a,i,s){if(!e){var d;if(void 0===t)d=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[r,n,o,a,i,s],u=0;(d=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw d.framesToPop=1,d}}},64634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},10119:(e,t,r)=>{"use strict";r.r(t)},51043:(e,t,r)=>{"use strict";r.r(t)},5947:function(e,t,r){var n,o;n=function(){var e,t,r={version:"0.2.0"},n=r.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,r){return er?r:e}function a(e){return 100*(-1+e)}function i(e,t,r){var o;return(o="translate3d"===n.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===n.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+r,o}r.configure=function(e){var t,r;for(t in e)void 0!==(r=e[t])&&e.hasOwnProperty(t)&&(n[t]=r);return this},r.status=null,r.set=function(e){var t=r.isStarted();e=o(e,n.minimum,1),r.status=1===e?null:e;var a=r.render(!t),c=a.querySelector(n.barSelector),u=n.speed,l=n.easing;return a.offsetWidth,s((function(t){""===n.positionUsing&&(n.positionUsing=r.getPositioningCSS()),d(c,i(e,u,l)),1===e?(d(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){d(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){r.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},r.isStarted=function(){return"number"==typeof r.status},r.start=function(){r.status||r.set(0);var e=function(){setTimeout((function(){r.status&&(r.trickle(),e())}),n.trickleSpeed)};return n.trickle&&e(),this},r.done=function(e){return e||r.status?r.inc(.3+.5*Math.random()).set(1):this},r.inc=function(e){var t=r.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),r.set(t)):r.start()},r.trickle=function(){return r.inc(Math.random()*n.trickleRate)},e=0,t=0,r.promise=function(n){return n&&"resolved"!==n.state()?(0===t&&r.start(),e++,t++,n.always((function(){0==--t?(e=0,r.done()):r.set((e-t)/e)})),this):this},r.render=function(e){if(r.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=n.template;var o,i=t.querySelector(n.barSelector),s=e?"-100":a(r.status||0),c=document.querySelector(n.parent);return d(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),n.showSpinner||(o=t.querySelector(n.spinnerSelector))&&g(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},r.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(n.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&g(e)},r.isRendered=function(){return!!document.getElementById("nprogress")},r.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var r=e.shift();r&&r(t)}return function(r){e.push(r),1==e.length&&t()}}(),d=function(){var e=["Webkit","O","Moz","ms"],t={};function r(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function n(t){var r=document.body.style;if(t in r)return t;for(var n,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((n=e[o]+a)in r)return n;return t}function o(e){return e=r(e),t[e]||(t[e]=n(e))}function a(e,t,r){t=o(t),e.style[t]=r}return function(e,t){var r,n,o=arguments;if(2==o.length)for(r in t)void 0!==(n=t[r])&&t.hasOwnProperty(r)&&a(e,r,n);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var r=p(e),n=r+t;c(r,t)||(e.className=n.substring(1))}function l(e,t){var r,n=p(e);c(e,t)&&(r=n.replace(" "+t+" "," "),e.className=r.substring(1,r.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function g(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return r},void 0===(o="function"==typeof n?n.call(t,r,t,e):n)||(e.exports=o)},35302:(e,t,r)=>{var n=r(64634);e.exports=g,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var r,n=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(r=o.exec(e));){var l=r[0],p=r[1],g=r.index;if(s+=e.slice(i,g),i=g+l.length,p)s+=p[1];else{var f=e[i],m=r[2],b=r[3],h=r[4],v=r[5],y=r[6],x=r[7];s&&(n.push(s),s="");var k=null!=m&&null!=f&&f!==m,S="+"===y||"*"===y,w="?"===y||"*"===y,_=r[2]||u,E=h||v;n.push({name:b||a++,prefix:m||"",delimiter:_,optional:w,repeat:S,partial:k,asterisk:!!x,pattern:E?c(E):x?".*":"[^"+d(_)+"]+?"})}}return i{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",r={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:r,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:r}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},r.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=n.variable[1].inside,i=0;i{Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go["class-name"]},75538:()=>{!function(e){var t={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};e.languages.groovy=e.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),e.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}}}),e.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),t.inside.expression.inside=e.languages.groovy}(Prism)},55025:()=>{Prism.languages.hcl={comment:/(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,heredoc:{pattern:/<<-?(\w+\b)[\s\S]*?^[ \t]*\1/m,greedy:!0,alias:"string"},keyword:[{pattern:/(?:data|resource)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+\{)/i,inside:{type:{pattern:/(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,lookbehind:!0,alias:"variable"}}},{pattern:/(?:backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?=\{)/i,inside:{type:{pattern:/(backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,lookbehind:!0,alias:"variable"}}},/[\w-]+(?=\s+\{)/],property:[/[-\w\.]+(?=\s*=(?!=))/,/"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/],string:{pattern:/"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+(?!\$)|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,greedy:!0,inside:{interpolation:{pattern:/(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,lookbehind:!0,inside:{type:{pattern:/(\b(?:count|data|local|module|path|self|terraform|var)\b\.)[\w\*]+/i,lookbehind:!0,alias:"variable"},keyword:/\b(?:count|data|local|module|path|self|terraform|var)\b/i,function:/\w+(?=\()/,string:{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,punctuation:/[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/}}}},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,boolean:/\b(?:false|true)\b/i,punctuation:/[=\[\]{}]/}},25723:()=>{Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),Prism.languages.js=Prism.languages.javascript},42177:()=>{!function(e){var t=/\\\((?:[^()]|\([^()]*\))*\)/.source,r=RegExp(/(^|[^\\])"(?:[^"\r\n\\]|\\[^\r\n(]|__)*"/.source.replace(/__/g,(function(){return t}))),n={interpolation:{pattern:RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+t),lookbehind:!0,inside:{content:{pattern:/^(\\\()[\s\S]+(?=\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\(|\)$/}}},o=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(r.source+/(?=\s*:(?!:))/.source),lookbehind:!0,greedy:!0,inside:n},string:{pattern:r,lookbehind:!0,greedy:!0,inside:n},function:{pattern:/(\bdef\s+)[a-z_]\w+/i,lookbehind:!0},variable:/\B\$\w+/,"property-literal":{pattern:/\b[a-z_]\w*(?=\s*:(?!:))/i,alias:"property"},keyword:/\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\b/,boolean:/\b(?:false|true)\b/,number:/(?:\b\d+\.|\B\.)?\b\d+(?:[eE][+-]?\d+)?\b/,operator:[{pattern:/\|=?/,alias:"pipe"},/\.\.|[!=<>]?=|\?\/\/|\/\/=?|[-+*/%]=?|[<>?]|\b(?:and|not|or)\b/],"c-style-function":{pattern:/\b[a-z_]\w*(?=\s*\()/i,alias:"function"},punctuation:/::|[()\[\]{},:;]|\.(?=\s*[\[\w$])/,dot:{pattern:/\./,alias:"important"}};n.interpolation.inside.content.inside=o}(Prism)},72514:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},19700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(r,n,o,a){if(r.language===n){var i=r.tokenStack=[];r.code=r.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==r.code.indexOf(o=t(n,s));)++s;return i[s]=e,o})),r.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(r,n){if(r.language===n&&r.tokenStack){r.grammar=e.languages[n];var o=0,a=Object.keys(r.tokenStack);!function i(s){for(var d=0;d=a.length);d++){var c=s[d];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],l=r.tokenStack[u],p="string"==typeof c?c:c.content,g=t(n,u),f=p.indexOf(g);if(f>-1){++o;var m=p.substring(0,f),b=new e.Token(n,e.tokenize(l,r.grammar),"language-"+n,l),h=p.substring(f+g.length),v=[];m&&v.push.apply(v,i([m])),v.push(b),h&&v.push.apply(v,i([h])),"string"==typeof c?s.splice.apply(s,[d,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return s}(r.tokens)}}}})}(Prism)},52342:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},59587:()=>{!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(Prism)},60083:()=>{!function(e){var t=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,n="(?:"+r.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+r.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var r=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return n})).replace(/<>/g,(function(){return e}));return RegExp(r,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return n}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return n})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:r,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},54644:(e,t,r)=>{var n={"./prism-bash":57022,"./prism-go":86378,"./prism-groovy":75538,"./prism-hcl":55025,"./prism-javascript":25723,"./prism-jq":42177,"./prism-json":72514,"./prism-python":52342,"./prism-typescript":59587,"./prism-yaml":60083};function o(e){var t=a(e);return r(t)}function a(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=a,e.exports=o,o.id=54644},2694:(e,t,r)=>{"use strict";var n=r(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,a,i){if(i!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},5556:(e,t,r)=>{e.exports=r(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},22551:(e,t,r)=>{"use strict";var n=r(96540),o=r(69982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r