[{"data":1,"prerenderedAt":1805},["ShallowReactive",2],{"docs-page-en-\u002Fdocs\u002Fintegrations\u002Fbitbucket":3,"docs-navigation-en":1706,"docs-surround-en-\u002Fdocs\u002Fintegrations\u002Fbitbucket":1800},{"id":4,"title":5,"body":6,"claimDependencies":1685,"description":12,"extension":1689,"locale":1690,"meta":1691,"missingMedia":1692,"navigation":461,"owner":1696,"path":1697,"reviewStatus":1698,"seo":1699,"staleLinks":1700,"stem":1702,"technicalRisk":1703,"translationKey":1704,"__hash__":1705},"docs_en\u002Fdocs\u002F4.integrations\u002F4.bitbucket.md","Bitbucket Integration",{"type":7,"value":8,"toc":1636},"minimark",[9,13,18,21,37,41,44,70,75,93,97,101,114,119,182,186,226,234,238,248,303,306,310,320,348,351,355,359,362,435,439,686,690,813,817,824,827,830,834,838,841,942,946,949,960,964,968,978,995,999,1021,1025,1028,1053,1057,1060,1078,1083,1094,1098,1102,1108,1113,1130,1134,1139,1143,1160,1164,1169,1173,1190,1194,1199,1203,1221,1225,1229,1255,1259,1285,1289,1321,1325,1329,1402,1406,1410,1421,1425,1436,1440,1444,1458,1462,1465,1479,1488,1492,1495,1499,1514,1518,1530,1535,1549,1553,1560,1563,1595,1599,1602,1632],[10,11,12],"p",{},"Jetscale integrates with Bitbucket to automatically create pull requests containing production-ready Terraform code for your cost optimization recommendations.",[14,15,17],"h2",{"id":16},"overview","Overview",[10,19,20],{},"The Bitbucket integration allows Jetscale to:",[22,23,24,28,31,34],"ul",{},[25,26,27],"li",{},"Push generated Terraform code to your Bitbucket repositories",[25,29,30],{},"Create pull requests with detailed optimization recommendations",[25,32,33],{},"Integrate seamlessly with your existing code review and CI\u002FCD workflows",[25,35,36],{},"Track recommendation implementation status through Bitbucket pipelines",[14,38,40],{"id":39},"prerequisites","Prerequisites",[10,42,43],{},"Before connecting Bitbucket, you'll need:",[45,46,47,54,60],"ol",{},[25,48,49,53],{},[50,51,52],"strong",{},"Bitbucket Account"," (Cloud or Server)",[25,55,56,59],{},[50,57,58],{},"Repository Access"," with write permissions",[25,61,62,65,66,69],{},[50,63,64],{},"App Password"," or ",[50,67,68],{},"Personal Access Token"," with appropriate scopes",[71,72,74],"h3",{"id":73},"supported-bitbucket-versions","Supported Bitbucket Versions",[22,76,77,83],{},[25,78,79,82],{},[50,80,81],{},"Bitbucket Cloud"," (bitbucket.org) - Recommended",[25,84,85,88,89,92],{},[50,86,87],{},"Bitbucket Server"," \u002F ",[50,90,91],{},"Data Center"," (self-hosted)",[14,94,96],{"id":95},"setup-guide","Setup Guide",[71,98,100],{"id":99},"step-1-create-a-bitbucket-app-password","Step 1: Create a Bitbucket App Password",[102,103,104],"blockquote",{},[10,105,106,109,110],{},[50,107,108],{},"Image pending:"," Bitbucket App Password Creation\n",[111,112,113],"em",{},"Screenshot placeholder: Bitbucket app password settings",[115,116,118],"h4",{"id":117},"for-bitbucket-cloud","For Bitbucket Cloud",[45,120,121,131,137,140,171,176],{},[25,122,123,124],{},"Navigate to ",[125,126,130],"a",{"href":127,"rel":128},"https:\u002F\u002Fbitbucket.org\u002Faccount\u002Fsettings\u002Fapp-passwords\u002F",[129],"nofollow","Bitbucket Settings → App passwords",[25,132,133,134],{},"Click ",[50,135,136],{},"Create app password",[25,138,139],{},"Give it a descriptive label (e.g., \"Jetscale Integration\")",[25,141,142,143],{},"Select the required permissions:\n",[22,144,145,151,156,161,166],{},[25,146,147,148],{},"✓ ",[50,149,150],{},"Account: Read",[25,152,147,153],{},[50,154,155],{},"Workspace membership: Read",[25,157,147,158],{},[50,159,160],{},"Projects: Read",[25,162,147,163],{},[50,164,165],{},"Repositories: Write",[25,167,147,168],{},[50,169,170],{},"Pull requests: Write",[25,172,133,173],{},[50,174,175],{},"Create",[25,177,178,181],{},[50,179,180],{},"Important",": Copy your app password immediately - you won't see it again",[115,183,185],{"id":184},"for-bitbucket-server","For Bitbucket Server",[45,187,188,193,198,201,216,219,223],{},[25,189,123,190],{},[50,191,192],{},"Profile Settings → Personal access tokens",[25,194,133,195],{},[50,196,197],{},"Create a token",[25,199,200],{},"Give it a name (e.g., \"Jetscale\")",[25,202,203,204],{},"Select permissions:\n",[22,205,206,211],{},[25,207,147,208],{},[50,209,210],{},"Repository read",[25,212,147,213],{},[50,214,215],{},"Repository write",[25,217,218],{},"Set expiration date",[25,220,133,221],{},[50,222,175],{},[25,224,225],{},"Copy your token",[102,227,228],{},[10,229,230,233],{},[50,231,232],{},"Security Note",": Store your app password or token securely. Jetscale encrypts credentials at rest.",[71,235,237],{"id":236},"step-2-connect-bitbucket-in-jetscale","Step 2: Connect Bitbucket in Jetscale",[102,239,240],{},[10,241,242,244,245],{},[50,243,108],{}," Bitbucket Connection Screen\n",[111,246,247],{},"Screenshot placeholder: Jetscale Bitbucket integration page",[45,249,250,260,265,298],{},[25,251,123,252,255,256,259],{},[50,253,254],{},"Settings"," → ",[50,257,258],{},"Integrations"," in Jetscale",[25,261,133,262],{},[50,263,264],{},"Connect Bitbucket",[25,266,267,268],{},"Enter your configuration:\n",[22,269,270,276,286,292],{},[25,271,272,275],{},[50,273,274],{},"Bitbucket Type",": Cloud or Server",[25,277,278,281,282],{},[50,279,280],{},"Server URL",": (For Bitbucket Server only) e.g., ",[283,284,285],"code",{},"https:\u002F\u002Fbitbucket.yourcompany.com",[25,287,288,291],{},[50,289,290],{},"Username",": Your Bitbucket username",[25,293,294,297],{},[50,295,296],{},"App Password\u002FToken",": The credential created in Step 1",[25,299,133,300],{},[50,301,302],{},"Verify and Connect",[10,304,305],{},"Jetscale will verify your credentials and display your accessible repositories.",[71,307,309],{"id":308},"step-3-select-your-repository","Step 3: Select Your Repository",[102,311,312],{},[10,313,314,316,317],{},[50,315,108],{}," Repository Selection\n",[111,318,319],{},"Screenshot placeholder: Bitbucket repository selection dropdown",[45,321,322,329,340,343],{},[25,323,324,325,328],{},"From the ",[50,326,327],{},"Repository"," dropdown, select your Terraform infrastructure repository",[25,330,331,332,335,336,339],{},"Format: ",[283,333,334],{},"workspace\u002Frepository-slug"," (Cloud) or ",[283,337,338],{},"project\u002Frepository"," (Server)",[25,341,342],{},"Jetscale will verify you have write access",[25,344,133,345],{},[50,346,347],{},"Save",[10,349,350],{},"The selected repository will be used for all future pull requests.",[14,352,354],{"id":353},"how-it-works","How It Works",[71,356,358],{"id":357},"pull-request-creation","Pull Request Creation",[10,360,361],{},"When you approve a cost optimization recommendation in Jetscale:",[45,363,364,391,409],{},[25,365,366,369,370,65,373,376,377],{},[50,367,368],{},"Branch Creation",": Jetscale creates a new feature branch from your default branch (usually ",[283,371,372],{},"main",[283,374,375],{},"master",")",[22,378,379,385],{},[25,380,381,382],{},"Branch naming: ",[283,383,384],{},"jetscale\u002Foptimization-{resource-type}-{timestamp}",[25,386,387,388],{},"Example: ",[283,389,390],{},"jetscale\u002Foptimization-rds-20240115-143022",[25,392,393,396,397],{},[50,394,395],{},"File Push",": Generated Terraform files are committed to the branch",[22,398,399,406],{},[25,400,401,402,405],{},"Files placed in ",[283,403,404],{},"terraform\u002F"," directory",[25,407,408],{},"Commit message includes optimization summary and cost impact",[25,410,411,414,415],{},[50,412,413],{},"Pull Request",": A PR is automatically created with:",[22,416,417,423,429],{},[25,418,419,422],{},[50,420,421],{},"Title",": Concise optimization description",[25,424,425,428],{},[50,426,427],{},"Description",": Detailed cost analysis, performance considerations, implementation steps",[25,430,431,434],{},[50,432,433],{},"Reviewers",": Automatically added based on repository settings (optional)",[71,436,438],{"id":437},"pull-request-structure","Pull Request Structure",[440,441,446],"pre",{"className":442,"code":443,"language":444,"meta":445,"style":445},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Cost Optimization: RDS Instance Right-Sizing\n\n## Summary\nDowngrade RDS instance `production-db` from **db.r5.2xlarge** to **db.r5.xlarge**\n\n## Cost Impact\n\n| Metric | Current | Projected | Savings |\n|--------|---------|-----------|---------|\n| Monthly Cost | $730.00 | $365.00 | **$365.00 (50%)** |\n| Annual Cost | $8,760.00 | $4,380.00 | **$4,380.00** |\n\n## Performance Analysis\n\n✓ Current CPU utilization: 15-25% average\n✓ Current memory utilization: 30-40% average\n✓ Recommended instance provides 2x current peak usage\n✓ **Risk Assessment**: Low - No performance degradation expected\n\n## Files Changed\n\n- `terraform\u002Frds_production_db.tf` - Updated instance class from db.r5.2xlarge to db.r5.xlarge\n- `terraform\u002Fvariables.tf` - Added configurable instance_class variable\n\n## Implementation Checklist\n\n- [ ] Review changes in Terraform plan output\n- [ ] Apply to staging environment first\n- [ ] Monitor performance for 24-48 hours\n- [ ] Verify application health checks pass\n- [ ] Apply to production with change management approval\n\n## Testing Recommendations\n\n1. Run `terraform plan` to preview changes\n2. Check for any dependent resources\n3. Verify backup\u002Fsnapshot policies\n4. Confirm monitoring dashboards are updated\n\n---\n🤖 Generated by [Jetscale](https:\u002F\u002Fjetscale.ai) | [View in Jetscale Dashboard](#)\n","markdown","",[283,447,448,456,463,469,475,480,486,491,497,503,509,515,520,526,531,537,543,549,555,560,566,571,577,583,588,594,599,605,611,617,623,629,634,640,645,651,657,663,669,674,680],{"__ignoreMap":445},[449,450,453],"span",{"class":451,"line":452},"line",1,[449,454,455],{},"# Cost Optimization: RDS Instance Right-Sizing\n",[449,457,459],{"class":451,"line":458},2,[449,460,462],{"emptyLinePlaceholder":461},true,"\n",[449,464,466],{"class":451,"line":465},3,[449,467,468],{},"## Summary\n",[449,470,472],{"class":451,"line":471},4,[449,473,474],{},"Downgrade RDS instance `production-db` from **db.r5.2xlarge** to **db.r5.xlarge**\n",[449,476,478],{"class":451,"line":477},5,[449,479,462],{"emptyLinePlaceholder":461},[449,481,483],{"class":451,"line":482},6,[449,484,485],{},"## Cost Impact\n",[449,487,489],{"class":451,"line":488},7,[449,490,462],{"emptyLinePlaceholder":461},[449,492,494],{"class":451,"line":493},8,[449,495,496],{},"| Metric | Current | Projected | Savings |\n",[449,498,500],{"class":451,"line":499},9,[449,501,502],{},"|--------|---------|-----------|---------|\n",[449,504,506],{"class":451,"line":505},10,[449,507,508],{},"| Monthly Cost | $730.00 | $365.00 | **$365.00 (50%)** |\n",[449,510,512],{"class":451,"line":511},11,[449,513,514],{},"| Annual Cost | $8,760.00 | $4,380.00 | **$4,380.00** |\n",[449,516,518],{"class":451,"line":517},12,[449,519,462],{"emptyLinePlaceholder":461},[449,521,523],{"class":451,"line":522},13,[449,524,525],{},"## Performance Analysis\n",[449,527,529],{"class":451,"line":528},14,[449,530,462],{"emptyLinePlaceholder":461},[449,532,534],{"class":451,"line":533},15,[449,535,536],{},"✓ Current CPU utilization: 15-25% average\n",[449,538,540],{"class":451,"line":539},16,[449,541,542],{},"✓ Current memory utilization: 30-40% average\n",[449,544,546],{"class":451,"line":545},17,[449,547,548],{},"✓ Recommended instance provides 2x current peak usage\n",[449,550,552],{"class":451,"line":551},18,[449,553,554],{},"✓ **Risk Assessment**: Low - No performance degradation expected\n",[449,556,558],{"class":451,"line":557},19,[449,559,462],{"emptyLinePlaceholder":461},[449,561,563],{"class":451,"line":562},20,[449,564,565],{},"## Files Changed\n",[449,567,569],{"class":451,"line":568},21,[449,570,462],{"emptyLinePlaceholder":461},[449,572,574],{"class":451,"line":573},22,[449,575,576],{},"- `terraform\u002Frds_production_db.tf` - Updated instance class from db.r5.2xlarge to db.r5.xlarge\n",[449,578,580],{"class":451,"line":579},23,[449,581,582],{},"- `terraform\u002Fvariables.tf` - Added configurable instance_class variable\n",[449,584,586],{"class":451,"line":585},24,[449,587,462],{"emptyLinePlaceholder":461},[449,589,591],{"class":451,"line":590},25,[449,592,593],{},"## Implementation Checklist\n",[449,595,597],{"class":451,"line":596},26,[449,598,462],{"emptyLinePlaceholder":461},[449,600,602],{"class":451,"line":601},27,[449,603,604],{},"- [ ] Review changes in Terraform plan output\n",[449,606,608],{"class":451,"line":607},28,[449,609,610],{},"- [ ] Apply to staging environment first\n",[449,612,614],{"class":451,"line":613},29,[449,615,616],{},"- [ ] Monitor performance for 24-48 hours\n",[449,618,620],{"class":451,"line":619},30,[449,621,622],{},"- [ ] Verify application health checks pass\n",[449,624,626],{"class":451,"line":625},31,[449,627,628],{},"- [ ] Apply to production with change management approval\n",[449,630,632],{"class":451,"line":631},32,[449,633,462],{"emptyLinePlaceholder":461},[449,635,637],{"class":451,"line":636},33,[449,638,639],{},"## Testing Recommendations\n",[449,641,643],{"class":451,"line":642},34,[449,644,462],{"emptyLinePlaceholder":461},[449,646,648],{"class":451,"line":647},35,[449,649,650],{},"1. Run `terraform plan` to preview changes\n",[449,652,654],{"class":451,"line":653},36,[449,655,656],{},"2. Check for any dependent resources\n",[449,658,660],{"class":451,"line":659},37,[449,661,662],{},"3. Verify backup\u002Fsnapshot policies\n",[449,664,666],{"class":451,"line":665},38,[449,667,668],{},"4. Confirm monitoring dashboards are updated\n",[449,670,672],{"class":451,"line":671},39,[449,673,462],{"emptyLinePlaceholder":461},[449,675,677],{"class":451,"line":676},40,[449,678,679],{},"---\n",[449,681,683],{"class":451,"line":682},41,[449,684,685],{},"🤖 Generated by [Jetscale](https:\u002F\u002Fjetscale.ai) | [View in Jetscale Dashboard](#)\n",[71,687,689],{"id":688},"terraform-code-example","Terraform Code Example",[440,691,695],{"className":692,"code":693,"language":694,"meta":445,"style":445},"language-hcl shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Optimized RDS instance configuration\n# Generated by Jetscale on 2024-01-15\n\nresource \"aws_db_instance\" \"production_db\" {\n  identifier     = \"production-db\"\n  engine         = \"postgres\"\n  engine_version = \"14.7\"\n\n  # Previous: db.r5.2xlarge ($730\u002Fmonth)\n  # New: db.r5.xlarge ($365\u002Fmonth)\n  # Cost Reduction: 50% ($365\u002Fmonth, $4,380\u002Fyear)\n  #\n  # Justification:\n  # - Average CPU utilization: 15-25%\n  # - Average memory utilization: 30-40%\n  # - New instance provides 2x headroom above peak usage\n  instance_class = var.rds_production_instance_class\n\n  allocated_storage     = 100\n  storage_type          = \"gp3\"\n  storage_encrypted     = true\n\n  # ... other configuration unchanged\n}\n","hcl",[283,696,697,702,707,711,716,721,726,731,735,740,745,750,755,760,765,770,775,780,784,789,794,799,803,808],{"__ignoreMap":445},[449,698,699],{"class":451,"line":452},[449,700,701],{},"# Optimized RDS instance configuration\n",[449,703,704],{"class":451,"line":458},[449,705,706],{},"# Generated by Jetscale on 2024-01-15\n",[449,708,709],{"class":451,"line":465},[449,710,462],{"emptyLinePlaceholder":461},[449,712,713],{"class":451,"line":471},[449,714,715],{},"resource \"aws_db_instance\" \"production_db\" {\n",[449,717,718],{"class":451,"line":477},[449,719,720],{},"  identifier     = \"production-db\"\n",[449,722,723],{"class":451,"line":482},[449,724,725],{},"  engine         = \"postgres\"\n",[449,727,728],{"class":451,"line":488},[449,729,730],{},"  engine_version = \"14.7\"\n",[449,732,733],{"class":451,"line":493},[449,734,462],{"emptyLinePlaceholder":461},[449,736,737],{"class":451,"line":499},[449,738,739],{},"  # Previous: db.r5.2xlarge ($730\u002Fmonth)\n",[449,741,742],{"class":451,"line":505},[449,743,744],{},"  # New: db.r5.xlarge ($365\u002Fmonth)\n",[449,746,747],{"class":451,"line":511},[449,748,749],{},"  # Cost Reduction: 50% ($365\u002Fmonth, $4,380\u002Fyear)\n",[449,751,752],{"class":451,"line":517},[449,753,754],{},"  #\n",[449,756,757],{"class":451,"line":522},[449,758,759],{},"  # Justification:\n",[449,761,762],{"class":451,"line":528},[449,763,764],{},"  # - Average CPU utilization: 15-25%\n",[449,766,767],{"class":451,"line":533},[449,768,769],{},"  # - Average memory utilization: 30-40%\n",[449,771,772],{"class":451,"line":539},[449,773,774],{},"  # - New instance provides 2x headroom above peak usage\n",[449,776,777],{"class":451,"line":545},[449,778,779],{},"  instance_class = var.rds_production_instance_class\n",[449,781,782],{"class":451,"line":551},[449,783,462],{"emptyLinePlaceholder":461},[449,785,786],{"class":451,"line":557},[449,787,788],{},"  allocated_storage     = 100\n",[449,790,791],{"class":451,"line":562},[449,792,793],{},"  storage_type          = \"gp3\"\n",[449,795,796],{"class":451,"line":568},[449,797,798],{},"  storage_encrypted     = true\n",[449,800,801],{"class":451,"line":573},[449,802,462],{"emptyLinePlaceholder":461},[449,804,805],{"class":451,"line":579},[449,806,807],{},"  # ... other configuration unchanged\n",[449,809,810],{"class":451,"line":585},[449,811,812],{},"}\n",[14,814,816],{"id":815},"repository-permissions","Repository Permissions",[10,818,819,820,823],{},"Jetscale requires ",[50,821,822],{},"write"," access to your repository to create branches and pull requests. The integration will:",[10,825,826],{},"✓ Create feature branches\n✓ Commit Terraform files\n✓ Create pull requests\n✓ Read repository metadata and branches",[10,828,829],{},"✗ Cannot merge pull requests\n✗ Cannot delete branches\n✗ Cannot modify settings or webhooks\n✗ Cannot access repository secrets or pipeline variables",[14,831,833],{"id":832},"bitbucket-pipeline-integration","Bitbucket Pipeline Integration",[71,835,837],{"id":836},"automatic-validation","Automatic Validation",[10,839,840],{},"Jetscale pull requests trigger your existing Bitbucket Pipelines:",[440,842,846],{"className":843,"code":844,"language":845,"meta":445,"style":445},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# bitbucket-pipelines.yml example\npipelines:\n  pull-requests:\n    '**':\n      - step:\n          name: Validate Terraform\n          script:\n            - terraform init\n            - terraform fmt -check\n            - terraform validate\n            - terraform plan\n","yaml",[283,847,848,854,864,871,885,895,906,913,921,928,935],{"__ignoreMap":445},[449,849,850],{"class":451,"line":452},[449,851,853],{"class":852},"sHwdD","# bitbucket-pipelines.yml example\n",[449,855,856,860],{"class":451,"line":458},[449,857,859],{"class":858},"swJcz","pipelines",[449,861,863],{"class":862},"sMK4o",":\n",[449,865,866,869],{"class":451,"line":465},[449,867,868],{"class":858},"  pull-requests",[449,870,863],{"class":862},[449,872,873,876,880,883],{"class":451,"line":471},[449,874,875],{"class":862},"    '",[449,877,879],{"class":878},"sfazB","**",[449,881,882],{"class":862},"'",[449,884,863],{"class":862},[449,886,887,890,893],{"class":451,"line":477},[449,888,889],{"class":862},"      -",[449,891,892],{"class":858}," step",[449,894,863],{"class":862},[449,896,897,900,903],{"class":451,"line":482},[449,898,899],{"class":858},"          name",[449,901,902],{"class":862},":",[449,904,905],{"class":878}," Validate Terraform\n",[449,907,908,911],{"class":451,"line":488},[449,909,910],{"class":858},"          script",[449,912,863],{"class":862},[449,914,915,918],{"class":451,"line":493},[449,916,917],{"class":862},"            -",[449,919,920],{"class":878}," terraform init\n",[449,922,923,925],{"class":451,"line":499},[449,924,917],{"class":862},[449,926,927],{"class":878}," terraform fmt -check\n",[449,929,930,932],{"class":451,"line":505},[449,931,917],{"class":862},[449,933,934],{"class":878}," terraform validate\n",[449,936,937,939],{"class":451,"line":511},[449,938,917],{"class":862},[449,940,941],{"class":878}," terraform plan\n",[71,943,945],{"id":944},"status-checks","Status Checks",[10,947,948],{},"Jetscale monitors pipeline status:",[22,950,951,954,957],{},[25,952,953],{},"✅ All checks passed: Ready to merge",[25,955,956],{},"⚠️ Checks pending: Waiting for pipeline",[25,958,959],{},"❌ Checks failed: Review pipeline logs",[14,961,963],{"id":962},"managing-the-integration","Managing the Integration",[71,965,967],{"id":966},"view-integration-status","View Integration Status",[10,969,970,971,255,973,255,975,902],{},"From ",[50,972,254],{},[50,974,258],{},[50,976,977],{},"Bitbucket",[22,979,980,983,986,989,992],{},[25,981,982],{},"Connected Bitbucket account",[25,984,985],{},"Server URL (if Bitbucket Server)",[25,987,988],{},"Selected workspace\u002Fproject and repository",[25,990,991],{},"Last verification time",[25,993,994],{},"Recent pull requests created",[71,996,998],{"id":997},"change-repository","Change Repository",[45,1000,1001,1009,1013,1016],{},[25,1002,123,1003,255,1005,255,1007],{},[50,1004,254],{},[50,1006,258],{},[50,1008,977],{},[25,1010,133,1011],{},[50,1012,998],{},[25,1014,1015],{},"Select a different repository",[25,1017,133,1018],{},[50,1019,1020],{},"Update",[71,1022,1024],{"id":1023},"update-credentials","Update Credentials",[10,1026,1027],{},"If your app password or token expires:",[45,1029,1030,1033,1041,1045,1048],{},[25,1031,1032],{},"Generate a new app password\u002Ftoken in Bitbucket",[25,1034,123,1035,255,1037,255,1039],{},[50,1036,254],{},[50,1038,258],{},[50,1040,977],{},[25,1042,133,1043],{},[50,1044,1024],{},[25,1046,1047],{},"Enter new credentials",[25,1049,133,1050],{},[50,1051,1052],{},"Save and Verify",[71,1054,1056],{"id":1055},"disconnect-bitbucket","Disconnect Bitbucket",[10,1058,1059],{},"To remove the integration:",[45,1061,1062,1070,1075],{},[25,1063,123,1064,255,1066,255,1068],{},[50,1065,254],{},[50,1067,258],{},[50,1069,977],{},[25,1071,133,1072],{},[50,1073,1074],{},"Disconnect",[25,1076,1077],{},"Confirm disconnection",[10,1079,1080,1082],{},[50,1081,180],{},": Disconnecting will:",[22,1084,1085,1088,1091],{},[25,1086,1087],{},"Remove stored credentials from Jetscale",[25,1089,1090],{},"Stop automatic PR creation",[25,1092,1093],{},"Preserve existing pull requests in Bitbucket",[14,1095,1097],{"id":1096},"troubleshooting","Troubleshooting",[71,1099,1101],{"id":1100},"authentication-failed","Authentication Failed",[10,1103,1104,1107],{},[50,1105,1106],{},"Problem",": \"Invalid credentials\" error when connecting",[10,1109,1110,902],{},[50,1111,1112],{},"Solutions",[22,1114,1115,1118,1121,1124,1127],{},[25,1116,1117],{},"Verify username is correct (case-sensitive)",[25,1119,1120],{},"Check app password\u002Ftoken hasn't expired",[25,1122,1123],{},"Ensure all required scopes are selected",[25,1125,1126],{},"For Bitbucket Server, verify server URL is correct and accessible",[25,1128,1129],{},"Try creating a new app password",[71,1131,1133],{"id":1132},"repository-not-found","Repository Not Found",[10,1135,1136,1138],{},[50,1137,1106],{},": Can't find repository in selection dropdown",[10,1140,1141,902],{},[50,1142,1112],{},[22,1144,1145,1148,1151,1154,1157],{},[25,1146,1147],{},"Verify you have write access to the repository",[25,1149,1150],{},"Check repository isn't archived",[25,1152,1153],{},"Ensure workspace\u002Fproject membership is active",[25,1155,1156],{},"For Bitbucket Server, confirm project permissions",[25,1158,1159],{},"Try refreshing the repository list",[71,1161,1163],{"id":1162},"pull-request-creation-failed","Pull Request Creation Failed",[10,1165,1166,1168],{},[50,1167,1106],{},": Recommendation approved but PR wasn't created",[10,1170,1171,902],{},[50,1172,1112],{},[22,1174,1175,1178,1181,1184,1187],{},[25,1176,1177],{},"Verify branch doesn't already exist with same name",[25,1179,1180],{},"Check you still have write access",[25,1182,1183],{},"Ensure default branch exists and isn't locked",[25,1185,1186],{},"Confirm repository isn't in read-only mode",[25,1188,1189],{},"Review Bitbucket API rate limits",[71,1191,1193],{"id":1192},"pipeline-not-triggering","Pipeline Not Triggering",[10,1195,1196,1198],{},[50,1197,1106],{},": Bitbucket Pipelines doesn't run on Jetscale PRs",[10,1200,1201,902],{},[50,1202,1112],{},[22,1204,1205,1208,1215,1218],{},[25,1206,1207],{},"Verify Pipelines are enabled for the repository",[25,1209,1210,1211,1214],{},"Check ",[283,1212,1213],{},"bitbucket-pipelines.yml"," includes pull-request triggers",[25,1216,1217],{},"Ensure pipeline quota isn't exhausted",[25,1219,1220],{},"Review branch pattern matching in pipeline configuration",[14,1222,1224],{"id":1223},"best-practices","Best Practices",[71,1226,1228],{"id":1227},"credential-management","Credential Management",[22,1230,1231,1237,1243,1249],{},[25,1232,1233,1236],{},[50,1234,1235],{},"Dedicated app password",": Create separate credentials for Jetscale",[25,1238,1239,1242],{},[50,1240,1241],{},"Set expiration",": Use reasonable expiration dates (90-180 days)",[25,1244,1245,1248],{},[50,1246,1247],{},"Rotate regularly",": Update credentials before expiry",[25,1250,1251,1254],{},[50,1252,1253],{},"Revoke unused",": Delete old app passwords immediately",[71,1256,1258],{"id":1257},"repository-configuration","Repository Configuration",[22,1260,1261,1267,1273,1279],{},[25,1262,1263,1266],{},[50,1264,1265],{},"Branch protection",": Require reviews on default branch",[25,1268,1269,1272],{},[50,1270,1271],{},"Required reviewers",": Configure CODEOWNERS for automatic review assignment",[25,1274,1275,1278],{},[50,1276,1277],{},"Pipeline validation",": Enable required pipeline checks before merge",[25,1280,1281,1284],{},[50,1282,1283],{},"Merge strategies",": Use squash or no-fast-forward for clean history",[71,1286,1288],{"id":1287},"pull-request-workflow","Pull Request Workflow",[45,1290,1291,1297,1303,1309,1315],{},[25,1292,1293,1296],{},[50,1294,1295],{},"Automated validation",": Let pipelines validate Terraform changes",[25,1298,1299,1302],{},[50,1300,1301],{},"Peer review",": Have infrastructure team review cost optimizations",[25,1304,1305,1308],{},[50,1306,1307],{},"Staging deployment",": Test changes in non-production first",[25,1310,1311,1314],{},[50,1312,1313],{},"Monitoring",": Watch metrics after applying changes",[25,1316,1317,1320],{},[50,1318,1319],{},"Documentation",": Update runbooks if infrastructure changes",[14,1322,1324],{"id":1323},"bitbucket-cloud-vs-server","Bitbucket Cloud vs Server",[71,1326,1328],{"id":1327},"feature-comparison","Feature Comparison",[1330,1331,1332,1346],"table",{},[1333,1334,1335],"thead",{},[1336,1337,1338,1342,1344],"tr",{},[1339,1340,1341],"th",{},"Feature",[1339,1343,81],{},[1339,1345,87],{},[1347,1348,1349,1359,1370,1381,1391],"tbody",{},[1336,1350,1351,1355,1357],{},[1352,1353,1354],"td",{},"Authentication",[1352,1356,64],{},[1352,1358,68],{},[1336,1360,1361,1364,1367],{},[1352,1362,1363],{},"Repository Format",[1352,1365,1366],{},"workspace\u002Frepo-slug",[1352,1368,1369],{},"project\u002Frepo",[1336,1371,1372,1375,1378],{},[1352,1373,1374],{},"API Version",[1352,1376,1377],{},"REST 2.0",[1352,1379,1380],{},"REST 1.0",[1336,1382,1383,1386,1389],{},[1352,1384,1385],{},"Webhooks",[1352,1387,1388],{},"Native support",[1352,1390,1388],{},[1336,1392,1393,1396,1399],{},[1352,1394,1395],{},"Pipelines",[1352,1397,1398],{},"Built-in",[1352,1400,1401],{},"Plugin required",[71,1403,1405],{"id":1404},"configuration-differences","Configuration Differences",[10,1407,1408,902],{},[50,1409,81],{},[22,1411,1412,1415,1418],{},[25,1413,1414],{},"Uses workspace-based permissions",[25,1416,1417],{},"App passwords have granular scopes",[25,1419,1420],{},"Automatic HTTPS endpoints",[10,1422,1423,902],{},[50,1424,87],{},[22,1426,1427,1430,1433],{},[25,1428,1429],{},"Uses project-based permissions",[25,1431,1432],{},"Requires full server URL",[25,1434,1435],{},"May need firewall\u002FVPN configuration",[14,1437,1439],{"id":1438},"security-considerations","Security Considerations",[71,1441,1443],{"id":1442},"credential-security","Credential Security",[22,1445,1446,1449,1452,1455],{},[25,1447,1448],{},"Jetscale encrypts app passwords and tokens at rest (AES-256)",[25,1450,1451],{},"Credentials never appear in logs or API responses",[25,1453,1454],{},"All Bitbucket API calls use HTTPS with TLS 1.2+",[25,1456,1457],{},"Credentials stored separately with restricted access",[71,1459,1461],{"id":1460},"audit-trail","Audit Trail",[10,1463,1464],{},"All Jetscale actions are logged:",[22,1466,1467,1470,1473,1476],{},[25,1468,1469],{},"Bitbucket API calls",[25,1471,1472],{},"Pull request creation per recommendation",[25,1474,1475],{},"Failed authentication attempts",[25,1477,1478],{},"Repository access events",[10,1480,1481,1482,255,1484,1487],{},"Audit logs available in Jetscale dashboard under ",[50,1483,254],{},[50,1485,1486],{},"Audit Log",".",[71,1489,1491],{"id":1490},"revoking-access","Revoking Access",[10,1493,1494],{},"To immediately revoke access:",[10,1496,1497,902],{},[50,1498,81],{},[45,1500,1501,1508],{},[25,1502,1503,1504],{},"Go to ",[125,1505,1507],{"href":127,"rel":1506},[129],"App passwords",[25,1509,133,1510,1513],{},[50,1511,1512],{},"Revoke"," next to Jetscale password",[10,1515,1516,902],{},[50,1517,87],{},[45,1519,1520,1525],{},[25,1521,123,1522],{},[50,1523,1524],{},"Personal access tokens",[25,1526,133,1527,1529],{},[50,1528,1512],{}," next to Jetscale token",[10,1531,1532,902],{},[50,1533,1534],{},"Jetscale",[45,1536,1537,1545],{},[25,1538,1503,1539,255,1541,255,1543],{},[50,1540,254],{},[50,1542,258],{},[50,1544,977],{},[25,1546,133,1547],{},[50,1548,1074],{},[14,1550,1552],{"id":1551},"api-reference","API Reference",[10,1554,1555,1556,1487],{},"For programmatic access, see our ",[125,1557,1559],{"href":1558},"\u002Fdocs\u002Fapi-reference#bitbucket-integration","API Documentation",[10,1561,1562],{},"Key endpoints:",[22,1564,1565,1571,1577,1583,1589],{},[25,1566,1567,1570],{},[283,1568,1569],{},"POST \u002Fapi\u002Fv1\u002Fbitbucket\u002Faction\u002Fconnect"," - Connect Bitbucket account",[25,1572,1573,1576],{},[283,1574,1575],{},"POST \u002Fapi\u002Fv1\u002Fbitbucket\u002Faction\u002Fselect-repo"," - Select repository",[25,1578,1579,1582],{},[283,1580,1581],{},"GET \u002Fapi\u002Fv1\u002Fbitbucket\u002Frepos"," - List accessible repositories",[25,1584,1585,1588],{},[283,1586,1587],{},"POST \u002Fapi\u002Fv1\u002Fbitbucket\u002Faction\u002Fpr\u002Fcreate"," - Create pull request",[25,1590,1591,1594],{},[283,1592,1593],{},"POST \u002Fapi\u002Fv1\u002Fbitbucket\u002Faction\u002Fdisconnect"," - Disconnect Bitbucket",[14,1596,1598],{"id":1597},"support","Support",[10,1600,1601],{},"Need help with Bitbucket integration?",[22,1603,1604,1614,1622],{},[25,1605,1606,1609,1610],{},[50,1607,1608],{},"Email",": ",[125,1611,1613],{"href":1612},"mailto:support@jetscale.ai","support@jetscale.ai",[25,1615,1616,1609,1618],{},[50,1617,1319],{},[125,1619,1621],{"href":1620},"\u002Fdocs\u002Ffaq","FAQ",[25,1623,1624,1609,1627],{},[50,1625,1626],{},"GitHub Issues",[125,1628,1631],{"href":1629,"rel":1630},"https:\u002F\u002Fgithub.com\u002FJetscale-ai\u002Fjetscale-docs\u002Fissues",[129],"Report a problem",[1633,1634,1635],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":445,"searchDepth":458,"depth":458,"links":1637},[1638,1639,1642,1647,1652,1653,1657,1663,1669,1674,1678,1683,1684],{"id":16,"depth":458,"text":17},{"id":39,"depth":458,"text":40,"children":1640},[1641],{"id":73,"depth":465,"text":74},{"id":95,"depth":458,"text":96,"children":1643},[1644,1645,1646],{"id":99,"depth":465,"text":100},{"id":236,"depth":465,"text":237},{"id":308,"depth":465,"text":309},{"id":353,"depth":458,"text":354,"children":1648},[1649,1650,1651],{"id":357,"depth":465,"text":358},{"id":437,"depth":465,"text":438},{"id":688,"depth":465,"text":689},{"id":815,"depth":458,"text":816},{"id":832,"depth":458,"text":833,"children":1654},[1655,1656],{"id":836,"depth":465,"text":837},{"id":944,"depth":465,"text":945},{"id":962,"depth":458,"text":963,"children":1658},[1659,1660,1661,1662],{"id":966,"depth":465,"text":967},{"id":997,"depth":465,"text":998},{"id":1023,"depth":465,"text":1024},{"id":1055,"depth":465,"text":1056},{"id":1096,"depth":458,"text":1097,"children":1664},[1665,1666,1667,1668],{"id":1100,"depth":465,"text":1101},{"id":1132,"depth":465,"text":1133},{"id":1162,"depth":465,"text":1163},{"id":1192,"depth":465,"text":1193},{"id":1223,"depth":458,"text":1224,"children":1670},[1671,1672,1673],{"id":1227,"depth":465,"text":1228},{"id":1257,"depth":465,"text":1258},{"id":1287,"depth":465,"text":1288},{"id":1323,"depth":458,"text":1324,"children":1675},[1676,1677],{"id":1327,"depth":465,"text":1328},{"id":1404,"depth":465,"text":1405},{"id":1438,"depth":458,"text":1439,"children":1679},[1680,1681,1682],{"id":1442,"depth":465,"text":1443},{"id":1460,"depth":465,"text":1461},{"id":1490,"depth":465,"text":1491},{"id":1551,"depth":458,"text":1552},{"id":1597,"depth":458,"text":1598},[1686,1687,1688],"integration-authentication","integration-availability","terraform-generation","md","en",{},[1693,1694,1695],"Bitbucket App Password Creation","Bitbucket Connection Screen","Repository Selection","Product Integrations","\u002Fdocs\u002Fintegrations\u002Fbitbucket","legacy-import",{"title":5,"description":12},[1701],"View in Jetscale Dashboard","docs\u002F4.integrations\u002F4.bitbucket","high","integrations\u002Fbitbucket","Fpzs_85Rbe0xgpsR_nX0J7XNFUWptD6HIhxhjL-KrzE",[1707],{"title":1708,"path":1709,"stem":1710,"children":1711},"Docs","\u002Fdocs","docs",[1712,1715,1719,1723,1727,1731,1749,1753,1791,1795,1798],{"title":1713,"path":1709,"stem":1714},"Jetscale Documentation","docs\u002Findex",{"title":1716,"path":1717,"stem":1718},"Getting Started with Jetscale","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",{"title":1720,"path":1721,"stem":1722},"AWS Setup Guide","\u002Fdocs\u002Faws-setup","docs\u002F2.aws-setup",{"title":1724,"path":1725,"stem":1726},"Azure Setup Guide","\u002Fdocs\u002Fazure-setup","docs\u002F3.azure-setup",{"title":1728,"path":1729,"stem":1730},"How Jetscale Works","\u002Fdocs\u002Fhow-it-works","docs\u002F4.how-it-works",{"title":258,"path":1732,"stem":1733,"children":1734},"\u002Fdocs\u002Fintegrations","docs\u002F4.integrations\u002Findex",[1735,1736,1740,1744,1748],{"title":258,"path":1732,"stem":1733},{"title":1737,"path":1738,"stem":1739},"GitHub Integration","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F4.integrations\u002F1.github",{"title":1741,"path":1742,"stem":1743},"Jira Integration","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F4.integrations\u002F2.jira",{"title":1745,"path":1746,"stem":1747},"Slack Integration","\u002Fdocs\u002Fintegrations\u002Fslack","docs\u002F4.integrations\u002F3.slack",{"title":5,"path":1697,"stem":1702},{"title":1750,"path":1751,"stem":1752},"AI-Powered Analysis","\u002Fdocs\u002Fai-analysis","docs\u002F5.ai-analysis",{"title":1754,"path":1755,"stem":1756,"children":1757},"Supported Services","\u002Fdocs\u002Fservices","docs\u002F5.services\u002Findex",[1758,1759,1763,1767,1771,1775,1779,1783,1787],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762},"EBS Optimization","\u002Fdocs\u002Fservices\u002Febs","docs\u002F5.services\u002F1.ebs",{"title":1764,"path":1765,"stem":1766},"EC2 Optimization","\u002Fdocs\u002Fservices\u002Fec2","docs\u002F5.services\u002F2.ec2",{"title":1768,"path":1769,"stem":1770},"EKS Optimization","\u002Fdocs\u002Fservices\u002Feks","docs\u002F5.services\u002F3.eks",{"title":1772,"path":1773,"stem":1774},"ElastiCache Optimization","\u002Fdocs\u002Fservices\u002Felasticache","docs\u002F5.services\u002F4.elasticache",{"title":1776,"path":1777,"stem":1778},"RDS Optimization","\u002Fdocs\u002Fservices\u002Frds","docs\u002F5.services\u002F5.rds",{"title":1780,"path":1781,"stem":1782},"S3 Optimization","\u002Fdocs\u002Fservices\u002Fs3","docs\u002F5.services\u002F6.s3",{"title":1784,"path":1785,"stem":1786},"Azure SQL Optimization","\u002Fdocs\u002Fservices\u002Fazure-sql","docs\u002F5.services\u002F7.azure-sql",{"title":1788,"path":1789,"stem":1790},"Azure VM Optimization","\u002Fdocs\u002Fservices\u002Fazure-vm","docs\u002F5.services\u002F8.azure-vm",{"title":1792,"path":1793,"stem":1794},"Recommendation Workflow","\u002Fdocs\u002Frecommendation-workflow","docs\u002F6.recommendation-workflow",{"title":1552,"path":1796,"stem":1797},"\u002Fdocs\u002Fapi-reference","docs\u002F7.api-reference",{"title":1621,"path":1620,"stem":1799},"docs\u002F8.faq",[1801,1803],{"title":1745,"path":1746,"stem":1747,"description":1802,"children":-1},"Jetscale integrates with Slack to deliver real-time cost optimization notifications directly to your team channels, keeping everyone informed about new recommendations,...",{"title":1750,"path":1751,"stem":1752,"description":1804,"children":-1},"How Jetscale's AI generates cost optimization recommendations while maintaining performance and reliability",1788204003692]