Files
nexus/sreweekly/articles/60/03-gitlab-com-runbooks.html
2026-09-12 17:23:01 +08:00

473 lines
58 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="gl-system ui-neutral with-top-bar with-header page-theme-background page-with-panels with-gl-container-queries user-logged-out aura-tinted-themes" lang="en">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>GitLab.com / Runbooks · GitLab</title>
<link crossorigin="" href="https://snowplowprd.trx.gitlab.net" rel="preconnect">
<link as="font" crossorigin="" href="/assets/gitlab-sans/GitLabSans-9892dc17af892e03de41625c0ee325117a3b8ee4ba6005f3a3eac68510030aed.woff2" rel="preload">
<link as="font" crossorigin="" href="/assets/gitlab-sans/GitLabSans-Italic-f96f17332d67b21ada2dfba5f0c0e1d5801eab99330472057bf18edd93d4ccf7.woff2" rel="preload">
<link as="font" crossorigin="" href="/assets/gitlab-mono/GitLabMono-29c2152dac8739499dd0fe5cd37a486ebcc7d4798c9b6d3aeab65b3172375b05.woff2" rel="preload">
<link as="font" crossorigin="" href="/assets/gitlab-mono/GitLabMono-Italic-af36701a2188df32a9dcea12e0424c380019698d4f76da9ad8ea2fd59432cf83.woff2" rel="preload">
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
window.gon={};gon.api_version="v4";gon.default_avatar_url="https://gitlab.com/assets/no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c45b403392f0e8ba.png";gon.max_file_size=100;gon.asset_host=null;gon.webpack_public_path="/assets/webpack/";gon.relative_url_root="";gon.user_color_mode="gl-system";gon.user_color_scheme="white";gon.markdown_surround_selection=null;gon.markdown_automatic_lists=null;gon.markdown_maintain_indentation=null;gon.math_rendering_limits_enabled=true;gon.iframe_rendering_enabled=true;gon.iframe_rendering_allowlist=["embed.figma.com","www.figma.com","www.youtube.com"];gon.sentry_dsn="https://f5573e26de8f4293b285e556c35dfd6e@new-sentry.gitlab.net/4";gon.sentry_environment="gprd";gon.sentry_clientside_traces_sample_rate=0.05;gon.recaptcha_api_server_url="https://www.recaptcha.net/recaptcha/api.js";gon.recaptcha_sitekey="6LfAERQTAAAAAL4GYSiAMGLbcLyUIBSfPrDNJgeC";gon.gitlab_url="https://gitlab.com";gon.promo_url="https://about.gitlab.com";gon.forum_url="https://forum.gitlab.com";gon.docs_url="https://docs.gitlab.com";gon.revision="08a6e1da944";gon.feature_category="groups_and_projects";gon.gitlab_logo="/assets/gitlab_logo-2957169c8ef64c58616a1ac3f4fc626e8a35ce4eb3ed31bb0d873712f2a041a0.png";gon.secure=true;gon.sprite_icons="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg";gon.sprite_file_icons="/assets/file_icons/file_icons-90de312d3dbe794a19dee8aee171f184ff69ca9c9cf9fe37e8b254e84c3a1543.svg";gon.illustrations_path="/assets/illustrations-ae6d9d10410e9e8b59dd365dcf0480219354eb6eed057c8fecd9d17cf9b18ec4.svg";gon.emoji_sprites_css_path="/assets/emoji_sprites-9f4e433199c18178b03727c749cbd0c22e569f69ffb05ec235a49dc29b318bb3.css";gon.emoji_backend_version=4;gon.test_env=false;gon.disable_animations=null;gon.suggested_label_colors={"#cc338b":"Magenta-pink","#dc143c":"Crimson","#c21e56":"Rose red","#cd5b45":"Dark coral","#ed9121":"Carrot orange","#eee600":"Titanium yellow","#009966":"Green-cyan","#8fbc8f":"Dark sea green","#6699cc":"Blue-gray","#e6e6fa":"Lavender","#9400d3":"Dark violet","#330066":"Deep violet","#36454f":"Charcoal grey","#808080":"Gray"};gon.first_day_of_week=0;gon.time_display_relative=true;gon.time_display_format=0;gon.ee=true;gon.jh=false;gon.dot_com=true;gon.uf_error_prefix="UF";gon.pat_prefix="glpat-";gon.fluid_layout=false;gon.keyboard_shortcuts_enabled=true;gon.emoji_autocomplete_enabled=true;gon.broadcast_message_dismissal_path=null;gon.diagramsnet_url="https://embed.diagrams.net";gon.features={"uiForOrganizations":false,"pageBreadcrumbsInTopBar":false,"orgSwitcher":false,"findAndReplace":false,"removeMonitorMetrics":true,"workItemsClientSideBoards":false,"editorStickyTableHeaders":false,"hideUnpinnedSidebarItems":false,"markdownSortableTableColumns":false,"workItemFeaturesField":false,"securityManagerRoleEnabled":true,"advancedContextResolver":true,"duoUiNext":false,"duoChatBinaryFeedback":true,"duoWorkplanAsyncFlow":false,"agenticManualRetryForDuoChatResponses":false,"duoChatClarificationQuestionTool":false,"agenticChatFlowRegistryMigration":false,"noDuoClassicForDuoCoreUsers":true,"duoPanelSessionInbox":false,"sessionDetailsSidePanelInfoOverlay":true,"dapWebSearch":false,"duoChatFlowCommands":false,"duoChatGoalCommand":false,"newModelSelection":false,"duoChatRedesign":false,"orbitUserPreference":true,"knowledgeGraph":true,"orbitFoundationalAgent":true,"allowIframesInMarkdown":false,"inlineBlame":true,"pageSpecificStyles":false,"repositoryLockInformation":true,"duoSecretDetectionFalsePositive":true};gon.roadmap_epics_limit=1000;gon.subscriptions_url="https://customers.gitlab.com";gon.subscriptions_legacy_sign_in_url="https://customers.gitlab.com/customers/sign_in?legacy=true";gon.billing_accounts_url="https://customers.gitlab.com/billing_accounts";gon.is_gitlab_team_member=false;gon.licensed_features={"fileLocks":true,"securityOrchestrationPolicies":true,"remoteDevelopment":true};gon.abilities={"readCodeNavigation":false};gon.saas_features={"groupProjectPermanentDeletionConfirmation":true};gon.dedicated_features={"groupProjectPermanentDeletionConfirmation":false};
//]]>
</script>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
const root = document.documentElement;
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
root.classList.add('gl-dark');
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (e.matches) {
root.classList.add('gl-dark');
} else {
root.classList.remove('gl-dark');
}
});
//]]>
</script>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
var gl = window.gl || {};
gl.startup_calls = {"/gitlab-com/runbooks/-/refs/master/logs_tree/?format=json\u0026offset=0\u0026ref_type=HEADS":{},"/gitlab-com/runbooks/-/blob/master/README.md?format=json\u0026ref_type=heads\u0026viewer=rich":{}};
gl.startup_graphql_calls = [{"query":"# @feature_category: source_code_management\nquery pathLastCommit($projectPath: ID!, $path: String, $ref: String!, $refType: RefType) {\n project(fullPath: $projectPath) {\n __typename\n id\n repository {\n __typename\n lastCommit(path: $path, ref: $ref, refType: $refType) {\n __typename\n id\n sha\n title\n titleHtml\n descriptionHtml\n message\n webPath\n committerName\n committerEmail\n committedDate\n authoredDate\n authorName\n authorEmail\n authorGravatar\n author {\n __typename\n id\n name\n avatarUrl\n webPath\n }\n signature {\n __typename\n ... on GpgSignature {\n gpgKeyPrimaryKeyid\n verificationStatus\n }\n ... on X509Signature {\n verificationStatus\n x509Certificate {\n id\n subject\n subjectKeyIdentifier\n x509Issuer {\n id\n subject\n subjectKeyIdentifier\n }\n }\n }\n ... on SshSignature {\n verificationStatus\n keyFingerprintSha256\n }\n }\n pipelines(ref: $ref, first: 1) {\n __typename\n edges {\n __typename\n node {\n __typename\n id\n detailedStatus {\n __typename\n id\n detailsPath\n icon\n text\n }\n }\n }\n }\n }\n }\n }\n}\n","variables":{"projectPath":"gitlab-com/runbooks","ref":"master","path":""}}];
if (gl.startup_calls && window.fetch) {
Object.keys(gl.startup_calls).forEach(apiCall => {
gl.startup_calls[apiCall] = {
fetchCall: fetch(apiCall, {
// Emulate XHR for Rails AJAX request checks
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
// fetch won’t send cookies in older browsers, unless you set the credentials init option.
// We set to `same-origin` which is default value in modern browsers.
// See https://github.com/whatwg/fetch/pull/585 for more information.
credentials: 'same-origin'
})
};
});
}
if (gl.startup_graphql_calls && window.fetch) {
const headers = {"X-CSRF-Token":"EdpoMNiFSSL-Sz4DF7oVw36UD_4ymdG12UUV9PMoTgWJ3a_TrdpGEJoPXv1fH0vYvaPbHWXJkVzsk_Iys2rZ6g","x-gitlab-feature-category":"groups_and_projects"};
const url = `https://gitlab.com/api/graphql`
const opts = {
method: "POST",
headers: {
"Content-Type": "application/json",
...headers,
}
};
gl.startup_graphql_calls = gl.startup_graphql_calls.map(call => ({
...call,
fetchCall: fetch(url, {
...opts,
credentials: 'same-origin',
body: JSON.stringify(call)
})
}))
}
//]]>
</script>
<meta content="light dark" name="color-scheme">
<link rel="stylesheet" href="/assets/application-ba057ac0f7bd4464c18ef9684781e026fdfe343b1677994bb2e4221b3b7c5695.css" media="(prefers-color-scheme: light)" />
<link rel="stylesheet" href="/assets/application_dark-301a22a63757f20a93bd06cedc3f4b9286b2b9b2c0928b9de7f417b2a8a8314a.css" media="(prefers-color-scheme: dark)" />
<link rel="stylesheet" href="/assets/page_bundles/project-d8ddfdcca11af4ede140816f3befd2a538014d7403c28e0f3c62a50b61f93805.css" /><link rel="stylesheet" href="/assets/page_bundles/tree-82a2b0a643427b8cc237cf2437e78bf5ad46c53355f902927c25570510d6852a.css" /><link rel="stylesheet" href="/assets/page_bundles/commit_description-9e7efe20f0cef17d0606edabfad0418e9eb224aaeaa2dae32c817060fa60abcc.css" /><link rel="stylesheet" href="/assets/page_bundles/projects-3edb349b720018c3d44f6bece4028f73d0b91a5c0016611274e1e44bbbfd80b0.css" /><link rel="stylesheet" href="/assets/page_bundles/work_items-a1be8a74565374919995f5805fd7959f71dd63d65691094d33c97c93e955c084.css" /><link rel="stylesheet" href="/assets/page_bundles/notes_shared-009bfb6fa90b583372e5d3f444ccd9b89aa6278564b128d1f21b404747a3981b.css" />
<link rel="stylesheet" href="/assets/tailwind-94d6d9cb54ebcf7e53d008a8cda08f962c655b626a35d306907b095c24138893.css" />
<link rel="stylesheet" href="/assets/fonts-deb7ad1d55ca77c0172d8538d53442af63604ff490c74acc2859db295c125bdb.css" />
<link rel="stylesheet" href="/assets/highlight/themes/white-7fc95f0d1a131c010fdec7cec17d7f14b49ec9d6014024588c004f24bcccb686.css" media="(prefers-color-scheme: light)" />
<link rel="stylesheet" href="/assets/highlight/themes/dark-8b75e38954603252cafdeeeabf5e074576b77c9b139f9e8936ff09251f139e4b.css" media="(prefers-color-scheme: dark)" />
<script src="/assets/webpack/runtime.202bdf77.bundle.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/main.b75140a3.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/tracker.eea7cc16.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
window.snowplowOptions = {"namespace":"gl","hostname":"snowplowprd.trx.gitlab.net","cookieDomain":".gitlab.com","appId":"gitlab","formTracking":true,"linkClickTracking":true};
gl = window.gl || {};
gl.snowplowStandardContext = {"schema":"iglu:com.gitlab/gitlab_standard/jsonschema/1-1-8","data":{"environment":"production","source":"gitlab-rails","correlation_id":"a393652a5bea2f11-LAX","extra":{},"user_id":null,"global_user_id":null,"user_type":null,"is_gitlab_team_member":null,"namespace_id":6543,"ultimate_parent_namespace_id":6543,"project_id":1148549,"feature_enabled_by_namespace_ids":null,"realm":"saas","deployment_type":".com","context_generated_at":"2026-09-11T02:55:44.086Z","organization_id":1}};
gl.snowplowPseudonymizedPageUrl = "https://gitlab.com/namespace6543/project1148549";
gl.maskedDefaultReferrerUrl = null;
gl.ga4MeasurementId = 'G-ENFH3X7M5Y';
gl.duoEvents = ["ai_question_category","block_slack_duo_mention","perform_completion_worker","receive_slack_duo_mention","process_gitlab_duo_question","agent_platform_session_created","agent_platform_session_dropped","agent_platform_session_finished","agent_platform_session_resumed","agent_platform_session_started","agent_platform_session_stopped","ai_response_time","approve_tool_duo_chat","cleanup_stuck_agent_platform_session","click_ai_catalog_button_duo_rail","click_dap_trial_or_paid_empty_state_agent","click_dap_trial_or_paid_empty_state_explore_agents_link","click_dap_trial_or_paid_empty_state_prompt","click_delete_ai_catalog_item_button","click_disable_ai_catalog_item_button","click_duo_agentic_not_available_empty_state_learn_more","click_duo_agentic_not_available_empty_state_start_trial","click_duo_agentic_subscription_expired_learn_more","click_duo_agentic_subscription_expired_upgrade","click_duo_agentic_trial_expired_learn_more","click_duo_agentic_trial_expired_upgrade","click_duo_quick_action","click_duplicate_ai_catalog_item_button","click_enable_ai_catalog_item_button","click_purchase_seats_button_group_duo_pro_home_page","click_through_flow_widget","click_through_session_pill","close_vulnerability_resolution_merge_request","code_suggestion_accepted_in_ide","code_suggestion_rejected_in_ide","code_suggestion_shown_in_ide","code_suggestions_connection_details_rate_limit_exceeded","code_suggestions_direct_access_rate_limit_exceeded","code_suggestions_rate_limit_exceeded","create_ai_catalog_item","create_ai_catalog_item_consumer","create_ai_self_hosted_model","create_vulnerability_resolution_merge_request","default_answer","delete_ai_catalog_item","delete_ai_catalog_item_consumer","delete_ai_self_hosted_model","deny_tool_duo_chat","detected_high_comment_temperature","detected_repeated_high_comment_temperature","dismiss_sast_vulnerability_false_positive_analysis","dismiss_secret_detection_vulnerability_false_positive_analysis","duo_workflow_workload_completed","encounter_duo_code_review_error_during_review","error_answer","excluded_files_from_duo_code_review","execute_llm_method","explain_vulnerability","filter_ai_fp","find_no_issues_duo_code_review_after_review","find_nothing_to_review_duo_code_review_on_mr","finish_duo_workflow_execution","finish_mcp_tool_call","fix_pipeline_suggestion_applied","fix_pipeline_suggestion_posted","forced_high_temperature_commenting","generate_merge_commit_message","generate_resolve_dependency_bump_pipeline","i_quickactions_q","include_repository_xray_data_into_code_generation_prompt","ingest_ai_audit_events_batch","maximize_duo_chat_panel","mention_gitlabduo_in_mr_comment","merge_vulnerability_resolution_merge_request","minimize_duo_chat_panel","navigate_retry_alternative_duo_agentic_chat","post_comment_duo_code_review_on_diff","process_gitlab_duo_slash_command","publish_duo_code_review_comments","react_thumbs_down_on_duo_code_review_comment","react_thumbs_up_on_duo_code_review_comment","recommend_tool_duo_chat","reported_sast_vulnerability_false_positive_analysis","reported_secret_detection_vulnerability_false_positive_analysis","request_ask_help","request_duo_chat_response","request_duo_vulnerability_resolution","request_review_duo_code_review_on_mr_by_author","request_review_duo_code_review_on_mr_by_non_author","requested_comment_temperature","resize_duo_chat_panel","resolve_feature_discovery_search","restore_ai_catalog_item","retry_duo_workflow_execution","retry_failed_duo_agentic_chat","retry_message_duo_agentic_chat","retry_succeeded_duo_agentic_chat","start_duo_workflow_execution","start_mcp_tool_call","submit_dap_trial_or_paid_empty_state_message","submit_gitlab_duo_question","summarize_new_merge_request","summarize_review","tokens_per_embedding","tokens_per_user_request_prompt","tokens_per_user_request_response","tool_failed_duo_chat","tool_succeeded_duo_chat","trigger_ai_catalog_item","trigger_resolve_dependency_bump_workflow","trigger_sast_vulnerability_fp_detection_workflow","trigger_sast_vulnerability_resolution_workflow","trigger_secret_detection_vulnerability_fp_detection_workflow","trigger_slack_duo","troubleshoot_job","update_ai_catalog_item","update_ai_catalog_item_consumer","update_ai_self_hosted_model","update_model_selection_feature","update_self_hosted_ai_feature_to_vendored_model","view_ai_catalog_item","view_ai_catalog_item_index","view_ai_catalog_project_catalog","view_ai_catalog_project_managed","view_dap_trial_or_paid_empty_state","view_duo_agentic_identity_verification_empty_state","view_duo_agentic_not_available_empty_state","view_duo_agentic_subscription_expired_empty_state","view_duo_agentic_trial_expired_empty_state"];
gl.onlySendDuoEvents = false;
//]]>
</script>
<script src="/assets/webpack/sentry.48540f8b.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/8958723c.d39b1bdb.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/13cb25ac.e1db7008.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.dashboard.issues.vue3-pages.dash-f1a925da.013aa9d9.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.deploy_keys.index-pages.admin.groups.index-pages.admin.projects.index-pages.admi-81888dbb.7163736d.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.dashboard.home-pages.registrations.new-pages.sessions.new-pages.trial_registrations.ne-cea0dc3a.894d2115.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.dashboard.home-pages.projects.snippets.show-pages.snippets.show-pages.snippets.show.vu-3fe7a6f6.18e88bbc.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/0dcf7166.fee24f6c.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/super_sidebar.717ef8ef.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.application_settings.ci_cd.vue3-pages.admin.application_settings.repository.vue3-7d61d55c.bf4ab5cf.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.application_settings.work_item.vue3-pages.admin.applications.vue3-pages.admin.gi-4917a795.8f289fa0.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.application_settings.work_item.vue3-pages.admin.dev_ops_report.show.vue3-pages.a-77e78148.668e31a4.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.application_settings.work_item.vue3-pages.admin.gitlab_duo.model_selection.vue3--533b7e7c.7e8eb459.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.groups.activity.vue3-pages.groups.analytics.ci_cd_analytics.vue3-pages.groups.analytic-d629f784.7dfbd236.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.admin.application_settings.ci_cd.vue3-pages.admin.application_settings.repository.vue3-c795aafa.70a69556.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/8632254b.1095b752.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/32327915.0ee0e967.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.explore.catalog.vue3-pages.groups.iteration_cadences.vue3-pages.groups.milestones.edit-4126e861.7a687347.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.projects.blob.show-pages.projects.blob.show.vue3-pages.projects.show-pages.projects.sh-7aa92eaa.0f6f71f0.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.projects.blob.show.vue3-pages.projects.branches.new.vue3-pages.projects.commits.show.v-3bb822c9.72766e7a.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.explore.ai_catalog.vue3-pages.explore.analytics_dashboards.vue3-pages.explore.catalog.-0eaa3189.1fb27515.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/68026c34.607df987.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.projects.blob.show-pages.projects.blob.show.vue3-pages.projects.show-pages.projects.sh-d934921b.024824b5.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/69e597b7.774dcdfd.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.groups.show-pages.groups.show.vue3-pages.projects.blob.show-pages.projects.blob.show.v-80ae293f.4c3fd36a.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.projects.blob.show-pages.projects.blob.show.vue3-pages.projects.commits.show-pages.pro-f125c149.911f3c04.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/commons-pages.projects.blob.show-pages.projects.blob.show.vue3-pages.projects.show-pages.projects.sh-9c818de7.83544dc3.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<script src="/assets/webpack/pages.projects.show.vue3.662d52bd.chunk.js" defer="defer" nonce="VCYxZKYYQ63Rv/Yv76tORg=="></script>
<meta content="object" property="og:type">
<meta content="GitLab" property="og:site_name">
<meta content="GitLab.com / Runbooks · GitLab" property="og:title">
<meta content="Runbooks for the stressed on-call https://runbooks.gitlab.com Mirrored to https://ops.gitlab.net/gitlab-com/runbooks" property="og:description">
<meta content="https://gitlab.com/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276" property="og:image">
<meta content="64" property="og:image:width">
<meta content="64" property="og:image:height">
<meta content="https://gitlab.com/gitlab-com/runbooks" property="og:url">
<meta content="summary" property="twitter:card">
<meta content="GitLab.com / Runbooks · GitLab" property="twitter:title">
<meta content="Runbooks for the stressed on-call https://runbooks.gitlab.com Mirrored to https://ops.gitlab.net/gitlab-com/runbooks" property="twitter:description">
<meta content="https://gitlab.com/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276" property="twitter:image">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="7pKUDT2WbPrBH_BLZAtDyeJXsU1ePhF_e8_5NOziJI92lVPuSMljyKVbkLUsrh3SIWBlrgluUZZOGR7yrKCzYA" />
<meta name="csp-nonce" content="VCYxZKYYQ63Rv/Yv76tORg==" />
<meta name="action-cable-url" content="/-/cable" />
<link crossorigin="use-credentials" href="/-/manifest.json" rel="manifest">
<link rel="icon" type="image/png" href="/assets/favicon-yellow-018213ceb87b472388095d0264be5b4319ef47471dacea03c83ecc233ced2fd5.png" id="favicon" data-original-href="/assets/favicon-yellow-018213ceb87b472388095d0264be5b4319ef47471dacea03c83ecc233ced2fd5.png" />
<link rel="apple-touch-icon" type="image/x-icon" href="/assets/apple-touch-icon-b049d4bc0dd9626f31db825d61880737befc7835982586d015bded10b4435460.png" />
<link crossorigin="use-credentials" href="/search/opensearch.xml" rel="search" title="Search GitLab" type="application/opensearchdescription+xml">
<link rel="alternate" type="application/atom+xml" title="Runbooks activity" href="/gitlab-com/runbooks.atom" />
<meta content="Runbooks for the stressed on-call https://runbooks.gitlab.com Mirrored to https://ops.gitlab.net/gitlab-com/runbooks" name="description">
<meta content="#F1F0F6" media="(prefers-color-scheme: light)" name="theme-color">
<meta content="#232128" media="(prefers-color-scheme: dark)" name="theme-color">
</head>
<body class="tab-width-8 gl-browser-chrome gl-platform-mac" data-group="gitlab-com" data-group-full-path="gitlab-com" data-namespace-id="6543" data-page="projects:show" data-page-type-id="runbooks" data-project="runbooks" data-project-full-path="gitlab-com/runbooks" data-project-id="1148549">
<div id="js-tooltips-container"></div>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
gl = window.gl || {};
gl.client = {"isChrome":true,"isMac":true};
//]]>
</script>
<header class="super-topbar js-super-topbar"></header>
<div class="layout-page js-page-layout page-with-super-sidebar">
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
const outer = document.createElement('div');
outer.style.visibility = 'hidden';
outer.style.overflow = 'scroll';
document.body.appendChild(outer);
const inner = document.createElement('div');
outer.appendChild(inner);
const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;
outer.parentNode.removeChild(outer);
document.documentElement.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);
//]]>
</script><aside class="js-super-sidebar super-sidebar super-sidebar-loading" data-command-palette="{&quot;project_files_url&quot;:&quot;/gitlab-com/runbooks/-/files/master?format=json&quot;,&quot;project_blob_url&quot;:&quot;/gitlab-com/runbooks/-/blob/master&quot;}" data-is-saas="true" data-sidebar="{&quot;whats_new_most_recent_release_items_count&quot;:5,&quot;whats_new_version_digest&quot;:&quot;615a74687ed5770cffa2193c02d58f017d9dd506dee7947d471b0a0c01e2fe02&quot;,&quot;whats_new_read_articles&quot;:[],&quot;is_logged_in&quot;:false,&quot;compare_plans_url&quot;:&quot;https://about.gitlab.com/pricing&quot;,&quot;current_menu_items&quot;:[{&quot;id&quot;:&quot;project_overview&quot;,&quot;title&quot;:&quot;Runbooks&quot;,&quot;avatar&quot;:&quot;/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276&quot;,&quot;entity_id&quot;:1148549,&quot;link&quot;:&quot;/gitlab-com/runbooks&quot;,&quot;link_classes&quot;:&quot;shortcuts-project&quot;,&quot;is_active&quot;:true},{&quot;id&quot;:&quot;manage_menu&quot;,&quot;title&quot;:&quot;Manage&quot;,&quot;icon&quot;:&quot;users&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/activity&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;activity&quot;,&quot;title&quot;:&quot;Activity&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/activity&quot;,&quot;link_classes&quot;:&quot;shortcuts-project-activity&quot;,&quot;description&quot;:&quot;Track what your team is working on and stay informed of changes&quot;,&quot;library_icon&quot;:&quot;history&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;members&quot;,&quot;title&quot;:&quot;Members&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/project_members&quot;,&quot;description&quot;:&quot;Control who has access to your project and what they can do&quot;,&quot;library_icon&quot;:&quot;users&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;labels&quot;,&quot;title&quot;:&quot;Labels&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/labels&quot;,&quot;description&quot;:&quot;Organize and categorize work across your project with consistent labels&quot;,&quot;library_icon&quot;:&quot;labels&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;plan_menu&quot;,&quot;title&quot;:&quot;Plan&quot;,&quot;icon&quot;:&quot;planning&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/work_items&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;project_issue_list&quot;,&quot;title&quot;:&quot;Work items&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/work_items&quot;,&quot;link_classes&quot;:&quot;shortcuts-issues has-sub-items&quot;,&quot;pill_count_field&quot;:&quot;openWorkItemsCount&quot;,&quot;pill_count_dynamic&quot;:false,&quot;description&quot;:&quot;Plan, track, and manage work in one place&quot;,&quot;library_icon&quot;:&quot;work-items&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;boards&quot;,&quot;title&quot;:&quot;Issue boards&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/boards&quot;,&quot;link_classes&quot;:&quot;shortcuts-issue-boards&quot;,&quot;description&quot;:&quot;Visualize and manage work with kanban-style boards&quot;,&quot;library_icon&quot;:&quot;work-item-issue-board&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;milestones&quot;,&quot;title&quot;:&quot;Milestones&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/milestones&quot;,&quot;description&quot;:&quot;Plan releases and group work into time-based phases&quot;,&quot;library_icon&quot;:&quot;milestone&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;iterations&quot;,&quot;title&quot;:&quot;Iterations&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/cadences&quot;,&quot;description&quot;:&quot;Group issues into time-boxed cycles to plan and track sprints&quot;,&quot;tier&quot;:&quot;premium&quot;,&quot;library_icon&quot;:&quot;iteration&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;requirements&quot;,&quot;title&quot;:&quot;Requirements&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/requirements_management/requirements&quot;,&quot;description&quot;:&quot;Set criteria to check your products against&quot;,&quot;library_icon&quot;:&quot;requirements&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;external_issue_tracker&quot;,&quot;title&quot;:&quot;Custom issue tracker&quot;,&quot;link&quot;:&quot;https://gitlab.com/gitlab-com/gl-infra/infrastructure&quot;,&quot;link_classes&quot;:&quot;shortcuts-external_tracker&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;code_menu&quot;,&quot;title&quot;:&quot;Code&quot;,&quot;icon&quot;:&quot;code&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/merge_requests&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;project_merge_request_list&quot;,&quot;title&quot;:&quot;Merge requests&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/merge_requests&quot;,&quot;link_classes&quot;:&quot;shortcuts-merge_requests&quot;,&quot;pill_count_field&quot;:&quot;openMergeRequestsCount&quot;,&quot;pill_count_dynamic&quot;:false,&quot;description&quot;:&quot;Collaborate on code changes with built-in review tools&quot;,&quot;library_icon&quot;:&quot;merge-request&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;files&quot;,&quot;title&quot;:&quot;Repository&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/tree/master&quot;,&quot;link_classes&quot;:&quot;shortcuts-tree&quot;,&quot;description&quot;:&quot;Browse and manage repository files and code&quot;,&quot;library_icon&quot;:&quot;repository&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;branches&quot;,&quot;title&quot;:&quot;Branches&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/branches&quot;,&quot;description&quot;:&quot;Manage project branches and branch protection&quot;,&quot;library_icon&quot;:&quot;branch&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;commits&quot;,&quot;title&quot;:&quot;Commits&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/commits/master?ref_type=heads&quot;,&quot;link_classes&quot;:&quot;shortcuts-commits&quot;,&quot;description&quot;:&quot;View commit history and changes&quot;,&quot;library_icon&quot;:&quot;commit&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;tags&quot;,&quot;title&quot;:&quot;Tags&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/tags&quot;,&quot;description&quot;:&quot;Create and manage release tags&quot;,&quot;library_icon&quot;:&quot;tag&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;graphs&quot;,&quot;title&quot;:&quot;Repository graph&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/network/master?ref_type=heads&quot;,&quot;link_classes&quot;:&quot;shortcuts-network&quot;,&quot;description&quot;:&quot;Visualize repository commit history and branches&quot;,&quot;library_icon&quot;:&quot;repository-graph&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;compare&quot;,&quot;title&quot;:&quot;Compare revisions&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/compare?from=master\u0026to=master&quot;,&quot;description&quot;:&quot;Compare changes between revisions&quot;,&quot;library_icon&quot;:&quot;comparison&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;project_snippets&quot;,&quot;title&quot;:&quot;Snippets&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/snippets&quot;,&quot;link_classes&quot;:&quot;shortcuts-snippets&quot;,&quot;description&quot;:&quot;Store and share code snippets&quot;,&quot;library_icon&quot;:&quot;snippet&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;file_locks&quot;,&quot;title&quot;:&quot;Locked files&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/path_locks&quot;,&quot;description&quot;:&quot;Manage file locks to prevent conflicting changes&quot;,&quot;tier&quot;:&quot;premium&quot;,&quot;library_icon&quot;:&quot;doc-locked&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;deploy_menu&quot;,&quot;title&quot;:&quot;Deploy&quot;,&quot;icon&quot;:&quot;deployments&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/releases&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;releases&quot;,&quot;title&quot;:&quot;Releases&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/releases&quot;,&quot;link_classes&quot;:&quot;shortcuts-deployments-releases&quot;,&quot;description&quot;:&quot;Create and manage project releases&quot;,&quot;library_icon&quot;:&quot;release&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;container_registry&quot;,&quot;title&quot;:&quot;Container registry&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/container_registry&quot;,&quot;description&quot;:&quot;Store and deploy container images&quot;,&quot;library_icon&quot;:&quot;container-image&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;model_registry&quot;,&quot;title&quot;:&quot;Model registry&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/ml/models&quot;,&quot;description&quot;:&quot;Store and manage machine learning models&quot;,&quot;library_icon&quot;:&quot;model-registry&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;operations_menu&quot;,&quot;title&quot;:&quot;Operate&quot;,&quot;icon&quot;:&quot;cloud-pod&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/environments&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;environments&quot;,&quot;title&quot;:&quot;Environments&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/environments&quot;,&quot;link_classes&quot;:&quot;shortcuts-environments&quot;,&quot;description&quot;:&quot;Manage your staging and production deployments&quot;,&quot;library_icon&quot;:&quot;environment&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;monitor_menu&quot;,&quot;title&quot;:&quot;Monitor&quot;,&quot;icon&quot;:&quot;monitor&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/incidents&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;incidents&quot;,&quot;title&quot;:&quot;Incidents&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/incidents&quot;,&quot;description&quot;:&quot;Manage incident response and resolution&quot;,&quot;library_icon&quot;:&quot;work-item-incident&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false},{&quot;id&quot;:&quot;analyze_menu&quot;,&quot;title&quot;:&quot;Analyze&quot;,&quot;icon&quot;:&quot;chart&quot;,&quot;avatar_shape&quot;:&quot;rect&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/value_stream_analytics&quot;,&quot;is_active&quot;:false,&quot;items&quot;:[{&quot;id&quot;:&quot;cycle_analytics&quot;,&quot;title&quot;:&quot;Value stream analytics&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/value_stream_analytics&quot;,&quot;link_classes&quot;:&quot;shortcuts-project-cycle-analytics&quot;,&quot;description&quot;:&quot;Analyze value stream and cycle time&quot;,&quot;library_icon&quot;:&quot;value-stream-analytics&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;contributors&quot;,&quot;title&quot;:&quot;Contributor analytics&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/graphs/master?ref_type=heads&quot;,&quot;description&quot;:&quot;Track and view member contributions and activity&quot;,&quot;library_icon&quot;:&quot;contributor-analytics&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;repository_analytics&quot;,&quot;title&quot;:&quot;Repository analytics&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/graphs/master/charts&quot;,&quot;link_classes&quot;:&quot;shortcuts-repository-charts&quot;,&quot;description&quot;:&quot;Analyze repository coverage, statistics, and metrics&quot;,&quot;library_icon&quot;:&quot;repository-analytics&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;code_review&quot;,&quot;title&quot;:&quot;Code review analytics&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/analytics/code_reviews&quot;,&quot;description&quot;:&quot;Measure code review efficiency and merge request throughput&quot;,&quot;tier&quot;:&quot;premium&quot;,&quot;library_icon&quot;:&quot;code-review-analytics&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;issues&quot;,&quot;title&quot;:&quot;Issue analytics&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/analytics/issues_analytics&quot;,&quot;description&quot;:&quot;Track issue metrics, trends, and throughput&quot;,&quot;tier&quot;:&quot;premium&quot;,&quot;library_icon&quot;:&quot;work-item-issue-analytics&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;insights&quot;,&quot;title&quot;:&quot;Insights&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/insights/&quot;,&quot;link_classes&quot;:&quot;shortcuts-project-insights&quot;,&quot;description&quot;:&quot;View insights and build custom charts and reports&quot;,&quot;tier&quot;:&quot;ultimate&quot;,&quot;library_icon&quot;:&quot;bulb&quot;,&quot;is_active&quot;:false},{&quot;id&quot;:&quot;model_experiments&quot;,&quot;title&quot;:&quot;Model experiments&quot;,&quot;link&quot;:&quot;/gitlab-com/runbooks/-/ml/experiments&quot;,&quot;description&quot;:&quot;Track and manage machine learning experiments&quot;,&quot;library_icon&quot;:&quot;machine-learning&quot;,&quot;is_active&quot;:false}],&quot;separated&quot;:false}],&quot;current_context_header&quot;:&quot;Project&quot;,&quot;support_path&quot;:&quot;https://support.gitlab.com&quot;,&quot;display_whats_new&quot;:true,&quot;show_version_check&quot;:null,&quot;search&quot;:{&quot;search_context&quot;:{&quot;group&quot;:{&quot;id&quot;:6543,&quot;name&quot;:&quot;GitLab.com&quot;,&quot;full_name&quot;:&quot;GitLab.com&quot;},&quot;group_metadata&quot;:{&quot;issues_path&quot;:&quot;/groups/gitlab-com/-/issues&quot;,&quot;mr_path&quot;:&quot;/groups/gitlab-com/-/merge_requests&quot;},&quot;project&quot;:{&quot;id&quot;:1148549,&quot;name&quot;:&quot;Runbooks&quot;},&quot;project_metadata&quot;:{&quot;mr_path&quot;:&quot;/gitlab-com/runbooks/-/merge_requests&quot;,&quot;issues_path&quot;:&quot;/gitlab-com/runbooks/-/issues&quot;},&quot;code_search&quot;:true,&quot;ref&quot;:&quot;master&quot;,&quot;scope&quot;:null,&quot;for_snippets&quot;:null}},&quot;panel_type&quot;:&quot;project&quot;,&quot;shortcut_links&quot;:[{&quot;title&quot;:&quot;Snippets&quot;,&quot;href&quot;:&quot;/explore/snippets&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-snippets&quot;},{&quot;title&quot;:&quot;Groups&quot;,&quot;href&quot;:&quot;/explore/groups&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-groups&quot;},{&quot;title&quot;:&quot;Projects&quot;,&quot;href&quot;:&quot;/explore/projects&quot;,&quot;css_class&quot;:&quot;dashboard-shortcuts-projects&quot;}],&quot;has_terms&quot;:true,&quot;allow_signup&quot;:&quot;true&quot;,&quot;pinned_items&quot;:[&quot;project_overview&quot;,&quot;members&quot;,&quot;project_issue_list&quot;,&quot;branches&quot;,&quot;project_merge_request_list&quot;,&quot;pipelines&quot;],&quot;trial_registration_path&quot;:&quot;/-/trial_registrations/new&quot;}"></aside>
<div class="broadcast-wrapper gl-rounded-lg gl-overflow-hidden">
</div>
<div class="panels-container gl-flex gl-gap-3">
<div class="content-panels gl-flex-1 gl-w-full gl-flex gl-gap-0 gl-relative js-content-panels gl-@container/content-panels">
<div class="paneled-view static-panel js-static-panel js-paneled-view content-wrapper">
<div class="panel-header">
<div class="panel-header-inner js-panel-header-inner">
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"GitLab.com","item":"https://gitlab.com/gitlab-com"},{"@type":"ListItem","position":2,"name":"Runbooks","item":"https://gitlab.com/gitlab-com/runbooks"}]}
</script>
<div data-testid="breadcrumb-links" id="js-vue-page-breadcrumbs-wrapper">
<div data-breadcrumbs-json="[{&quot;text&quot;:&quot;GitLab.com&quot;,&quot;href&quot;:&quot;/gitlab-com&quot;,&quot;avatarPath&quot;:&quot;/uploads/-/system/group/avatar/6543/gitlab_logo_192x192.png?v=1747162543&quot;},{&quot;text&quot;:&quot;Runbooks&quot;,&quot;href&quot;:&quot;/gitlab-com/runbooks&quot;,&quot;avatarPath&quot;:&quot;/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276&quot;}]" id="js-vue-page-breadcrumbs"></div>
<div id="js-injected-page-breadcrumbs"></div>
</div>
<div id="js-page-breadcrumbs-extra"></div>
<div class="panel-header-inner-actions">
<div class="panel-header-inner-actions-portal-target js-panel-actions-portal-target"></div>
</div>
</div>
</div>
<div class="panel-content">
<div class="panel-content-inner js-static-panel-inner">
<div class="alert-wrapper alert-wrapper-top-space gl-flex gl-flex-col gl-gap-3 container-fluid container-limited">
</div>
<div class="container-fluid container-limited project-highlight-puc">
<main class="content gl-@container/panel" id="content-body" itemscope itemtype="http://schema.org/SoftwareSourceCode">
<div id="js-drawer-container"></div>
<div class="flash-container flash-container-page sticky" data-testid="flash-container">
<div id="js-global-alerts"></div>
</div>
<header class="project-home-panel js-show-on-project-root gl-mt-2">
<div class="gl-flex gl-justify-between gl-flex-wrap gl-flex-col gl-gap-5 @sm/panel:gl-flex-row">
<div class="home-panel-title-row gl-flex gl-items-center">
<img srcset="/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276&amp;width=48 1x, /uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276&amp;width=96 2x" class="gl-avatar gl-avatar-s48 gl-self-start gl-shrink-0 gl-mr-4" height="48" width="48" loading="lazy" itemprop="image" alt="Runbooks" src="/uploads/-/system/project/avatar/1148549/dont_panic_towel.jpg?v=1789090276&amp;width=48" />
<h1 class="home-panel-title gl-heading-1 gl-flex gl-items-center gl-flex-wrap gl-gap-3 gl-break-anywhere gl-mb-0" data-testid="project-name-content" itemprop="name">
Runbooks
<button class="has-tooltip gl-border-0 gl-bg-transparent gl-p-0 gl-leading-0 gl-text-inherit visibility-icon gl-inline-flex" data-container="body" data-placement="top" title="Public - The project can be accessed without any authentication." type="button" aria-label="Public - The project can be accessed without any authentication."><svg class="s16 gl-fill-icon-subtle" data-testid="earth-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#earth"></use></svg></button>
</h1>
</div>
<div data-can-read-project="true" data-can-request-access="false" data-can-withdraw-access-request="false" data-dashboard-path="/dashboard/projects" data-frameworks="[{:compliance_framework_badge_color=&gt;&quot;#dc143c&quot;, :compliance_framework_badge_name=&gt;&quot;Product&quot;, :compliance_framework_badge_title=&gt;&quot;Part of GitLab’s software supply chain (i.e. used to build, package, release, deploy GitLab, or used as part of the product)&quot;}]" data-is-project-empty="false" data-project-full-path="gitlab-com/runbooks" data-project-id="1148549" data-request-access-path="/gitlab-com/runbooks/-/project_members/request_access" data-sign-in-path="/users/sign_in?redirect_to_referer=yes" data-star-count="621" data-starred="false" data-starrers-path="/gitlab-com/runbooks/-/starrers" data-withdraw-access-request-path="/gitlab-com/runbooks/-/project_members/leave" id="js-home-panel"></div>
</div>
</header>
<div class="project-page-indicator js-show-on-project-root"></div>
<div class="project-page-layout">
<div class="project-page-layout-sidebar js-show-on-project-root gl-mt-5">
<aside class="project-page-sidebar" data-testid="project-page-sidebar">
<div class="project-page-sidebar-block home-panel-home-desc gl-py-4 gl-border-b gl-border-b-subtle !gl-pt-2">
<h2 class="gl-text-base gl-font-bold gl-leading-reset gl-text-heading gl-m-0 gl-mb-1">Project information</h2>
<div class="home-panel-description gl-break-words">
<div class="home-panel-description-markdown read-more-container" data-read-more-height="320" itemprop="description">
<div class="read-more-content read-more-content--has-scrim">
<p data-sourcepos="1:1-1:33" dir="auto">Runbooks for the stressed on-call</p>&#x000A;<p data-sourcepos="3:1-3:27" dir="auto"><a data-sourcepos="3:1-3:27" href="https://runbooks.gitlab.com" rel="nofollow noreferrer noopener" target="_blank">https://runbooks.gitlab.com</a></p>&#x000A;<p data-sourcepos="5:1-5:54" dir="auto">Mirrored to <a data-sourcepos="5:13-5:54" href="https://ops.gitlab.net/gitlab-com/runbooks" rel="nofollow noreferrer noopener" target="_blank">https://ops.gitlab.net/gitlab-com/runbooks</a></p>
</div>
<div class="js-read-more-trigger gl-hidden gl-w-full gl-h-8 gl-absolute gl-bottom-0 gl-z-2 gl-bg-default">
<button aria-label="Expand project information" type="button" class="gl-button btn btn-md btn-link "><span class="gl-button-text">
<svg class="s14" data-testid="chevron-down-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#chevron-down"></use></svg>
Read more
</span>
</button></div>
</div>
</div>
<div class="gl-mb-2 !gl-mb-4">
<div class="progress repository-languages-bar js-show-on-project-root"><div class="progress-bar has-tooltip" style="width: 87.22%; background-color:#0064bd" data-html="true" title="&lt;span class=&quot;repository-language-bar-tooltip-language&quot;&gt;Jsonnet&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;repository-language-bar-tooltip-share&quot;&gt;87.2%&lt;/span&gt;"></div><div class="progress-bar has-tooltip" style="width: 6.98%; background-color:#701516" data-html="true" title="&lt;span class=&quot;repository-language-bar-tooltip-language&quot;&gt;Ruby&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;repository-language-bar-tooltip-share&quot;&gt;7.0%&lt;/span&gt;"></div><div class="progress-bar has-tooltip" style="width: 4.92%; background-color:#89e051" data-html="true" title="&lt;span class=&quot;repository-language-bar-tooltip-language&quot;&gt;Shell&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;repository-language-bar-tooltip-share&quot;&gt;4.9%&lt;/span&gt;"></div><div class="progress-bar has-tooltip" style="width: 0.31%; background-color:#3178c6" data-html="true" title="&lt;span class=&quot;repository-language-bar-tooltip-language&quot;&gt;TypeScript&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;repository-language-bar-tooltip-share&quot;&gt;0.3%&lt;/span&gt;"></div><div class="progress-bar has-tooltip" style="width: 0.29%; background-color:#00ADD8" data-html="true" title="&lt;span class=&quot;repository-language-bar-tooltip-language&quot;&gt;Go&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;repository-language-bar-tooltip-share&quot;&gt;0.3%&lt;/span&gt;"></div></div>
</div>
<div class="project-badges gl-mb-2 gl-flex gl-flex-wrap gl-gap-2" data-testid="project-badges-content">
<a class="gl-leading-1" data-qa-link-url="https://gitlab.com/gitlab-com/runbooks/-/releases" data-testid="badge-image-link" href="https://gitlab.com/gitlab-com/runbooks/-/releases" rel="noopener noreferrer" target="_blank"><img alt="Project badge" aria-hidden class="project-badge" src="https://gitlab.com/gitlab-com/runbooks/-/badges/release.svg"></a></div>
</div>
<div class="project-page-sidebar-block gl-py-4 gl-border-b gl-border-b-subtle">
<nav class="project-stats">
<ul class="nav gl-gap-y-2 gl-gap-x-5">
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2" href="/gitlab-com/runbooks/-/commits/master"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="commit-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#commit"></use></svg><strong class="project-stat-value">26,001</strong> Commits</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2" href="/gitlab-com/runbooks/-/branches"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="branch-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#branch"></use></svg><strong class="project-stat-value">1,110</strong> Branches</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2" href="/gitlab-com/runbooks/-/tags"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="label-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#label"></use></svg><strong class="project-stat-value">2,196</strong> Tags</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2" href="/gitlab-com/runbooks/-/releases"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="rocket-launch-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#rocket-launch"></use></svg><strong class="project-stat-value">1,812</strong> Releases</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2" href="/gitlab-com/runbooks/-/environments"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="environment-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#environment"></use></svg><strong class="project-stat-value">6</strong> Environments</a>
</li>
</ul>
</nav>
</div>
<div class="project-page-sidebar-block gl-py-4 gl-border-b gl-border-b-subtle">
<div class="project-buttons gl-mb-2 js-show-on-project-root" data-testid="project-buttons">
<ul class="nav gl-gap-y-2 gl-gap-x-5">
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2 btn-default" data-event-tracking="click_readme_on_project_overview" data-event-label="view" href="/gitlab-com/runbooks/-/blob/master/README.md"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="doc-text-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#doc-text"></use></svg>README</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2 btn-default" itemprop="license" data-event-tracking="click_license_on_project_overview" data-event-label="view" href="/gitlab-com/runbooks/-/blob/master/LICENSE"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="scale-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#scale"></use></svg><span class="project-stat-value">MIT License</span></a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2 btn-default" data-event-tracking="click_contributing_on_project_overview" data-event-label="view" href="/gitlab-com/runbooks/-/blob/master/CONTRIBUTING.md"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="doc-text-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#doc-text"></use></svg>CONTRIBUTING</a>
</li>
<li class="nav-item gl-leading-1">
<a class="nav-link stat-link !gl-px-0 !gl-pb-2 btn-default" data-event-tracking="click_pages_on_project_overview" href="https://gitlab-com.gitlab.io/runbooks"><svg class="s16 gl-fill-icon-subtle gl-mr-3" data-testid="external-link-icon"><use href="/assets/icons-5a3f88503a318f1eaf3b49d9d82c93cdde31fd5224ab8aeeb08534974b21f10c.svg#external-link"></use></svg>GitLab Pages</a>
</li>
</ul>
</div>
</div>
<div data-can-view-dashboard="false" data-compliance-center-path="/groups/gitlab-com/-/security/compliance_dashboard/frameworks" data-project-path="gitlab-com/runbooks" id="js-compliance-info"></div>
<div class="project-page-sidebar-block gl-py-4">
<p class="gl-font-bold gl-text-strong gl-m-0 gl-mb-1">Created on</p>
<span>May 04, 2016</span>
</div>
</aside>
</div>
<div class="project-page-layout-content">
<div class="project-show-files">
<div class="gl-flex navigation-root">
<div id="js-file-browser" style="width:320px"></div>
<div class="gl-w-full gl-min-w-0">
<div class="tree-holder gl-clearfix js-per-page gl-mt-4" data-blame-per-page="1000" id="tree-holder">
<div data-breadcrumbs-can-collaborate="false" data-breadcrumbs-can-edit-tree="false" data-breadcrumbs-can-push-code="false" data-breadcrumbs-can-push-to-branch="false" data-breadcrumbs-new-blob-path="/gitlab-com/runbooks/-/new/master" data-breadcrumbs-new-branch-path="/gitlab-com/runbooks/-/branches/new" data-breadcrumbs-new-dir-path="/gitlab-com/runbooks/-/create_dir/master" data-breadcrumbs-new-tag-path="/gitlab-com/runbooks/-/tags/new" data-breadcrumbs-upload-path="/gitlab-com/runbooks/-/create/master" data-download-links="[{&quot;text&quot;:&quot;zip&quot;,&quot;path&quot;:&quot;/gitlab-com/runbooks/-/archive/master/runbooks-master.zip?ref_type=heads&quot;},{&quot;text&quot;:&quot;tar.gz&quot;,&quot;path&quot;:&quot;/gitlab-com/runbooks/-/archive/master/runbooks-master.tar.gz?ref_type=heads&quot;},{&quot;text&quot;:&quot;tar.bz2&quot;,&quot;path&quot;:&quot;/gitlab-com/runbooks/-/archive/master/runbooks-master.tar.bz2?ref_type=heads&quot;},{&quot;text&quot;:&quot;tar&quot;,&quot;path&quot;:&quot;/gitlab-com/runbooks/-/archive/master/runbooks-master.tar?ref_type=heads&quot;}]" data-escaped-ref="master" data-http-url="https://gitlab.com/gitlab-com/runbooks.git" data-kerberos-url="" data-new-workspace-path="/-/remote_development/workspaces/new" data-organization-id="1" data-project-id="1148549" data-project-path="gitlab-com/runbooks" data-project-root-path="/gitlab-com/runbooks" data-ref="master" data-ref-type="heads" data-root-ref="master" data-show-no-ssh-key-message="" data-ssh-url="git@gitlab.com:gitlab-com/runbooks.git" data-user-settings-ssh-keys-path="/-/user_settings/ssh_keys" data-web-ide-button-default-branch="master" data-web-ide-button-options="{&quot;project_path&quot;:&quot;gitlab-com/runbooks&quot;,&quot;ref&quot;:&quot;master&quot;,&quot;is_fork&quot;:false,&quot;needs_to_fork&quot;:true,&quot;gitpod_enabled&quot;:false,&quot;is_blob&quot;:false,&quot;show_edit_button&quot;:false,&quot;show_web_ide_button&quot;:false,&quot;show_gitpod_button&quot;:false,&quot;show_pipeline_editor_button&quot;:false,&quot;web_ide_url&quot;:&quot;/-/ide/project/gitlab-com/runbooks/edit/master&quot;,&quot;edit_url&quot;:&quot;&quot;,&quot;pipeline_editor_url&quot;:&quot;/gitlab-com/runbooks/-/ci/editor?branch_name=master&quot;,&quot;gitpod_url&quot;:&quot;https://gitpod.io/#https://gitlab.com/gitlab-com/runbooks/-/tree/master/&quot;,&quot;user_preferences_gitpod_path&quot;:&quot;/-/profile/preferences#user_gitpod_enabled&quot;,&quot;user_profile_enable_gitpod_path&quot;:&quot;/-/user_settings/profile?user%5Bgitpod_enabled%5D=true&quot;,&quot;project_id&quot;:1148549,&quot;new_workspace_path&quot;:&quot;/-/remote_development/workspaces/new&quot;,&quot;organization_id&quot;:1,&quot;fork_path&quot;:&quot;/gitlab-com/runbooks/-/forks/new&quot;,&quot;fork_modal_id&quot;:null}" data-xcode-url="" id="js-repository-blob-header-app"></div>
<div class="info-well project-last-commit gl-mt-5">
<div class="gl-flex gl-items-center gl-justify-center gl-m-auto gl-min-h-9 @lg/panel:gl-min-h-[4.5rem]" data-history-link="/gitlab-com/runbooks/-/commits/master" data-ref-type="heads" id="js-last-commit">
<div class="gl-spinner-container" role="status"><span aria-hidden class="gl-spinner gl-spinner-md gl-spinner-dark !gl-align-text-bottom"></span><span class="gl-sr-only !gl-absolute">Loading</span>
</div>
</div>
<div class="gl-hidden @sm/panel:gl-flex" data-branch="master" data-branch-rules-path="/gitlab-com/runbooks/-/settings/repository#branch-rules" id="js-code-owners"></div>
</div>
<div data-escaped-ref="master" data-explain-code-available="false" data-full-name="GitLab.com / Runbooks" data-has-revs-file="false" data-path-locks-available="true" data-path-locks-toggle="/gitlab-com/runbooks/path_locks/toggle" data-project-path="gitlab-com/runbooks" data-project-short-path="runbooks" data-ref="master" data-ref-type="heads" data-resource-id="gid://gitlab/Project/1148549" id="js-tree-list"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</div>
</div>
</div>
<div class="paneled-view-portal gl-@container/panel !gl-absolute gl-rounded-l-xl gl-shadow-lg gl-bg-default @xl/content-panels:gl-w-1/2 @xl/content-panels:gl-rounded-l-none @xl/content-panels:gl-shadow-none @xl/content-panels:!gl-relative @xl/content-panels:gl-bg-transparent gl-right-0" id="contextual-panel-portal"></div>
</div>
</div>
</div>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
if ('loading' in HTMLImageElement.prototype) {
document.querySelectorAll('img.lazy').forEach(img => {
img.loading = 'lazy';
let imgUrl = img.dataset.src;
// Only adding width + height for avatars for now
// Keep this logic in sync with appendWidthToAvatarUrl in
// app/assets/javascripts/vue_shared/components/user_avatar/utils.js
if (imgUrl.indexOf('/avatar/') > -1 && !imgUrl.includes('width=')) {
const targetWidth = img.getAttribute('width') || img.width;
imgUrl += imgUrl.includes('?') ? `&width=${targetWidth}` : `?width=${targetWidth}`;
}
img.src = imgUrl;
img.removeAttribute('data-src');
img.classList.remove('lazy');
img.classList.add('js-lazy-loaded');
img.dataset.testid = 'js-lazy-loaded-content';
});
}
//]]>
</script>
<script nonce="VCYxZKYYQ63Rv/Yv76tORg==">
//<![CDATA[
gl = window.gl || {};
gl.experiments = {};
//]]>
</script>
</body>
</html>