From c354f67962396cac9c2a1cd43b761a79fd170199 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 15 Mar 2021 15:18:27 -0400 Subject: [PATCH 01/44] Initial commit buildkite RFC #94630 --- rfcs/text/0015_buildkite.md | 149 ++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 rfcs/text/0015_buildkite.md diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md new file mode 100644 index 0000000000000..404e0f49268c7 --- /dev/null +++ b/rfcs/text/0015_buildkite.md @@ -0,0 +1,149 @@ +- Start Date: TODO +- RFC PR: (leave this empty) +- Kibana Issue: (leave this empty) + +- [Summary](#summary) +- [Motivation](#motivation) + - [Required and Desired Capabilities](#required-and-desired-capabilities) + - [Required](#required) + - [Scalable](#scalable) + - [Stable](#stable) + - [Surfaces information intuitively](#surfaces-information-intuitively) + - [Pipelines](#pipelines) + - [Cloud-friendly pricing model](#cloud-friendly-pricing-model) + - [Public access](#public-access) + - [Secrets handling](#secrets-handling) + - [Desired](#desired) + - [Customization](#customization) + - [Core functionality is first-party](#core-functionality-is-first-party) + - [First-class support for test results](#first-class-support-for-test-results) + - [Advanced Pipeline features](#advanced-pipeline-features) +- [Detailed design](#detailed-design) +- [Drawbacks](#drawbacks) +- [Alternatives](#alternatives) +- [Adoption strategy](#adoption-strategy) +- [How we teach this](#how-we-teach-this) +- [Unresolved questions](#unresolved-questions) + +# Summary + +Implement a CI system for Kibana teams that is highly scalable, is stable, surfaces information in an intuitive way, and supports pipelines that are easy to understand and change. + + + +# Motivation + +We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. + +This RFC is focused on the option of using a system other than Jenkins, and managing it ourselves (to the extend that it must be managed). If the RFC is rejected, the alternative will be to instead invest significantly into Jenkins to further stablize and scale our usage of it. + +## Required and Desired Capabilities + +### Required + +#### Scalable + +- Able to run 100s of pipelines and 1000s of individual steps in parallel without issues. +- If scaling agents/hosts is self-managed, dynamically scaling up and down based on usage should be supported and reasonably easy to do. + +#### Stable + +- Every minute of downtime can affect 100s of developers. +- For systems provided as a service, they should not have frequent outages. This is a bit hard to define. 1-2 hours of downtime, twice a month, during peak working hours, is extremely disruptive. 10 minutes of downtime once or twice a week can also be very disruptive, as builds might need to be re-triggered, etc. +- For self-hosted solutions, they should be reasonably easy to keep online and have a solution for high-availability. + +#### Surfaces information intuitively + +- Developers should be able to easily understand what happened during their builds, and find information related to failures. +- Uer interfaces should be functional and easy to use. + +#### Pipelines + +- Pipelines should be defined as code. +- Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. +- Changes to pipelines should generally be able to be tested in Pull Requests before being merged. + +#### Cloud-friendly pricing model + +If the given system has a cost, the pricing model should be cloud-friendly and/or usage-based. + +A per-agent or per-build model based on peak usage in a month is not a good model, because our peak build times are generally short-lived (e.g. around feature freeze). + +A model based on build-minutes can also be bad, if it encourages running things in parallel on bigger machines to keep costs down. For example, running two tasks on a single 2-CPU machine with our own orchestration should not be cheaper than running two tasks on two 1-CPU machines using the system's build-in orchestration. + +#### Public access + +Kibana is a publicly-available repository with contributors from outside Elastic. CI information needs to be available publicly in some form. + +#### Secrets handling + +Good, first-class support for handling secrets is a must-have for any CI system. This support can take many forms. + +- Secrets should not need to be stored in plaintext, in a repo nor on the server. +- For systems provided as a service, it is ideal if secrets are kept mostly/entirely on our infrastructure. +- There should be protections against accidentally leaking secrets to the console. +- There should be programmatic ways to manage secrets. +- Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. + +### Desired + +#### Customization + +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. + +#### Core functionality is first-party + +Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. + + + +#### First-class support for test results + +#### Advanced Pipeline features + +- Retries +- Dynamic / Optional dependencies/steps + +# Detailed design + +TODO + +# Drawbacks + +Why should we _not_ do this? Please consider: + +- implementation cost, both in term of code size and complexity +- the impact on teaching people Kibana development +- integration of this feature with other existing and planned features +- cost of migrating existing Kibana plugins (is it a breaking change?) + +There are tradeoffs to choosing any path. Attempt to identify them here. + +# Alternatives + +What other designs have been considered? What is the impact of not doing this? + +# Adoption strategy + +If we implement this proposal, how will existing Kibana developers adopt it? Is +this a breaking change? Can we write a codemod? Should we coordinate with +other projects or libraries? + +# How we teach this + +What names and terminology work best for these concepts and why? How is this +idea best presented? As a continuation of existing Kibana patterns? + +Would the acceptance of this proposal mean the Kibana documentation must be +re-organized or altered? Does it change how Kibana is taught to new developers +at any level? + +How should this feature be taught to existing Kibana developers? + +# Unresolved questions + +Optional, but suggested for first drafts. What parts of the design are still +TBD? From 3839ea48f254a16cf4f78d4775bcdd8c21fc7774 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 15 Mar 2021 15:22:41 -0400 Subject: [PATCH 02/44] Add HR to help with formatting --- rfcs/text/0015_buildkite.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index 404e0f49268c7..2fe0c5fe48c9a 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -2,6 +2,8 @@ - RFC PR: (leave this empty) - Kibana Issue: (leave this empty) +--- + - [Summary](#summary) - [Motivation](#motivation) - [Required and Desired Capabilities](#required-and-desired-capabilities) From 86cde0b90efbce3f6e600863affe1d9d33a572ff Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 15 Mar 2021 15:32:42 -0400 Subject: [PATCH 03/44] Add a few placeholder sections --- rfcs/text/0015_buildkite.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index 2fe0c5fe48c9a..e1acf97c1088d 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -23,6 +23,10 @@ - [Detailed design](#detailed-design) - [Drawbacks](#drawbacks) - [Alternatives](#alternatives) + - [Jenkins](#jenkins) + - [Other solutions](#other-solutions) + - [CircleCI](#circleci) + - [GitHub Actions](#github-actions) - [Adoption strategy](#adoption-strategy) - [How we teach this](#how-we-teach-this) - [Unresolved questions](#unresolved-questions) @@ -126,7 +130,15 @@ There are tradeoffs to choosing any path. Attempt to identify them here. # Alternatives -What other designs have been considered? What is the impact of not doing this? +## Jenkins + +TODO how Jenkins stacks up against the required/desired functionality, and the kinds of things we would need to build to get there. + +## Other solutions + +### CircleCI + +### GitHub Actions # Adoption strategy From e83a08fae3d937698a63a9d3c88306f674da3225 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 15 Mar 2021 17:47:42 -0400 Subject: [PATCH 04/44] Lots of in-progress work --- rfcs/text/0015_buildkite.md | 171 +++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 4 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index e1acf97c1088d..e09216bb8ed3a 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -15,12 +15,32 @@ - [Cloud-friendly pricing model](#cloud-friendly-pricing-model) - [Public access](#public-access) - [Secrets handling](#secrets-handling) + - [Support or Documentation](#support-or-documentation) + - [Container support](#container-support) - [Desired](#desired) - [Customization](#customization) - [Core functionality is first-party](#core-functionality-is-first-party) - [First-class support for test results](#first-class-support-for-test-results) - [Advanced Pipeline features](#advanced-pipeline-features) -- [Detailed design](#detailed-design) + - [GitHub Integration](#github-integration) +- [Buildkite - Detailed design](#buildkite---detailed-design) + - [Overview](#overview) + - [Required and Desired Capabilities](#required-and-desired-capabilities-1) + - [Required](#required-1) + - [Scalable](#scalable-1) + - [Stable](#stable-1) + - [Surfaces information intuitively](#surfaces-information-intuitively-1) + - [Pipelines](#pipelines-1) + - [Cloud-friendly pricing model](#cloud-friendly-pricing-model-1) + - [Public access](#public-access-1) + - [Secrets handling](#secrets-handling-1) + - [Support or Documentation](#support-or-documentation-1) + - [Desired](#desired-1) + - [Customization](#customization-1) + - [Core functionality is first-party](#core-functionality-is-first-party-1) + - [First-class support for test results](#first-class-support-for-test-results-1) + - [Advanced Pipeline features](#advanced-pipeline-features-1) + - [GitHub Integration](#github-integration-1) - [Drawbacks](#drawbacks) - [Alternatives](#alternatives) - [Jenkins](#jenkins) @@ -59,12 +79,14 @@ This RFC is focused on the option of using a system other than Jenkins, and mana - Every minute of downtime can affect 100s of developers. - For systems provided as a service, they should not have frequent outages. This is a bit hard to define. 1-2 hours of downtime, twice a month, during peak working hours, is extremely disruptive. 10 minutes of downtime once or twice a week can also be very disruptive, as builds might need to be re-triggered, etc. -- For self-hosted solutions, they should be reasonably easy to keep online and have a solution for high-availability. +- For self-hosted solutions, they should be reasonably easy to keep online and have a solution for high-availability. At a minimum, most upgrades should not require waiting for all currently running jobs to finish before deploying. +- Failures are ideally handled gracefully. For example, agents may continue running tasks correctly, once the primary service becomes available again. #### Surfaces information intuitively - Developers should be able to easily understand what happened during their builds, and find information related to failures. - Uer interfaces should be functional and easy to use. +- Overview and details about failures and execution time are particularly important. #### Pipelines @@ -94,6 +116,18 @@ Good, first-class support for handling secrets is a must-have for any CI system. - There should be programmatic ways to manage secrets. - Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. +#### Support or Documentation + +For paid systems, both self-hosted and as a service, good support is important. If a problem specific to Elastic is causing us downtime, we expect quick and efficient support. Again, 100s of developers are potentially affected by downtime. + +For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. + +#### Container support + +TODO + +Required or Desired? + ### Desired #### Customization @@ -110,13 +144,142 @@ Any core functionality that we depend on should be created and maintained by the #### Advanced Pipeline features -- Retries +TODO + +- Retries - automatic and manual - full and partial - Dynamic / Optional dependencies/steps +- Artifacts re-usable between tasks + - This might just be the ability to dynamically specify a docker image tag for a specific task, built from a previous step + +#### GitHub Integration + +- Ability to trigger jobs based on webhooks +- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR + +# Buildkite - Detailed design + +For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgable, and the pricing model does not encourage bad practices to lower cost. + +## Overview + +[Buildkite](https://buildkite.com/home) is a CI system where the user manages and hosts their own agents, and Buildkite manages and hosts everything else (core services, APIs, UI). + +The [Buildkite features](https://buildkite.com/features) page is a great overview of the functionality offered. + +For a public instance of Buildkite in action, check out [Bazel's Buildkite](https://buildkite.com/bazel) organization. + +## Required and Desired Capabilities + +How does Buildkite stack up against our required and desired capabilities? + +### Required + +#### Scalable + +Buildkite claims to support up to 10,000 connected agents "without breaking a sweat." + +We were able to connect 2,200 running agents and run a [single job with 1,800 parallel build steps](https://buildkite.com/elastic/kibana-custom/builds/8). The job ran with only about 15 seconds of total overhead (the rest of the time, the repo was being cloned, or the actual tasks were executing). We would likely never define a single job this large, but not only did it execute without any problems, the UI handles it very well. + +2,200 agents was the maximum that we were able to test because of quotas on our GCP account that could not easily be increased. + +TODO test a large number of parallel jobs as well? + +TODO link to agent manager info + +#### Stable + +So far, we have witnessed no stability issues in our testing. + +If Buildkite's status pages are accurate, they seem to be extremely stable, and respond quickly to issues. + +- [Buildkite Status](https://www.buildkitestatus.com/) +- [Historical Uptime](https://www.buildkitestatus.com/uptime) +- [Incident History](https://www.buildkitestatus.com/history) + +TODO check our Buildkite SLA? Can we put that info in here or is it under NDA? + +TODO talk about agents, GCP, zones, etc + +TODO how does Buildkite handle failures? What happens to jobs? Even if poorly, downtime seems to be very rare + +#### Surfaces information intuitively + +The Buildkite UI is very easy to use, and works as expected. Here is some of the information surfaced for each build: + +- The overall status of the job, as well as which steps succeeded and failed. +- Logs for each individual step +- The timeline for each individual step, including how long it took Buildkite to schedule/handle the job on their end +- Artifacts uploaded by each step +- The entire agent/job configuration at the time the step executed, expressed as environment variables + +TODO how are complex pipelines (dependencies) handled in the UI? + +TODO screenshots? links? + +TODO link to customization section once complete - we can surface any extra information we want + +#### Pipelines + +- Pipelines should be defined as code. +- Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. +- Changes to pipelines should generally be able to be tested in Pull Requests before being merged. + +#### Cloud-friendly pricing model + +Buildkite is priced using a per-user model. [TODO what is a user? a committer?] That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. + +However, since we manage our own agents, we will still pay for our compute usage, and will need to consider that cost when designing our pipelines. + +#### Public access + +Buildkite has read-only public access, configurable for each pipeline. An organization can contain a mix of both public and private pipelines. + +There are not fine-grained settings for this, and all information in the build is publicly accessible. (TODO: confirm) + +#### Secrets handling + +Good, first-class support for handling secrets is a must-have for any CI system. This support can take many forms. + +- Secrets should not need to be stored in plaintext, in a repo nor on the server. +- For systems provided as a service, it is ideal if secrets are kept mostly/entirely on our infrastructure. +- There should be protections against accidentally leaking secrets to the console. +- There should be programmatic ways to manage secrets. +- Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. -# Detailed design +#### Support or Documentation + +For paid systems, both self-hosted and as a service, good support is important. If a problem specific to Elastic is causing us downtime, we expect quick and efficient support. Again, 100s of developers are potentially affected by downtime. + +For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. + +### Desired + +#### Customization + +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. + +#### Core functionality is first-party + +Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. + + + +#### First-class support for test results + +#### Advanced Pipeline features TODO +- Retries - automatic and manual - full and partial +- Dynamic / Optional dependencies/steps +- Artifacts re-usable between tasks + - This might just be the ability to dynamically specify a docker image tag for a specific task, built from a previous step + +#### GitHub Integration + +- Ability to trigger jobs based on webhooks +- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR + # Drawbacks Why should we _not_ do this? Please consider: From 75c1af7a545f88a3b0cd23b10ba84fba1bfc0443 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 15 Mar 2021 17:49:10 -0400 Subject: [PATCH 05/44] A few more placeholders --- rfcs/text/0015_buildkite.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index e09216bb8ed3a..dcf9fcc33c622 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -41,6 +41,8 @@ - [First-class support for test results](#first-class-support-for-test-results-1) - [Advanced Pipeline features](#advanced-pipeline-features-1) - [GitHub Integration](#github-integration-1) + - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) + - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) - [Drawbacks](#drawbacks) - [Alternatives](#alternatives) - [Jenkins](#jenkins) @@ -280,6 +282,14 @@ TODO - Ability to trigger jobs based on webhooks - Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR +## Elastic Buildkite Agent Manager + +TODO + +## Elastic Buildkite PR Bot + +TODO + # Drawbacks Why should we _not_ do this? Please consider: From 19b64b30ef3f357ea238b28ddb07500727e410a1 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 16 Mar 2021 16:39:40 -0400 Subject: [PATCH 06/44] Fleshing out more sections and adding more placeholders --- rfcs/text/0015_buildkite.md | 115 ++++++++++++++++++++++++++++-------- 1 file changed, 90 insertions(+), 25 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index dcf9fcc33c622..d49c9b87e1f3c 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -12,6 +12,7 @@ - [Stable](#stable) - [Surfaces information intuitively](#surfaces-information-intuitively) - [Pipelines](#pipelines) + - [Advanced Pipeline logic](#advanced-pipeline-logic) - [Cloud-friendly pricing model](#cloud-friendly-pricing-model) - [Public access](#public-access) - [Secrets handling](#secrets-handling) @@ -21,8 +22,8 @@ - [Customization](#customization) - [Core functionality is first-party](#core-functionality-is-first-party) - [First-class support for test results](#first-class-support-for-test-results) - - [Advanced Pipeline features](#advanced-pipeline-features) - [GitHub Integration](#github-integration) + - [Local testing / reproduction?](#local-testing--reproduction) - [Buildkite - Detailed design](#buildkite---detailed-design) - [Overview](#overview) - [Required and Desired Capabilities](#required-and-desired-capabilities-1) @@ -31,6 +32,7 @@ - [Stable](#stable-1) - [Surfaces information intuitively](#surfaces-information-intuitively-1) - [Pipelines](#pipelines-1) + - [Advanced Pipeline logic](#advanced-pipeline-logic-1) - [Cloud-friendly pricing model](#cloud-friendly-pricing-model-1) - [Public access](#public-access-1) - [Secrets handling](#secrets-handling-1) @@ -39,10 +41,15 @@ - [Customization](#customization-1) - [Core functionality is first-party](#core-functionality-is-first-party-1) - [First-class support for test results](#first-class-support-for-test-results-1) - - [Advanced Pipeline features](#advanced-pipeline-features-1) - [GitHub Integration](#github-integration-1) - - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) - - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) + - [What we will build and manage](#what-we-will-build-and-manage) + - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) + - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) + - [GCP Infrastructure](#gcp-infrastructure) + - [Monitoring / Alerting](#monitoring--alerting) + - [Agent Image management](#agent-image-management) + - [Buildkite org-level settings management](#buildkite-org-level-settings-management) + - [IT Security Processes](#it-security-processes) - [Drawbacks](#drawbacks) - [Alternatives](#alternatives) - [Jenkins](#jenkins) @@ -96,6 +103,23 @@ This RFC is focused on the option of using a system other than Jenkins, and mana - Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. - Changes to pipelines should generally be able to be tested in Pull Requests before being merged. +#### Advanced Pipeline logic + +With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. + +For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. + +- Retries + - Automatic (e.g. run a test suite twice to account for flakiness) and manual (user-initiated) + - Full (e.g. a whole pipeline) and partial (e.g. a single step) +- Dynamic pipelines + - Conditional dependencies/steps + - Based on user input + - Based on external events/data (e.g. PR label) + - Based on source code or changes (e.g. only run this for .md changes) +- Metadata and Artifacts re-usable between tasks + - Metadata could be a docker image tag for a specific task, built from a previous step + #### Cloud-friendly pricing model If the given system has a cost, the pricing model should be cloud-friendly and/or usage-based. @@ -144,20 +168,15 @@ Any core functionality that we depend on should be created and maintained by the #### First-class support for test results -#### Advanced Pipeline features - -TODO - -- Retries - automatic and manual - full and partial -- Dynamic / Optional dependencies/steps -- Artifacts re-usable between tasks - - This might just be the ability to dynamically specify a docker image tag for a specific task, built from a previous step - #### GitHub Integration - Ability to trigger jobs based on webhooks - Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR +#### Local testing / reproduction? + +TODO + # Buildkite - Detailed design For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgable, and the pricing model does not encourage bad practices to lower cost. @@ -198,9 +217,9 @@ If Buildkite's status pages are accurate, they seem to be extremely stable, and - [Historical Uptime](https://www.buildkitestatus.com/uptime) - [Incident History](https://www.buildkitestatus.com/history) -TODO check our Buildkite SLA? Can we put that info in here or is it under NDA? +For agents, stability and availability will depend primarily on the infrastructure that we build and the availability of the cloud provider (GCP, primarily) running our agents. Since we control our agents, we will be able to run agents across multiple zones, and possibly regions, in GCP for increased availability. See [TODO agent manager section]. -TODO talk about agents, GCP, zones, etc +TODO check our Buildkite SLA? Can we put that info in here or is it under NDA? TODO how does Buildkite handle failures? What happens to jobs? Even if poorly, downtime seems to be very rare @@ -226,6 +245,23 @@ TODO link to customization section once complete - we can surface any extra info - Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. - Changes to pipelines should generally be able to be tested in Pull Requests before being merged. +#### Advanced Pipeline logic + +With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. + +For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. + +- Retries + - Automatic (run a test suite twice to account for flakiness) and manual (user-initiated) + - Full (e.g. a whole pipeline) and partial (e.g. a single step) +- Dynamic pipelines + - Conditional dependencies/steps + - Based on user input + - Based on external events/data (e.g. PR label) + - Based on source code or changes (e.g. only run this for .md changes) +- Metadata and Artifacts re-usable between tasks + - Metadata could be a docker image tag for a specific task, built from a previous step + #### Cloud-friendly pricing model Buildkite is priced using a per-user model. [TODO what is a user? a committer?] That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. @@ -268,25 +304,54 @@ Any core functionality that we depend on should be created and maintained by the #### First-class support for test results -#### Advanced Pipeline features +#### GitHub Integration + +- Ability to trigger jobs based on webhooks +- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR + +## What we will build and manage + +### Elastic Buildkite Agent Manager TODO -- Retries - automatic and manual - full and partial -- Dynamic / Optional dependencies/steps -- Artifacts re-usable between tasks - - This might just be the ability to dynamically specify a docker image tag for a specific task, built from a previous step +### Elastic Buildkite PR Bot -#### GitHub Integration +TODO -- Ability to trigger jobs based on webhooks -- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR +### GCP Infrastructure -## Elastic Buildkite Agent Manager +TODO + +Hosting for bots/services, GCS buckets, images, networking (cloud nat), IAM/permissions + +Terraform + +### Monitoring / Alerting TODO -## Elastic Buildkite PR Bot +GCP monitoring (instances, quotas, etc) + +Buildkite monitoring (agent queues, job times) + +### Agent Image management + +### Buildkite org-level settings management + +TODO + +Mostly/all terraform + +Any settings not stored in pipeline yaml + +Top-level pipelines and their settings + +Users/roles + +SSO + +### IT Security Processes TODO From 8b1d3a7b887438af1d4dea9d32fb5ec77664fa83 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Wed, 17 Mar 2021 17:53:00 -0400 Subject: [PATCH 07/44] Updates to various sections --- rfcs/text/0015_buildkite.md | 52 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index d49c9b87e1f3c..5a699a9bfdab8 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -219,7 +219,7 @@ If Buildkite's status pages are accurate, they seem to be extremely stable, and For agents, stability and availability will depend primarily on the infrastructure that we build and the availability of the cloud provider (GCP, primarily) running our agents. Since we control our agents, we will be able to run agents across multiple zones, and possibly regions, in GCP for increased availability. See [TODO agent manager section]. -TODO check our Buildkite SLA? Can we put that info in here or is it under NDA? +They have a [99.95% uptime SLA](https://buildkite.com/enterprise) for Enterprise customers. TODO how does Buildkite handle failures? What happens to jobs? Even if poorly, downtime seems to be very rare @@ -241,30 +241,28 @@ TODO link to customization section once complete - we can surface any extra info #### Pipelines -- Pipelines should be defined as code. -- Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. -- Changes to pipelines should generally be able to be tested in Pull Requests before being merged. +- [Buildkite piplines](https://buildkite.com/docs/pipelines) must be defined as code. Even if you configure them through the UI, you still have to do so using yaml. +- This is subjective, but the yaml syntax for pipelines is friendly and straightforward. We feel that it will be easy for teams to create and modify pipelines with minimal instructions. +- If your pipeline is configured to use yaml stored in your repo for its definition, branches and PRs will use the version in their source by default. This means that PRs that change the pipeline can be tested as part of the PR CI. +- Top-level pipeline configurations, i.e. basically a pointer to a repo that has the real pipeline yaml in it, can be configured via the UI, API, or terraform. #### Advanced Pipeline logic -With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. +Buildkite supports very advanced pipeline logic, and has support for generating dynamic pipeline definitions at runtime. -For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. +- [Conditionals](https://buildkite.com/docs/pipelines/conditionals) +- [Dependencies](https://buildkite.com/docs/pipelines/dependencies) with lots of options, including being optional/conditional +- [Retries](https://buildkite.com/docs/pipelines/command-step#retry-attributes), both automatic and manual, including configuring retry conditions by different exit codes +- [Dynamic pipelines](https://buildkite.com/docs/pipelines/defining-steps#dynamic-pipelines) - pipelines can be generated by running a script at runtime +- [Metadata](https://buildkite.com/docs/pipelines/build-meta-data) can be set in one step, and read in other steps +- [Artifacts](https://buildkite.com/docs/pipelines/artifacts) can be uploaded from and downloaded in steps, and are visible in the UI +- [Parallelism and Concurrency](https://buildkite.com/docs/tutorials/parallel-builds) settings -- Retries - - Automatic (run a test suite twice to account for flakiness) and manual (user-initiated) - - Full (e.g. a whole pipeline) and partial (e.g. a single step) -- Dynamic pipelines - - Conditional dependencies/steps - - Based on user input - - Based on external events/data (e.g. PR label) - - Based on source code or changes (e.g. only run this for .md changes) -- Metadata and Artifacts re-usable between tasks - - Metadata could be a docker image tag for a specific task, built from a previous step +See [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/flaky-test-suite-runner.yml) and [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/scripts/flaky-test-suite-runner.sh) for an example of a dynamically-generated pipeline based on user input that runs a job `RUN_COUNT` times (from user input), across up to a maximum of 25 agents at once. #### Cloud-friendly pricing model -Buildkite is priced using a per-user model. [TODO what is a user? a committer?] That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. +Buildkite is priced using a per-user model, where a user is effectively an Elastic employee triggering builds for Kibana via PR, merging code, or through the Buildkite UI. That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. However, since we manage our own agents, we will still pay for our compute usage, and will need to consider that cost when designing our pipelines. @@ -276,19 +274,19 @@ There are not fine-grained settings for this, and all information in the build i #### Secrets handling -Good, first-class support for handling secrets is a must-have for any CI system. This support can take many forms. +[Managing Pipeline Secrets](https://buildkite.com/docs/pipelines/secrets) -- Secrets should not need to be stored in plaintext, in a repo nor on the server. -- For systems provided as a service, it is ideal if secrets are kept mostly/entirely on our infrastructure. -- There should be protections against accidentally leaking secrets to the console. -- There should be programmatic ways to manage secrets. -- Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. +Buildkite doesn't really have a concept of secrets. This is primarily because agents run on customers' infrastructure, so secrets can stay completely in the customer's environment. They provide recommendations for accessing secrets in pipelines in secure ways. + +There are two recommended methods for handling secrets: using a third-party secrets service like Vault or GCP's Secret Manager, or baking them into agent images and only letting certain jobs access them. Since Elastic already uses Vault, we could utilize Vault the same way we do in Jenkins today. + +However, since Buildkite doesn't really have a concept of secrets, it's up to us to ensure secrets are not leaked to the console. Note that this is similar to our pipelines today: secrets we pull out of Vault at runtime are not automatically masked in the console. #### Support or Documentation -For paid systems, both self-hosted and as a service, good support is important. If a problem specific to Elastic is causing us downtime, we expect quick and efficient support. Again, 100s of developers are potentially affected by downtime. +[Buildkite's documentation](https://buildkite.com/docs/pipelines) is extensive and well-written, as mentioned earlier. -For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. +Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 emergency help, prioritized support, a dedicated chat channel, and guaranteed response times. They will also consult on best practices, etc. ### Desired @@ -296,6 +294,10 @@ For open source solutions, good documentation is especially important. If much o We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. +TODO annotations + +TODO mention log output customization https://buildkite.com/docs/pipelines/managing-log-output + #### Core functionality is first-party Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. From 2b49569d6a03ce09dfb9d4bd52ba10fabad315fe Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Wed, 17 Mar 2021 21:32:34 -0400 Subject: [PATCH 08/44] Updates to various sections --- rfcs/text/0015_buildkite.md | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index 5a699a9bfdab8..78e7df7be367e 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -17,6 +17,7 @@ - [Public access](#public-access) - [Secrets handling](#secrets-handling) - [Support or Documentation](#support-or-documentation) + - [Scheduled Builds](#scheduled-builds) - [Container support](#container-support) - [Desired](#desired) - [Customization](#customization) @@ -37,6 +38,7 @@ - [Public access](#public-access-1) - [Secrets handling](#secrets-handling-1) - [Support or Documentation](#support-or-documentation-1) + - [Scheduled Builds](#scheduled-builds-1) - [Desired](#desired-1) - [Customization](#customization-1) - [Core functionality is first-party](#core-functionality-is-first-party-1) @@ -148,6 +150,10 @@ For paid systems, both self-hosted and as a service, good support is important. For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. +#### Scheduled Builds + +We have certain pipelines (ES Snapshots) that run once daily, and `master` CI currently only runs once an hour. We need the ability to configure scheduled builds. + #### Container support TODO @@ -288,28 +294,35 @@ However, since Buildkite doesn't really have a concept of secrets, it's up to us Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 emergency help, prioritized support, a dedicated chat channel, and guaranteed response times. They will also consult on best practices, etc. +#### Scheduled Builds + +[Build has scheduled build](https://buildkite.com/docs/pipelines/scheduled-builds) support with a cron-like syntax. Schedules are defined separately from the pipeline yaml, and can be managed via the UI, API, or terraform. + ### Desired #### Customization We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. -TODO annotations +[Annotations](https://buildkite.com/docs/agent/v3/cli-annotate) provide a way to add rich, well-formatted, custom information to build pages using CommonMark Markdown. There are several built-in CSS classes for formatting and several visual styles. Images, emojis, and links can be embedded as well. Just for some examples: Metrics such as bundle sizes, links to the distro builds for that build, and screenshots for test failures could all be embedded directly into the build pages. -TODO mention log output customization https://buildkite.com/docs/pipelines/managing-log-output +The structure of logs can also be easily customized by adding [collapsible groups](https://buildkite.com/docs/pipelines/managing-log-output#collapsing-output) for log messages. #### Core functionality is first-party -Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. - - +There's a large number of [plugins for Buildkite](https://buildkite.com/plugins), but, so far, there are only two plugins we've been considering using (one for Docker and one for test results), and they're both maintained by Buildkite. All other functionality we've assessed that we need is either built directly into Buildkite, or [we are building it](#what-we-will-build-and-manage). #### First-class support for test results +Buildkite doesn't really have any built-in support specifically for handling test results. Test result reports (e.g. JUnit) can be uploaded as artifacts, and test results can be rendered on the build page using annotations. They have [a plugin](https://github.com/buildkite-plugins/junit-annotate-buildkite-plugin) for automatically annotating builds with test results from JUnit reports in a simple fashion. We would likely want to build our own annotation for this. + +This does mean that Buildkite lacks test-related features of other CI systems: tracking tests over time across build, flagging flaky tests, etc. We would likely need to ingest test results into Elasticsearch and build out Kibana dashboards/visualizations for this, or similar. + #### GitHub Integration -- Ability to trigger jobs based on webhooks -- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR +Buildkite's [GitHub Integration](https://buildkite.com/docs/integrations/github) can trigger builds based on GitHub webhooks (e.g. on commit/push for branches and PRs), and update commit statuses. Buildkite also adds basic information to build pages, such as links to commits on GitHub and links to PRs. This should cover what we need for tracked branch builds. + +However, for Pull Requests, because we have a lot of requirements around when builds should run and who can run them, we will need to [build a solution](#elastic-buildkite-pr-bot) for handling PRs ourselves. The work for this is already close to complete. ## What we will build and manage From b3345f19a97d968ab725d6fc6568a09121bc458e Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 18 Mar 2021 11:59:54 -0400 Subject: [PATCH 09/44] WIP --- rfcs/text/0015_buildkite.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index 78e7df7be367e..a547a422639b8 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -296,7 +296,7 @@ Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 #### Scheduled Builds -[Build has scheduled build](https://buildkite.com/docs/pipelines/scheduled-builds) support with a cron-like syntax. Schedules are defined separately from the pipeline yaml, and can be managed via the UI, API, or terraform. +[Buildkite has scheduled build](https://buildkite.com/docs/pipelines/scheduled-builds) support with a cron-like syntax. Schedules are defined separately from the pipeline yaml, and can be managed via the UI, API, or terraform. ### Desired @@ -332,7 +332,15 @@ TODO ### Elastic Buildkite PR Bot -TODO +For TeamCity, we built a bot that was going to handle webhooks from GitHub and trigger builds for PRs based on configuration, user permissions, etc. Since we will not be moving to TeamCity, we've repurposed this bot for Buildkite, since Buildkite does not support all of our requirements around triggering builds for PRs out-of-the-box. + +TODO add link to repo when available + +Features supported by the bot: + +- Triggering builds on commit / when the PR is opened +- Triggering builds on comment +- ### GCP Infrastructure From 5c3fbadbc36f8dd4b585d6d12a52ad25d6e6c48d Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 18 Mar 2021 12:26:43 -0400 Subject: [PATCH 10/44] Add some info about pr bot --- rfcs/text/0015_buildkite.md | 53 +++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md index a547a422639b8..6336f3149074f 100644 --- a/rfcs/text/0015_buildkite.md +++ b/rfcs/text/0015_buildkite.md @@ -47,6 +47,9 @@ - [What we will build and manage](#what-we-will-build-and-manage) - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) + - [Overview](#overview-1) + - [Configuration](#configuration) + - [Build / Deploy](#build--deploy) - [GCP Infrastructure](#gcp-infrastructure) - [Monitoring / Alerting](#monitoring--alerting) - [Agent Image management](#agent-image-management) @@ -332,7 +335,9 @@ TODO ### Elastic Buildkite PR Bot -For TeamCity, we built a bot that was going to handle webhooks from GitHub and trigger builds for PRs based on configuration, user permissions, etc. Since we will not be moving to TeamCity, we've repurposed this bot for Buildkite, since Buildkite does not support all of our requirements around triggering builds for PRs out-of-the-box. +#### Overview + +For TeamCity, we built a bot that was going to handle webhooks from GitHub and trigger builds for PRs based on configuration, user permissions, etc. Since we will not be moving to TeamCity, we've repurposed this bot for Buildkite, since Buildkite does not support all of our requirements around triggering builds for PRs out-of-the-box. The bot supports everything we currently use in Jenkins, and has some additional features as well. TODO add link to repo when available @@ -340,7 +345,51 @@ Features supported by the bot: - Triggering builds on commit / when the PR is opened - Triggering builds on comment -- +- Permissions for who can trigger builds based on: Elastic org membership, write and/or admin access to the repo, or user present in an allowed list +- Limit builds to PRs targeting a specific branch +- Custom regex for trigger comment, e.g. "buildkite test this" +- Triggering builds based on labels +- Setting labels, comment body, and other PR info as env vars on triggered build +- Skip triggering build if a customizable label is present +- Option to set commit status on trigger +- Capture custom arguments from comment text using capture groups and forward them to the triggered build + +TODO add link showing successful build triggers + +#### Configuration + +The configuration is stored in a `json` file (default: `.ci/pull-requests.json`) in the repo for which pull requests will be monitored. Multiple branches in the repo can store different configurations, or one configuration (e.g. in `master`) can cover the entire repo. + +Example configuration: + +```json +{ + "jobs": [ + { + "repoOwner": "elastic", + "repoName": "kibana", + "pipelineSlug": "kibana", + + "enabled": true, + "target_branch": "master", + "allow_org_users": true, + "allowed_repo_permissions": ["admin", "write"], + "allowed_list": ["renovate[bot]"], + "set_commit_status": true, + "commit_status_context": "kibana-buildkite", + "trigger_comment_regex": "^(?:(?:jenkins\\W+)?(?:build|test)\\W+(?:this|it))|^retest$" + } + ] +} +``` + +Github Webhooks must also be configured to send events to the deployed bot. + +#### Build / Deploy + +Currently, the bot is built and deployed using [Google Cloud Build](https://cloud.google.com/build). It is deployed to and hosted on [Google Cloud Run](https://cloud.google.com/run). It uses [Google Secret Manager](https://cloud.google.com/secret-manager) for storing/retrieving tokens for accessing GitHub and Buildkite. + +TODO link to cloud build yaml once available ### GCP Infrastructure From 69177b3474f8ca59b80730badbb6c45878258588 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 18 Mar 2021 12:27:12 -0400 Subject: [PATCH 11/44] Increment RFC number --- rfcs/text/0015_buildkite.md | 473 ------------------------------------ 1 file changed, 473 deletions(-) delete mode 100644 rfcs/text/0015_buildkite.md diff --git a/rfcs/text/0015_buildkite.md b/rfcs/text/0015_buildkite.md deleted file mode 100644 index 6336f3149074f..0000000000000 --- a/rfcs/text/0015_buildkite.md +++ /dev/null @@ -1,473 +0,0 @@ -- Start Date: TODO -- RFC PR: (leave this empty) -- Kibana Issue: (leave this empty) - ---- - -- [Summary](#summary) -- [Motivation](#motivation) - - [Required and Desired Capabilities](#required-and-desired-capabilities) - - [Required](#required) - - [Scalable](#scalable) - - [Stable](#stable) - - [Surfaces information intuitively](#surfaces-information-intuitively) - - [Pipelines](#pipelines) - - [Advanced Pipeline logic](#advanced-pipeline-logic) - - [Cloud-friendly pricing model](#cloud-friendly-pricing-model) - - [Public access](#public-access) - - [Secrets handling](#secrets-handling) - - [Support or Documentation](#support-or-documentation) - - [Scheduled Builds](#scheduled-builds) - - [Container support](#container-support) - - [Desired](#desired) - - [Customization](#customization) - - [Core functionality is first-party](#core-functionality-is-first-party) - - [First-class support for test results](#first-class-support-for-test-results) - - [GitHub Integration](#github-integration) - - [Local testing / reproduction?](#local-testing--reproduction) -- [Buildkite - Detailed design](#buildkite---detailed-design) - - [Overview](#overview) - - [Required and Desired Capabilities](#required-and-desired-capabilities-1) - - [Required](#required-1) - - [Scalable](#scalable-1) - - [Stable](#stable-1) - - [Surfaces information intuitively](#surfaces-information-intuitively-1) - - [Pipelines](#pipelines-1) - - [Advanced Pipeline logic](#advanced-pipeline-logic-1) - - [Cloud-friendly pricing model](#cloud-friendly-pricing-model-1) - - [Public access](#public-access-1) - - [Secrets handling](#secrets-handling-1) - - [Support or Documentation](#support-or-documentation-1) - - [Scheduled Builds](#scheduled-builds-1) - - [Desired](#desired-1) - - [Customization](#customization-1) - - [Core functionality is first-party](#core-functionality-is-first-party-1) - - [First-class support for test results](#first-class-support-for-test-results-1) - - [GitHub Integration](#github-integration-1) - - [What we will build and manage](#what-we-will-build-and-manage) - - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) - - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) - - [Overview](#overview-1) - - [Configuration](#configuration) - - [Build / Deploy](#build--deploy) - - [GCP Infrastructure](#gcp-infrastructure) - - [Monitoring / Alerting](#monitoring--alerting) - - [Agent Image management](#agent-image-management) - - [Buildkite org-level settings management](#buildkite-org-level-settings-management) - - [IT Security Processes](#it-security-processes) -- [Drawbacks](#drawbacks) -- [Alternatives](#alternatives) - - [Jenkins](#jenkins) - - [Other solutions](#other-solutions) - - [CircleCI](#circleci) - - [GitHub Actions](#github-actions) -- [Adoption strategy](#adoption-strategy) -- [How we teach this](#how-we-teach-this) -- [Unresolved questions](#unresolved-questions) - -# Summary - -Implement a CI system for Kibana teams that is highly scalable, is stable, surfaces information in an intuitive way, and supports pipelines that are easy to understand and change. - - - -# Motivation - -We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. - -This RFC is focused on the option of using a system other than Jenkins, and managing it ourselves (to the extend that it must be managed). If the RFC is rejected, the alternative will be to instead invest significantly into Jenkins to further stablize and scale our usage of it. - -## Required and Desired Capabilities - -### Required - -#### Scalable - -- Able to run 100s of pipelines and 1000s of individual steps in parallel without issues. -- If scaling agents/hosts is self-managed, dynamically scaling up and down based on usage should be supported and reasonably easy to do. - -#### Stable - -- Every minute of downtime can affect 100s of developers. -- For systems provided as a service, they should not have frequent outages. This is a bit hard to define. 1-2 hours of downtime, twice a month, during peak working hours, is extremely disruptive. 10 minutes of downtime once or twice a week can also be very disruptive, as builds might need to be re-triggered, etc. -- For self-hosted solutions, they should be reasonably easy to keep online and have a solution for high-availability. At a minimum, most upgrades should not require waiting for all currently running jobs to finish before deploying. -- Failures are ideally handled gracefully. For example, agents may continue running tasks correctly, once the primary service becomes available again. - -#### Surfaces information intuitively - -- Developers should be able to easily understand what happened during their builds, and find information related to failures. -- Uer interfaces should be functional and easy to use. -- Overview and details about failures and execution time are particularly important. - -#### Pipelines - -- Pipelines should be defined as code. -- Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. -- Changes to pipelines should generally be able to be tested in Pull Requests before being merged. - -#### Advanced Pipeline logic - -With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. - -For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. - -- Retries - - Automatic (e.g. run a test suite twice to account for flakiness) and manual (user-initiated) - - Full (e.g. a whole pipeline) and partial (e.g. a single step) -- Dynamic pipelines - - Conditional dependencies/steps - - Based on user input - - Based on external events/data (e.g. PR label) - - Based on source code or changes (e.g. only run this for .md changes) -- Metadata and Artifacts re-usable between tasks - - Metadata could be a docker image tag for a specific task, built from a previous step - -#### Cloud-friendly pricing model - -If the given system has a cost, the pricing model should be cloud-friendly and/or usage-based. - -A per-agent or per-build model based on peak usage in a month is not a good model, because our peak build times are generally short-lived (e.g. around feature freeze). - -A model based on build-minutes can also be bad, if it encourages running things in parallel on bigger machines to keep costs down. For example, running two tasks on a single 2-CPU machine with our own orchestration should not be cheaper than running two tasks on two 1-CPU machines using the system's build-in orchestration. - -#### Public access - -Kibana is a publicly-available repository with contributors from outside Elastic. CI information needs to be available publicly in some form. - -#### Secrets handling - -Good, first-class support for handling secrets is a must-have for any CI system. This support can take many forms. - -- Secrets should not need to be stored in plaintext, in a repo nor on the server. -- For systems provided as a service, it is ideal if secrets are kept mostly/entirely on our infrastructure. -- There should be protections against accidentally leaking secrets to the console. -- There should be programmatic ways to manage secrets. -- Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. - -#### Support or Documentation - -For paid systems, both self-hosted and as a service, good support is important. If a problem specific to Elastic is causing us downtime, we expect quick and efficient support. Again, 100s of developers are potentially affected by downtime. - -For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. - -#### Scheduled Builds - -We have certain pipelines (ES Snapshots) that run once daily, and `master` CI currently only runs once an hour. We need the ability to configure scheduled builds. - -#### Container support - -TODO - -Required or Desired? - -### Desired - -#### Customization - -We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. - -#### Core functionality is first-party - -Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. - - - -#### First-class support for test results - -#### GitHub Integration - -- Ability to trigger jobs based on webhooks -- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR - -#### Local testing / reproduction? - -TODO - -# Buildkite - Detailed design - -For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgable, and the pricing model does not encourage bad practices to lower cost. - -## Overview - -[Buildkite](https://buildkite.com/home) is a CI system where the user manages and hosts their own agents, and Buildkite manages and hosts everything else (core services, APIs, UI). - -The [Buildkite features](https://buildkite.com/features) page is a great overview of the functionality offered. - -For a public instance of Buildkite in action, check out [Bazel's Buildkite](https://buildkite.com/bazel) organization. - -## Required and Desired Capabilities - -How does Buildkite stack up against our required and desired capabilities? - -### Required - -#### Scalable - -Buildkite claims to support up to 10,000 connected agents "without breaking a sweat." - -We were able to connect 2,200 running agents and run a [single job with 1,800 parallel build steps](https://buildkite.com/elastic/kibana-custom/builds/8). The job ran with only about 15 seconds of total overhead (the rest of the time, the repo was being cloned, or the actual tasks were executing). We would likely never define a single job this large, but not only did it execute without any problems, the UI handles it very well. - -2,200 agents was the maximum that we were able to test because of quotas on our GCP account that could not easily be increased. - -TODO test a large number of parallel jobs as well? - -TODO link to agent manager info - -#### Stable - -So far, we have witnessed no stability issues in our testing. - -If Buildkite's status pages are accurate, they seem to be extremely stable, and respond quickly to issues. - -- [Buildkite Status](https://www.buildkitestatus.com/) -- [Historical Uptime](https://www.buildkitestatus.com/uptime) -- [Incident History](https://www.buildkitestatus.com/history) - -For agents, stability and availability will depend primarily on the infrastructure that we build and the availability of the cloud provider (GCP, primarily) running our agents. Since we control our agents, we will be able to run agents across multiple zones, and possibly regions, in GCP for increased availability. See [TODO agent manager section]. - -They have a [99.95% uptime SLA](https://buildkite.com/enterprise) for Enterprise customers. - -TODO how does Buildkite handle failures? What happens to jobs? Even if poorly, downtime seems to be very rare - -#### Surfaces information intuitively - -The Buildkite UI is very easy to use, and works as expected. Here is some of the information surfaced for each build: - -- The overall status of the job, as well as which steps succeeded and failed. -- Logs for each individual step -- The timeline for each individual step, including how long it took Buildkite to schedule/handle the job on their end -- Artifacts uploaded by each step -- The entire agent/job configuration at the time the step executed, expressed as environment variables - -TODO how are complex pipelines (dependencies) handled in the UI? - -TODO screenshots? links? - -TODO link to customization section once complete - we can surface any extra information we want - -#### Pipelines - -- [Buildkite piplines](https://buildkite.com/docs/pipelines) must be defined as code. Even if you configure them through the UI, you still have to do so using yaml. -- This is subjective, but the yaml syntax for pipelines is friendly and straightforward. We feel that it will be easy for teams to create and modify pipelines with minimal instructions. -- If your pipeline is configured to use yaml stored in your repo for its definition, branches and PRs will use the version in their source by default. This means that PRs that change the pipeline can be tested as part of the PR CI. -- Top-level pipeline configurations, i.e. basically a pointer to a repo that has the real pipeline yaml in it, can be configured via the UI, API, or terraform. - -#### Advanced Pipeline logic - -Buildkite supports very advanced pipeline logic, and has support for generating dynamic pipeline definitions at runtime. - -- [Conditionals](https://buildkite.com/docs/pipelines/conditionals) -- [Dependencies](https://buildkite.com/docs/pipelines/dependencies) with lots of options, including being optional/conditional -- [Retries](https://buildkite.com/docs/pipelines/command-step#retry-attributes), both automatic and manual, including configuring retry conditions by different exit codes -- [Dynamic pipelines](https://buildkite.com/docs/pipelines/defining-steps#dynamic-pipelines) - pipelines can be generated by running a script at runtime -- [Metadata](https://buildkite.com/docs/pipelines/build-meta-data) can be set in one step, and read in other steps -- [Artifacts](https://buildkite.com/docs/pipelines/artifacts) can be uploaded from and downloaded in steps, and are visible in the UI -- [Parallelism and Concurrency](https://buildkite.com/docs/tutorials/parallel-builds) settings - -See [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/flaky-test-suite-runner.yml) and [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/scripts/flaky-test-suite-runner.sh) for an example of a dynamically-generated pipeline based on user input that runs a job `RUN_COUNT` times (from user input), across up to a maximum of 25 agents at once. - -#### Cloud-friendly pricing model - -Buildkite is priced using a per-user model, where a user is effectively an Elastic employee triggering builds for Kibana via PR, merging code, or through the Buildkite UI. That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. - -However, since we manage our own agents, we will still pay for our compute usage, and will need to consider that cost when designing our pipelines. - -#### Public access - -Buildkite has read-only public access, configurable for each pipeline. An organization can contain a mix of both public and private pipelines. - -There are not fine-grained settings for this, and all information in the build is publicly accessible. (TODO: confirm) - -#### Secrets handling - -[Managing Pipeline Secrets](https://buildkite.com/docs/pipelines/secrets) - -Buildkite doesn't really have a concept of secrets. This is primarily because agents run on customers' infrastructure, so secrets can stay completely in the customer's environment. They provide recommendations for accessing secrets in pipelines in secure ways. - -There are two recommended methods for handling secrets: using a third-party secrets service like Vault or GCP's Secret Manager, or baking them into agent images and only letting certain jobs access them. Since Elastic already uses Vault, we could utilize Vault the same way we do in Jenkins today. - -However, since Buildkite doesn't really have a concept of secrets, it's up to us to ensure secrets are not leaked to the console. Note that this is similar to our pipelines today: secrets we pull out of Vault at runtime are not automatically masked in the console. - -#### Support or Documentation - -[Buildkite's documentation](https://buildkite.com/docs/pipelines) is extensive and well-written, as mentioned earlier. - -Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 emergency help, prioritized support, a dedicated chat channel, and guaranteed response times. They will also consult on best practices, etc. - -#### Scheduled Builds - -[Buildkite has scheduled build](https://buildkite.com/docs/pipelines/scheduled-builds) support with a cron-like syntax. Schedules are defined separately from the pipeline yaml, and can be managed via the UI, API, or terraform. - -### Desired - -#### Customization - -We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. - -[Annotations](https://buildkite.com/docs/agent/v3/cli-annotate) provide a way to add rich, well-formatted, custom information to build pages using CommonMark Markdown. There are several built-in CSS classes for formatting and several visual styles. Images, emojis, and links can be embedded as well. Just for some examples: Metrics such as bundle sizes, links to the distro builds for that build, and screenshots for test failures could all be embedded directly into the build pages. - -The structure of logs can also be easily customized by adding [collapsible groups](https://buildkite.com/docs/pipelines/managing-log-output#collapsing-output) for log messages. - -#### Core functionality is first-party - -There's a large number of [plugins for Buildkite](https://buildkite.com/plugins), but, so far, there are only two plugins we've been considering using (one for Docker and one for test results), and they're both maintained by Buildkite. All other functionality we've assessed that we need is either built directly into Buildkite, or [we are building it](#what-we-will-build-and-manage). - -#### First-class support for test results - -Buildkite doesn't really have any built-in support specifically for handling test results. Test result reports (e.g. JUnit) can be uploaded as artifacts, and test results can be rendered on the build page using annotations. They have [a plugin](https://github.com/buildkite-plugins/junit-annotate-buildkite-plugin) for automatically annotating builds with test results from JUnit reports in a simple fashion. We would likely want to build our own annotation for this. - -This does mean that Buildkite lacks test-related features of other CI systems: tracking tests over time across build, flagging flaky tests, etc. We would likely need to ingest test results into Elasticsearch and build out Kibana dashboards/visualizations for this, or similar. - -#### GitHub Integration - -Buildkite's [GitHub Integration](https://buildkite.com/docs/integrations/github) can trigger builds based on GitHub webhooks (e.g. on commit/push for branches and PRs), and update commit statuses. Buildkite also adds basic information to build pages, such as links to commits on GitHub and links to PRs. This should cover what we need for tracked branch builds. - -However, for Pull Requests, because we have a lot of requirements around when builds should run and who can run them, we will need to [build a solution](#elastic-buildkite-pr-bot) for handling PRs ourselves. The work for this is already close to complete. - -## What we will build and manage - -### Elastic Buildkite Agent Manager - -TODO - -### Elastic Buildkite PR Bot - -#### Overview - -For TeamCity, we built a bot that was going to handle webhooks from GitHub and trigger builds for PRs based on configuration, user permissions, etc. Since we will not be moving to TeamCity, we've repurposed this bot for Buildkite, since Buildkite does not support all of our requirements around triggering builds for PRs out-of-the-box. The bot supports everything we currently use in Jenkins, and has some additional features as well. - -TODO add link to repo when available - -Features supported by the bot: - -- Triggering builds on commit / when the PR is opened -- Triggering builds on comment -- Permissions for who can trigger builds based on: Elastic org membership, write and/or admin access to the repo, or user present in an allowed list -- Limit builds to PRs targeting a specific branch -- Custom regex for trigger comment, e.g. "buildkite test this" -- Triggering builds based on labels -- Setting labels, comment body, and other PR info as env vars on triggered build -- Skip triggering build if a customizable label is present -- Option to set commit status on trigger -- Capture custom arguments from comment text using capture groups and forward them to the triggered build - -TODO add link showing successful build triggers - -#### Configuration - -The configuration is stored in a `json` file (default: `.ci/pull-requests.json`) in the repo for which pull requests will be monitored. Multiple branches in the repo can store different configurations, or one configuration (e.g. in `master`) can cover the entire repo. - -Example configuration: - -```json -{ - "jobs": [ - { - "repoOwner": "elastic", - "repoName": "kibana", - "pipelineSlug": "kibana", - - "enabled": true, - "target_branch": "master", - "allow_org_users": true, - "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["renovate[bot]"], - "set_commit_status": true, - "commit_status_context": "kibana-buildkite", - "trigger_comment_regex": "^(?:(?:jenkins\\W+)?(?:build|test)\\W+(?:this|it))|^retest$" - } - ] -} -``` - -Github Webhooks must also be configured to send events to the deployed bot. - -#### Build / Deploy - -Currently, the bot is built and deployed using [Google Cloud Build](https://cloud.google.com/build). It is deployed to and hosted on [Google Cloud Run](https://cloud.google.com/run). It uses [Google Secret Manager](https://cloud.google.com/secret-manager) for storing/retrieving tokens for accessing GitHub and Buildkite. - -TODO link to cloud build yaml once available - -### GCP Infrastructure - -TODO - -Hosting for bots/services, GCS buckets, images, networking (cloud nat), IAM/permissions - -Terraform - -### Monitoring / Alerting - -TODO - -GCP monitoring (instances, quotas, etc) - -Buildkite monitoring (agent queues, job times) - -### Agent Image management - -### Buildkite org-level settings management - -TODO - -Mostly/all terraform - -Any settings not stored in pipeline yaml - -Top-level pipelines and their settings - -Users/roles - -SSO - -### IT Security Processes - -TODO - -# Drawbacks - -Why should we _not_ do this? Please consider: - -- implementation cost, both in term of code size and complexity -- the impact on teaching people Kibana development -- integration of this feature with other existing and planned features -- cost of migrating existing Kibana plugins (is it a breaking change?) - -There are tradeoffs to choosing any path. Attempt to identify them here. - -# Alternatives - -## Jenkins - -TODO how Jenkins stacks up against the required/desired functionality, and the kinds of things we would need to build to get there. - -## Other solutions - -### CircleCI - -### GitHub Actions - -# Adoption strategy - -If we implement this proposal, how will existing Kibana developers adopt it? Is -this a breaking change? Can we write a codemod? Should we coordinate with -other projects or libraries? - -# How we teach this - -What names and terminology work best for these concepts and why? How is this -idea best presented? As a continuation of existing Kibana patterns? - -Would the acceptance of this proposal mean the Kibana documentation must be -re-organized or altered? Does it change how Kibana is taught to new developers -at any level? - -How should this feature be taught to existing Kibana developers? - -# Unresolved questions - -Optional, but suggested for first drafts. What parts of the design are still -TBD? From e9e8ddeea3112a8341ccf1c56927cd346477b64c Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 18 Mar 2021 12:28:12 -0400 Subject: [PATCH 12/44] Oops --- rfcs/text/0016_buildkite.md | 473 ++++++++++++++++++++++++++++++++++++ 1 file changed, 473 insertions(+) create mode 100644 rfcs/text/0016_buildkite.md diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md new file mode 100644 index 0000000000000..6336f3149074f --- /dev/null +++ b/rfcs/text/0016_buildkite.md @@ -0,0 +1,473 @@ +- Start Date: TODO +- RFC PR: (leave this empty) +- Kibana Issue: (leave this empty) + +--- + +- [Summary](#summary) +- [Motivation](#motivation) + - [Required and Desired Capabilities](#required-and-desired-capabilities) + - [Required](#required) + - [Scalable](#scalable) + - [Stable](#stable) + - [Surfaces information intuitively](#surfaces-information-intuitively) + - [Pipelines](#pipelines) + - [Advanced Pipeline logic](#advanced-pipeline-logic) + - [Cloud-friendly pricing model](#cloud-friendly-pricing-model) + - [Public access](#public-access) + - [Secrets handling](#secrets-handling) + - [Support or Documentation](#support-or-documentation) + - [Scheduled Builds](#scheduled-builds) + - [Container support](#container-support) + - [Desired](#desired) + - [Customization](#customization) + - [Core functionality is first-party](#core-functionality-is-first-party) + - [First-class support for test results](#first-class-support-for-test-results) + - [GitHub Integration](#github-integration) + - [Local testing / reproduction?](#local-testing--reproduction) +- [Buildkite - Detailed design](#buildkite---detailed-design) + - [Overview](#overview) + - [Required and Desired Capabilities](#required-and-desired-capabilities-1) + - [Required](#required-1) + - [Scalable](#scalable-1) + - [Stable](#stable-1) + - [Surfaces information intuitively](#surfaces-information-intuitively-1) + - [Pipelines](#pipelines-1) + - [Advanced Pipeline logic](#advanced-pipeline-logic-1) + - [Cloud-friendly pricing model](#cloud-friendly-pricing-model-1) + - [Public access](#public-access-1) + - [Secrets handling](#secrets-handling-1) + - [Support or Documentation](#support-or-documentation-1) + - [Scheduled Builds](#scheduled-builds-1) + - [Desired](#desired-1) + - [Customization](#customization-1) + - [Core functionality is first-party](#core-functionality-is-first-party-1) + - [First-class support for test results](#first-class-support-for-test-results-1) + - [GitHub Integration](#github-integration-1) + - [What we will build and manage](#what-we-will-build-and-manage) + - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) + - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) + - [Overview](#overview-1) + - [Configuration](#configuration) + - [Build / Deploy](#build--deploy) + - [GCP Infrastructure](#gcp-infrastructure) + - [Monitoring / Alerting](#monitoring--alerting) + - [Agent Image management](#agent-image-management) + - [Buildkite org-level settings management](#buildkite-org-level-settings-management) + - [IT Security Processes](#it-security-processes) +- [Drawbacks](#drawbacks) +- [Alternatives](#alternatives) + - [Jenkins](#jenkins) + - [Other solutions](#other-solutions) + - [CircleCI](#circleci) + - [GitHub Actions](#github-actions) +- [Adoption strategy](#adoption-strategy) +- [How we teach this](#how-we-teach-this) +- [Unresolved questions](#unresolved-questions) + +# Summary + +Implement a CI system for Kibana teams that is highly scalable, is stable, surfaces information in an intuitive way, and supports pipelines that are easy to understand and change. + + + +# Motivation + +We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. + +This RFC is focused on the option of using a system other than Jenkins, and managing it ourselves (to the extend that it must be managed). If the RFC is rejected, the alternative will be to instead invest significantly into Jenkins to further stablize and scale our usage of it. + +## Required and Desired Capabilities + +### Required + +#### Scalable + +- Able to run 100s of pipelines and 1000s of individual steps in parallel without issues. +- If scaling agents/hosts is self-managed, dynamically scaling up and down based on usage should be supported and reasonably easy to do. + +#### Stable + +- Every minute of downtime can affect 100s of developers. +- For systems provided as a service, they should not have frequent outages. This is a bit hard to define. 1-2 hours of downtime, twice a month, during peak working hours, is extremely disruptive. 10 minutes of downtime once or twice a week can also be very disruptive, as builds might need to be re-triggered, etc. +- For self-hosted solutions, they should be reasonably easy to keep online and have a solution for high-availability. At a minimum, most upgrades should not require waiting for all currently running jobs to finish before deploying. +- Failures are ideally handled gracefully. For example, agents may continue running tasks correctly, once the primary service becomes available again. + +#### Surfaces information intuitively + +- Developers should be able to easily understand what happened during their builds, and find information related to failures. +- Uer interfaces should be functional and easy to use. +- Overview and details about failures and execution time are particularly important. + +#### Pipelines + +- Pipelines should be defined as code. +- Pipelines should be reasonably easy to understand and change. Kibana team members should be able to follow a simple guide and create new pipelines on their own. +- Changes to pipelines should generally be able to be tested in Pull Requests before being merged. + +#### Advanced Pipeline logic + +With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. + +For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. + +- Retries + - Automatic (e.g. run a test suite twice to account for flakiness) and manual (user-initiated) + - Full (e.g. a whole pipeline) and partial (e.g. a single step) +- Dynamic pipelines + - Conditional dependencies/steps + - Based on user input + - Based on external events/data (e.g. PR label) + - Based on source code or changes (e.g. only run this for .md changes) +- Metadata and Artifacts re-usable between tasks + - Metadata could be a docker image tag for a specific task, built from a previous step + +#### Cloud-friendly pricing model + +If the given system has a cost, the pricing model should be cloud-friendly and/or usage-based. + +A per-agent or per-build model based on peak usage in a month is not a good model, because our peak build times are generally short-lived (e.g. around feature freeze). + +A model based on build-minutes can also be bad, if it encourages running things in parallel on bigger machines to keep costs down. For example, running two tasks on a single 2-CPU machine with our own orchestration should not be cheaper than running two tasks on two 1-CPU machines using the system's build-in orchestration. + +#### Public access + +Kibana is a publicly-available repository with contributors from outside Elastic. CI information needs to be available publicly in some form. + +#### Secrets handling + +Good, first-class support for handling secrets is a must-have for any CI system. This support can take many forms. + +- Secrets should not need to be stored in plaintext, in a repo nor on the server. +- For systems provided as a service, it is ideal if secrets are kept mostly/entirely on our infrastructure. +- There should be protections against accidentally leaking secrets to the console. +- There should be programmatic ways to manage secrets. +- Secrets are, by nature, harder to handle. However, the easier the system makes it, the more likely people are to follow best practices. + +#### Support or Documentation + +For paid systems, both self-hosted and as a service, good support is important. If a problem specific to Elastic is causing us downtime, we expect quick and efficient support. Again, 100s of developers are potentially affected by downtime. + +For open source solutions, good documentation is especially important. If much of the operational knowledge of a system can only be gained by working with the system and/or reading the source code, it will be harder to solve problems quickly. + +#### Scheduled Builds + +We have certain pipelines (ES Snapshots) that run once daily, and `master` CI currently only runs once an hour. We need the ability to configure scheduled builds. + +#### Container support + +TODO + +Required or Desired? + +### Desired + +#### Customization + +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. + +#### Core functionality is first-party + +Any core functionality that we depend on should be created and maintained by the organization maintaining the CI software. There is a large amount of risk associated with relying on third-part solutions for too much functionality. + + + +#### First-class support for test results + +#### GitHub Integration + +- Ability to trigger jobs based on webhooks +- Integrate GitHub-specific information into UI, e.g. a build for a PR should link back to the PR + +#### Local testing / reproduction? + +TODO + +# Buildkite - Detailed design + +For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgable, and the pricing model does not encourage bad practices to lower cost. + +## Overview + +[Buildkite](https://buildkite.com/home) is a CI system where the user manages and hosts their own agents, and Buildkite manages and hosts everything else (core services, APIs, UI). + +The [Buildkite features](https://buildkite.com/features) page is a great overview of the functionality offered. + +For a public instance of Buildkite in action, check out [Bazel's Buildkite](https://buildkite.com/bazel) organization. + +## Required and Desired Capabilities + +How does Buildkite stack up against our required and desired capabilities? + +### Required + +#### Scalable + +Buildkite claims to support up to 10,000 connected agents "without breaking a sweat." + +We were able to connect 2,200 running agents and run a [single job with 1,800 parallel build steps](https://buildkite.com/elastic/kibana-custom/builds/8). The job ran with only about 15 seconds of total overhead (the rest of the time, the repo was being cloned, or the actual tasks were executing). We would likely never define a single job this large, but not only did it execute without any problems, the UI handles it very well. + +2,200 agents was the maximum that we were able to test because of quotas on our GCP account that could not easily be increased. + +TODO test a large number of parallel jobs as well? + +TODO link to agent manager info + +#### Stable + +So far, we have witnessed no stability issues in our testing. + +If Buildkite's status pages are accurate, they seem to be extremely stable, and respond quickly to issues. + +- [Buildkite Status](https://www.buildkitestatus.com/) +- [Historical Uptime](https://www.buildkitestatus.com/uptime) +- [Incident History](https://www.buildkitestatus.com/history) + +For agents, stability and availability will depend primarily on the infrastructure that we build and the availability of the cloud provider (GCP, primarily) running our agents. Since we control our agents, we will be able to run agents across multiple zones, and possibly regions, in GCP for increased availability. See [TODO agent manager section]. + +They have a [99.95% uptime SLA](https://buildkite.com/enterprise) for Enterprise customers. + +TODO how does Buildkite handle failures? What happens to jobs? Even if poorly, downtime seems to be very rare + +#### Surfaces information intuitively + +The Buildkite UI is very easy to use, and works as expected. Here is some of the information surfaced for each build: + +- The overall status of the job, as well as which steps succeeded and failed. +- Logs for each individual step +- The timeline for each individual step, including how long it took Buildkite to schedule/handle the job on their end +- Artifacts uploaded by each step +- The entire agent/job configuration at the time the step executed, expressed as environment variables + +TODO how are complex pipelines (dependencies) handled in the UI? + +TODO screenshots? links? + +TODO link to customization section once complete - we can surface any extra information we want + +#### Pipelines + +- [Buildkite piplines](https://buildkite.com/docs/pipelines) must be defined as code. Even if you configure them through the UI, you still have to do so using yaml. +- This is subjective, but the yaml syntax for pipelines is friendly and straightforward. We feel that it will be easy for teams to create and modify pipelines with minimal instructions. +- If your pipeline is configured to use yaml stored in your repo for its definition, branches and PRs will use the version in their source by default. This means that PRs that change the pipeline can be tested as part of the PR CI. +- Top-level pipeline configurations, i.e. basically a pointer to a repo that has the real pipeline yaml in it, can be configured via the UI, API, or terraform. + +#### Advanced Pipeline logic + +Buildkite supports very advanced pipeline logic, and has support for generating dynamic pipeline definitions at runtime. + +- [Conditionals](https://buildkite.com/docs/pipelines/conditionals) +- [Dependencies](https://buildkite.com/docs/pipelines/dependencies) with lots of options, including being optional/conditional +- [Retries](https://buildkite.com/docs/pipelines/command-step#retry-attributes), both automatic and manual, including configuring retry conditions by different exit codes +- [Dynamic pipelines](https://buildkite.com/docs/pipelines/defining-steps#dynamic-pipelines) - pipelines can be generated by running a script at runtime +- [Metadata](https://buildkite.com/docs/pipelines/build-meta-data) can be set in one step, and read in other steps +- [Artifacts](https://buildkite.com/docs/pipelines/artifacts) can be uploaded from and downloaded in steps, and are visible in the UI +- [Parallelism and Concurrency](https://buildkite.com/docs/tutorials/parallel-builds) settings + +See [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/flaky-test-suite-runner.yml) and [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/scripts/flaky-test-suite-runner.sh) for an example of a dynamically-generated pipeline based on user input that runs a job `RUN_COUNT` times (from user input), across up to a maximum of 25 agents at once. + +#### Cloud-friendly pricing model + +Buildkite is priced using a per-user model, where a user is effectively an Elastic employee triggering builds for Kibana via PR, merging code, or through the Buildkite UI. That means that the cost essentially grows with our company size. Most importantly, we don't need to make CI pipeline design decisions based on the Buildkite pricing model. + +However, since we manage our own agents, we will still pay for our compute usage, and will need to consider that cost when designing our pipelines. + +#### Public access + +Buildkite has read-only public access, configurable for each pipeline. An organization can contain a mix of both public and private pipelines. + +There are not fine-grained settings for this, and all information in the build is publicly accessible. (TODO: confirm) + +#### Secrets handling + +[Managing Pipeline Secrets](https://buildkite.com/docs/pipelines/secrets) + +Buildkite doesn't really have a concept of secrets. This is primarily because agents run on customers' infrastructure, so secrets can stay completely in the customer's environment. They provide recommendations for accessing secrets in pipelines in secure ways. + +There are two recommended methods for handling secrets: using a third-party secrets service like Vault or GCP's Secret Manager, or baking them into agent images and only letting certain jobs access them. Since Elastic already uses Vault, we could utilize Vault the same way we do in Jenkins today. + +However, since Buildkite doesn't really have a concept of secrets, it's up to us to ensure secrets are not leaked to the console. Note that this is similar to our pipelines today: secrets we pull out of Vault at runtime are not automatically masked in the console. + +#### Support or Documentation + +[Buildkite's documentation](https://buildkite.com/docs/pipelines) is extensive and well-written, as mentioned earlier. + +Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 emergency help, prioritized support, a dedicated chat channel, and guaranteed response times. They will also consult on best practices, etc. + +#### Scheduled Builds + +[Buildkite has scheduled build](https://buildkite.com/docs/pipelines/scheduled-builds) support with a cron-like syntax. Schedules are defined separately from the pipeline yaml, and can be managed via the UI, API, or terraform. + +### Desired + +#### Customization + +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. + +[Annotations](https://buildkite.com/docs/agent/v3/cli-annotate) provide a way to add rich, well-formatted, custom information to build pages using CommonMark Markdown. There are several built-in CSS classes for formatting and several visual styles. Images, emojis, and links can be embedded as well. Just for some examples: Metrics such as bundle sizes, links to the distro builds for that build, and screenshots for test failures could all be embedded directly into the build pages. + +The structure of logs can also be easily customized by adding [collapsible groups](https://buildkite.com/docs/pipelines/managing-log-output#collapsing-output) for log messages. + +#### Core functionality is first-party + +There's a large number of [plugins for Buildkite](https://buildkite.com/plugins), but, so far, there are only two plugins we've been considering using (one for Docker and one for test results), and they're both maintained by Buildkite. All other functionality we've assessed that we need is either built directly into Buildkite, or [we are building it](#what-we-will-build-and-manage). + +#### First-class support for test results + +Buildkite doesn't really have any built-in support specifically for handling test results. Test result reports (e.g. JUnit) can be uploaded as artifacts, and test results can be rendered on the build page using annotations. They have [a plugin](https://github.com/buildkite-plugins/junit-annotate-buildkite-plugin) for automatically annotating builds with test results from JUnit reports in a simple fashion. We would likely want to build our own annotation for this. + +This does mean that Buildkite lacks test-related features of other CI systems: tracking tests over time across build, flagging flaky tests, etc. We would likely need to ingest test results into Elasticsearch and build out Kibana dashboards/visualizations for this, or similar. + +#### GitHub Integration + +Buildkite's [GitHub Integration](https://buildkite.com/docs/integrations/github) can trigger builds based on GitHub webhooks (e.g. on commit/push for branches and PRs), and update commit statuses. Buildkite also adds basic information to build pages, such as links to commits on GitHub and links to PRs. This should cover what we need for tracked branch builds. + +However, for Pull Requests, because we have a lot of requirements around when builds should run and who can run them, we will need to [build a solution](#elastic-buildkite-pr-bot) for handling PRs ourselves. The work for this is already close to complete. + +## What we will build and manage + +### Elastic Buildkite Agent Manager + +TODO + +### Elastic Buildkite PR Bot + +#### Overview + +For TeamCity, we built a bot that was going to handle webhooks from GitHub and trigger builds for PRs based on configuration, user permissions, etc. Since we will not be moving to TeamCity, we've repurposed this bot for Buildkite, since Buildkite does not support all of our requirements around triggering builds for PRs out-of-the-box. The bot supports everything we currently use in Jenkins, and has some additional features as well. + +TODO add link to repo when available + +Features supported by the bot: + +- Triggering builds on commit / when the PR is opened +- Triggering builds on comment +- Permissions for who can trigger builds based on: Elastic org membership, write and/or admin access to the repo, or user present in an allowed list +- Limit builds to PRs targeting a specific branch +- Custom regex for trigger comment, e.g. "buildkite test this" +- Triggering builds based on labels +- Setting labels, comment body, and other PR info as env vars on triggered build +- Skip triggering build if a customizable label is present +- Option to set commit status on trigger +- Capture custom arguments from comment text using capture groups and forward them to the triggered build + +TODO add link showing successful build triggers + +#### Configuration + +The configuration is stored in a `json` file (default: `.ci/pull-requests.json`) in the repo for which pull requests will be monitored. Multiple branches in the repo can store different configurations, or one configuration (e.g. in `master`) can cover the entire repo. + +Example configuration: + +```json +{ + "jobs": [ + { + "repoOwner": "elastic", + "repoName": "kibana", + "pipelineSlug": "kibana", + + "enabled": true, + "target_branch": "master", + "allow_org_users": true, + "allowed_repo_permissions": ["admin", "write"], + "allowed_list": ["renovate[bot]"], + "set_commit_status": true, + "commit_status_context": "kibana-buildkite", + "trigger_comment_regex": "^(?:(?:jenkins\\W+)?(?:build|test)\\W+(?:this|it))|^retest$" + } + ] +} +``` + +Github Webhooks must also be configured to send events to the deployed bot. + +#### Build / Deploy + +Currently, the bot is built and deployed using [Google Cloud Build](https://cloud.google.com/build). It is deployed to and hosted on [Google Cloud Run](https://cloud.google.com/run). It uses [Google Secret Manager](https://cloud.google.com/secret-manager) for storing/retrieving tokens for accessing GitHub and Buildkite. + +TODO link to cloud build yaml once available + +### GCP Infrastructure + +TODO + +Hosting for bots/services, GCS buckets, images, networking (cloud nat), IAM/permissions + +Terraform + +### Monitoring / Alerting + +TODO + +GCP monitoring (instances, quotas, etc) + +Buildkite monitoring (agent queues, job times) + +### Agent Image management + +### Buildkite org-level settings management + +TODO + +Mostly/all terraform + +Any settings not stored in pipeline yaml + +Top-level pipelines and their settings + +Users/roles + +SSO + +### IT Security Processes + +TODO + +# Drawbacks + +Why should we _not_ do this? Please consider: + +- implementation cost, both in term of code size and complexity +- the impact on teaching people Kibana development +- integration of this feature with other existing and planned features +- cost of migrating existing Kibana plugins (is it a breaking change?) + +There are tradeoffs to choosing any path. Attempt to identify them here. + +# Alternatives + +## Jenkins + +TODO how Jenkins stacks up against the required/desired functionality, and the kinds of things we would need to build to get there. + +## Other solutions + +### CircleCI + +### GitHub Actions + +# Adoption strategy + +If we implement this proposal, how will existing Kibana developers adopt it? Is +this a breaking change? Can we write a codemod? Should we coordinate with +other projects or libraries? + +# How we teach this + +What names and terminology work best for these concepts and why? How is this +idea best presented? As a continuation of existing Kibana patterns? + +Would the acceptance of this proposal mean the Kibana documentation must be +re-organized or altered? Does it change how Kibana is taught to new developers +at any level? + +How should this feature be taught to existing Kibana developers? + +# Unresolved questions + +Optional, but suggested for first drafts. What parts of the design are still +TBD? From e07f5053a649c9228ea5ab6d61f2f167d54aec9d Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Thu, 18 Mar 2021 13:30:19 -0400 Subject: [PATCH 13/44] WIP --- rfcs/text/0016_buildkite.md | 41 +++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 6336f3149074f..0ea13c4e5f968 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -46,10 +46,14 @@ - [GitHub Integration](#github-integration-1) - [What we will build and manage](#what-we-will-build-and-manage) - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) - - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) - [Overview](#overview-1) + - [Design](#design) - [Configuration](#configuration) - [Build / Deploy](#build--deploy) + - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) + - [Overview](#overview-2) + - [Configuration](#configuration-1) + - [Build / Deploy](#build--deploy-1) - [GCP Infrastructure](#gcp-infrastructure) - [Monitoring / Alerting](#monitoring--alerting) - [Agent Image management](#agent-image-management) @@ -331,7 +335,40 @@ However, for Pull Requests, because we have a lot of requirements around when bu ### Elastic Buildkite Agent Manager -TODO +#### Overview + +Currently, with Buildkite, the agent lifecycle is managed entirely by customers. Customers can run "static" workers that are online all of the time, or dynamically scale their agents up and down as needed. + +For AWS, Buildkite maintains an auto-scaling solution called [Elastic CI Stack for AWS](https://github.com/buildkite/elastic-ci-stack-for-aws). + +Since, we primarily need support for GCP, we built our own agent manager. It's not 100% complete, but has been working very well during our testing/evaluation of Buildkite, and can handle 1000s of agents. + +[Elastic Buildkite Agent Manager](https://github.com/brianseeders/buildkite-agent-manager) + +Features: + +- Handles many different agent configurations with one instance +- Configures long-running agents, one-time use agents, and agents that will terminate after being idle for a configured amount of time +- Configures both minimum and maximum agent limits - i.e. can ensure a certain number of agents are always online, even if no jobs currently require them +- Supports overproivisioning agents by a percentage or a fixed number +- Supports many GCE settings: zone, image/image family, machine type, disk type and size, tags, metadata, custom startup scripts +- Agent configuration is stored in a separate repo and read at runtime +- Agents are gracefully replaced (e.g. after they finish their current job) if they are running using an out-of-date agent configuration that can affect the underlying GCE instance +- Detect and remove orphaned GCP instances +- Handles 1000s of agents (tested with 2200 before we hit GCP quotas) +- Does instance creation/deletion in large, parallel batches so that demand spikes are handled quickly + +Also planned: + +- Balance creating agents across numerous GCP zones for higher availability +- Automatically gracefully replace agents if disk usage gets too high +- Scaling idle timeouts: e.g. the first agent for a configuration might have an idle timeout of 1 hour, but the 200th might be 5 minutes + +#### Design + +#### Configuration + +#### Build / Deploy ### Elastic Buildkite PR Bot From 5a120c2fb9b96e365382cff31248d07f15d002a2 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 11:49:42 -0400 Subject: [PATCH 14/44] More agent manager info --- rfcs/text/0016_buildkite.md | 121 +++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 0ea13c4e5f968..510e5f6308dab 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -271,7 +271,72 @@ Buildkite supports very advanced pipeline logic, and has support for generating - [Artifacts](https://buildkite.com/docs/pipelines/artifacts) can be uploaded from and downloaded in steps, and are visible in the UI - [Parallelism and Concurrency](https://buildkite.com/docs/tutorials/parallel-builds) settings -See [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/flaky-test-suite-runner.yml) and [here](https://github.com/elastic/kibana/blob/2c1cd95b6028e9fd1f75a59eb7ff76c84667faf8/.buildkite/scripts/flaky-test-suite-runner.sh) for an example of a dynamically-generated pipeline based on user input that runs a job `RUN_COUNT` times (from user input), across up to a maximum of 25 agents at once. +Here's an example of a dynamically-generated pipeline based on user input that runs a job `RUN_COUNT` times (from user input), across up to a maximum of 25 agents at once: + +```yaml +# pipeline.yml + +steps: + - input: 'Test Suite Runner' + fields: + - select: 'Test Suite' + key: 'test-suite' + required: true + options: + - label: 'Default CI Group 1' + value: 'default:cigroup:1' + - label: 'Default CI Group 2' + value: 'default:cigroup:2' + - text: 'Number of Runs' + key: 'run-count' + required: true + default: 75 + - wait + - command: .buildkite/scripts/flaky-test-suite-runner.sh | buildkite-agent pipeline upload + label: ':pipeline: Upload' +``` + +```bash +#!/usr/bin/env bash + +# flaky-test-suite-runner.sh + +set -euo pipefail + +TEST_SUITE="$(buildkite-agent meta-data get 'test-suite')" +export TEST_SUITE + +RUN_COUNT="$(buildkite-agent meta-data get 'run-count')" +export RUN_COUNT + +UUID="$(cat /proc/sys/kernel/random/uuid)" +export UUID + +cat << EOF +steps: + - command: | + echo 'Bootstrap' + label: Bootstrap + agents: + queue: bootstrap + key: bootstrap + - command: | + echo 'Build Default Distro' + label: Build Default Distro + agents: + queue: bootstrap + key: default-build + depends_on: bootstrap + - command: 'echo "Running $TEST_SUITE"; sleep 10;' + label: 'Run $TEST_SUITE' + agents: + queue: ci-group + parallelism: $RUN_COUNT + concurrency: 25 + concurrency_group: '$UUID' + depends_on: default-build +EOF +``` #### Cloud-friendly pricing model @@ -366,10 +431,64 @@ Also planned: #### Design +The agent manager is primarily concerned with ensuring that, given an agent configuration, the number of online agents for that configuration is **greather than or equal to** the desired number. Buildkite then determines how to use the agents: which jobs they should execute and when they should go offline (due to being idle, done with jobs, etc). Even when stopping agents due to having an outdated configuration, Buildkite still determines the actual time that the agent should disconnect. + +![High-Level Design](../images/0016_agent_manager.png) + +The high-level design for the agent manager is pretty straightforward. There are three primary stages during execution: + +1. Gather Current State + 1. Data and agent configuration is gathered from various sources/APIs in parallel +2. Create Plan + 1. Given the current state across the various services, a plan is created based on agent configurations, current Buildkite job queue sizes, and current GCE instances. + 2. Instances need to be created when there aren't enough online/in-progress agents of a particular configuration to satisfy the needs of its matching queue. + 3. Agents need to be stopped when the agents have been online for too long (based on their configuration) or when their configuration is out-of-date. This is a soft stop, they will terminate after finishing their current job. + 4. Instances need to be deleted if they have been stopped (which happens when their agent stops), or when they have been online past their hard stop time (based on configuration). +3. Execute Plan + 1. The different types of actions in the plan are executed in parallel. Instance creating and deleting is done in batches to handle spikes quickly. + +An error at any step, e.g. when checking current state of GCP instances, will cause the rest of the run to abort. + +Because the service gathers data about the total current state and creates a plan based on that state each run, it's reasonably resistant to errors and it's self-healing. + #### Configuration +```js +{ + gcp: { + // Configurations at this level are defaults for all configurations defined under `agents` + project: 'elastic-kibana-184716', + zone: 'us-central1-b', + serviceAccount: 'elastic-buildkite-agent@elastic-kibana-184716.iam.gserviceaccount.com', + agents: [ + { + queue: 'default', + name: 'kibana-buildkite', + overprovision: 0, // percentage or flat number + minimumAgents: 1, + maximumAgents: 500, + gracefulStopAfterSecs: 60 * 60 * 6, + hardStopAfterSecs: 60 * 60 * 9, + idleTimeoutSecs: 60 * 60, + exitAfterOneJob: false, + imageFamily: 'kibana-bk-dev-agents', + machineType: 'n2-standard-1', + diskType: 'pd-ssd', + diskSizeGb: 75 + }, + { + // ... + }, + } +} +``` + #### Build / Deploy +Currently, the agent manager is built and deployed using [Google Cloud Build](https://cloud.google.com/build). It is deployed to and hosted using [GKE Auto-Pilot](https://cloud.google.com/blog/products/containers-kubernetes/introducing-gke-autopilot) (Kubernetes). GKE was used, rather than Cloud Run, primarily because the agent manager runs continuously (with a 30sec pause between executions) whereas Cloud Run is for services that respond to HTTP requests. + +It uses [Google Secret Manager](https://cloud.google.com/secret-manager) for storing/retrieving tokens for accessing Buildkite. It uses a GCP service account and [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) to manage GCP resources. + ### Elastic Buildkite PR Bot #### Overview From d9db121feeca836ab0fe4de2556f70136965e40d Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 11:50:59 -0400 Subject: [PATCH 15/44] Add new image --- rfcs/images/0016_agent_manager.png | Bin 0 -> 28771 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rfcs/images/0016_agent_manager.png diff --git a/rfcs/images/0016_agent_manager.png b/rfcs/images/0016_agent_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..92a135386e258bf5b159f331c967d05a17891f47 GIT binary patch literal 28771 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 literal 0 HcmV?d00001 From b2d9f48e47b4a3404819d9721145992a352bb44c Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 14:31:00 -0400 Subject: [PATCH 16/44] Start adding Jenkins section --- rfcs/text/0016_buildkite.md | 156 +++++++++++++++++++++++++++++++++++- 1 file changed, 155 insertions(+), 1 deletion(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 510e5f6308dab..2e07cad14976f 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -48,6 +48,7 @@ - [Elastic Buildkite Agent Manager](#elastic-buildkite-agent-manager) - [Overview](#overview-1) - [Design](#design) + - [Protection against creating too many instances](#protection-against-creating-too-many-instances) - [Configuration](#configuration) - [Build / Deploy](#build--deploy) - [Elastic Buildkite PR Bot](#elastic-buildkite-pr-bot) @@ -62,6 +63,23 @@ - [Drawbacks](#drawbacks) - [Alternatives](#alternatives) - [Jenkins](#jenkins) + - [Required](#required-2) + - [Scalable](#scalable-2) + - [Stable](#stable-2) + - [Updates](#updates) + - [Surfaces information intuitively](#surfaces-information-intuitively-2) + - [Pipelines](#pipelines-2) + - [Advanced Pipeline logic](#advanced-pipeline-logic-2) + - [Cloud-friendly pricing model](#cloud-friendly-pricing-model-2) + - [Public access](#public-access-2) + - [Secrets handling](#secrets-handling-2) + - [Support or Documentation](#support-or-documentation-2) + - [Scheduled Builds](#scheduled-builds-2) + - [Desired](#desired-2) + - [Customization](#customization-2) + - [Core functionality is first-party](#core-functionality-is-first-party-2) + - [First-class support for test results](#first-class-support-for-test-results-2) + - [GitHub Integration](#github-integration-2) - [Other solutions](#other-solutions) - [CircleCI](#circleci) - [GitHub Actions](#github-actions) @@ -78,6 +96,8 @@ Implement a CI system for Kibana teams that is highly scalable, is stable, surfa If the proposal involves a new or changed API, include a basic code example. Omit this section if it's not applicable. --> +TODO add a table overview of required/desired vs CI systems? + # Motivation We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. @@ -433,6 +453,10 @@ Also planned: The agent manager is primarily concerned with ensuring that, given an agent configuration, the number of online agents for that configuration is **greather than or equal to** the desired number. Buildkite then determines how to use the agents: which jobs they should execute and when they should go offline (due to being idle, done with jobs, etc). Even when stopping agents due to having an outdated configuration, Buildkite still determines the actual time that the agent should disconnect. +The current version of the agent manager only handles GCP-based agents, but support for other platforms could be added as well, such as AWS or Kubernetes. There's likely more complexity in managing all of the various agent images than in maintaining support in the agent manager. + +It is also designed to itself be stateless, so that it is easy to deploy and reason about. State is effectively stored in GCP and Buildkite. + ![High-Level Design](../images/0016_agent_manager.png) The high-level design for the agent manager is pretty straightforward. There are three primary stages during execution: @@ -451,6 +475,25 @@ An error at any step, e.g. when checking current state of GCP instances, will ca Because the service gathers data about the total current state and creates a plan based on that state each run, it's reasonably resistant to errors and it's self-healing. +##### Protection against creating too many instances + +Creating too many instances in GCP could be costly, so is worth mentioning here. Since the agent manager itself is stateless, and only looks at the current, external state when determining an execution plan, there is the possibility of creating too many instances. + +There are two primary mechanisms to protect against this: + +One is usage of GCP quotas. Maintaining reasonable GCP quotas will ensure that we don't create too many instances in a situation where something goes catastrophically wrong during operation. It's an extra failsafe. + +The other is built into the agent manager. The agent manager checks both the number of connected agents in Buildkite for a given configuration, as well as the number of instances currently running and being created in GCP. It uses whichever number is greater as the current number of instances. + +This is a simple failsafe, but means that a large number of unnecessary instances should only be able to be created in a pretty specific scenario (keep in mind that errors will abort the current agent manager run): + +- The GCP APIs (both read and create) are returning success codes +- The GCP API for listing instances is returning partial/missing/erroroneous data, with a success code +- GCP instances are successfully being created +- Created GCP instances are unable to connect to Buildkite, or Buildkite Agents API is returning partial/missing/erroroneous data + +All of these things would need to be true at the same time for a large number of instances to be created. In the unlikely event that that were to happen, the GCP quotas would still be in-place. + #### Configuration ```js @@ -598,7 +641,118 @@ There are tradeoffs to choosing any path. Attempt to identify them here. ## Jenkins -TODO how Jenkins stacks up against the required/desired functionality, and the kinds of things we would need to build to get there. +### Required + +#### Scalable + +Our current Jenkins instance only allows for 300-400 connected agents, before effectively going offline. We have strugged with this issue for several years, and completely redesigned our pipelines around this limitation. The resulting design, which involves running 20+ tasks in parallel on single, large machines, and managing all of the concurrency ourselves, is complicated and problematic. + +Other teams at Elastic, especially over the last few months, have been experiencing this same limitation with their Jenkins instaces as well. The team that manages Jenkins at Elastic is well aware of this issue, and is actively investigating. It is currently unknown whether or not it is a solvable problem (without sharding) or a limitation of Jenkins. + +#### Stable + +Firstly, Jenkins was not designed for high availability. If the primary/controller goes offline, CI is offline. + +The two biggest sources of stability issues for us are currently related to scaling (see above) and updates. + +##### Updates + +The typical update process for Jenkins looks like this: + +- Put Jenkins into shutdown mode, which stops any new builds from starting +- Wait for all currently-running jobs to finish +- Shutdown Jenkins +- Do the update +- Start Jenkins + +For us, shutdown mode also means that `gobld` stops creating new agents for our jobs. This means that many running jobs will never finish executing while shutdown mode is active. + +So, for us, the typical update process is: + +- Put Jenkins into shutdown mode, which stops any new builds from starting, and many from finishing +- Hard kill all of our currently running jobs +- Shutdown Jenkins +- Do the update +- Start Jenkins +- A human manually restarts CI for all PRs that were running before the update + +This is pretty disruptive for us, as developers have to wait several hours longer before merging or seeing the status of their PRs, plus there is manual work that must be done to restart CI. If we stay with Jenkins, we'll need to fix this process, and likely build some automation for it. + +#### Surfaces information intuitively + +Our pipelines are very complex, mainly because of the issues mentioned above related to designing around scaling issues, and none of the UIs in Jenkins work well for us. + +The [Stage View](https://kibana-ci.elastic.co/job/elastic+kibana+pipeline-pull-request) only works for very simple pipelines. Even if we were able to re-design our pipelines to populate this page better, there are just too many stages to display in this manner. + +[Blue Ocean](https://kibana-ci.elastic.co/blue/organizations/jenkins/elastic%2Bkibana%2Bpipeline-pull-request/activity), which is intended to be the modern UI for Jenkins, doesn't work at all for our pipelines. We have nested parallel stages in our pipelines, which [are not supported](https://issues.jenkins.io/browse/JENKINS-54010). + +[Pipeline Steps](https://kibana-ci.elastic.co/job/elastic+kibana+pipeline-pull-request/) (Choose a build -> Pipeline Steps) shows information fairly accurately (sometimes logs/errors are not attached to any steps, and do not show), but is very difficult to read. There are entire pages of largely irrelevant information (Setting environment variables, starting a `try` block, etc), which is difficult to read through, especially developers who don't interact with Jenkins every day. + +![Pipeline Steps](../images/0016_jenkins_pipeline_steps.png) + +We push a lot of information to GitHub and Slack, and have even built custom UIs, to try to minimize how much people need to interact directly with Jenkins. In particular, when things go wrong, it is very difficult to investigate using the Jenkins UI. + +#### Pipelines + +Jenkins supports pipeline-as-code through [Pipelines](https://www.jenkins.io/doc/book/pipeline), which we currently use. + +Pros: + +- Overall pretty powerful, pipelines execute Groovy code at runtime, so pipelines can do a lot and can be pretty complex, if you're willing to write the code +- Pipeline changes can be tested in PRs + +Cons: + +- The sandbox is pretty difficult to work with. There's a [hard-coded list](https://github.com/jenkinsci/script-security-plugin/tree/e99ba9cffb0502868b05d19ef5cd205ca7e0e5bd/src/main/resources/org/jenkinsci/plugins/scriptsecurity/sandbox/whitelists) of allowed methods for pipelines. Other methods must be approved separately, or put in a separate shared repository that runs trusted code. +- Pipeline code is serialized by Jenkins, and the serializiation process leads to a lot of issues that are difficult to debug and reason about. See [JENKINS-44924](https://issues.jenkins.io/browse/JENKINS-44924) - `List.sort()` doesn't work and silently returns `-1` instead of a list +- Reasonably complex pipelines are difficult to view in the UI ([see above](#surfaces-information-intuitively-2)) +- Using Pipelines to manage certain configurations (such as Build Parameters) requires running an outdated job once and letting it fail to update it +- Jobs that reference a pipeline have to be managed separately. Only third-party tools exist for managing these jobs as code (JJB and Job DSL). +- Very difficult to test code without running it live in Jenkins + +https://issues.jenkins.io/browse/JENKINS-44924 + +#### Advanced Pipeline logic + +See above section. Jenkins supports very advanced pipeline logic using scripted pipelines and Groovy. + +#### Cloud-friendly pricing model + +Given that Jenkins is open-source, we pay only for infrastructure and people to manage it. + +#### Public access + +Jenkins has pretty fine-grained authorization settings, including anonymous user access for the public. + +#### Secrets handling + +TODO + +#### Support or Documentation + +TODO + +#### Scheduled Builds + +TODO + +### Desired + +#### Customization + +TODO + +#### Core functionality is first-party + +TODO + +#### First-class support for test results + +TODO + +#### GitHub Integration + +TODO ## Other solutions From 3af75492287b22a3f631c5828b10a3e04458e30a Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 14:45:55 -0400 Subject: [PATCH 17/44] Add table --- rfcs/text/0016_buildkite.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 2e07cad14976f..dc7fdc9225643 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -96,7 +96,25 @@ Implement a CI system for Kibana teams that is highly scalable, is stable, surfa If the proposal involves a new or changed API, include a basic code example. Omit this section if it's not applicable. --> -TODO add a table overview of required/desired vs CI systems? +| | Jenkins | Buildkite | GitHub Actions | CircleCI | +| ------------------------------------ | ------- | --------- | -------------- | -------- | +| Scalable | No | Yes | No | Yes | +| Stable | No | Yes | No | Yes | +| Surfaces information intuitively | No | Yes | No | TODO | +| Pipelines | Yes | Yes | Yes | Yes | +| Advanced Pipeline logic | Yes | Yes | TODO | TODO | +| Cloud-friendly pricing model | Yes | Yes | TODO | No | +| Public access | Yes | Yes | Yes | TODO | +| Secrets handling | Yes | No | Yes | TODO | +| Support or Documentation | No | Yes | TODO | TODO | +| Scheduled Builds | Yes | Yes | TODO | TODO | +| Container support | TODO | TODO | TODO | TODO | +| | | | | | +| Customization | TODO | Yes | No | TODO | +| Core functionality is first-party | TODO | Mostly | TODO | TODO | +| First-class support for test results | Buggy | No | No | TODO | +| GitHub Integration | Yes | Simple | Yes | TODO | +| Local testing / reproduction? | | TODO | TODO | TODO | # Motivation From 6fef924b5e1dacc2fa1a3336ab14dcdc3ef02b5b Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 14:47:35 -0400 Subject: [PATCH 18/44] Change wording --- rfcs/text/0016_buildkite.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index dc7fdc9225643..85a449b66b3b0 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -113,8 +113,8 @@ Omit this section if it's not applicable. --> | Customization | TODO | Yes | No | TODO | | Core functionality is first-party | TODO | Mostly | TODO | TODO | | First-class support for test results | Buggy | No | No | TODO | -| GitHub Integration | Yes | Simple | Yes | TODO | -| Local testing / reproduction? | | TODO | TODO | TODO | +| GitHub Integration | Yes | Limited | Yes | TODO | +| Local testing / reproduction? | TODO | TODO | TODO | TODO | # Motivation From 9057fc85f01781c5b2cd79821f571d0730ef5dd6 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 14:57:28 -0400 Subject: [PATCH 19/44] Add image --- rfcs/images/0016_jenkins_pipeline_steps.png | Bin 0 -> 188275 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rfcs/images/0016_jenkins_pipeline_steps.png diff --git a/rfcs/images/0016_jenkins_pipeline_steps.png b/rfcs/images/0016_jenkins_pipeline_steps.png new file mode 100644 index 0000000000000000000000000000000000000000..51ad8fde8aae0eeb1417ec729716b07f9cbc602c GIT binary patch literal 188275 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

fP*V2W!cg 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%0A*9Zm==d2^q%W7?w$d#!^0okn` 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 qc-K)HT=@uIZ0&z literal 0 HcmV?d00001 From 2886677daa2e928ceeb7186ba0bc79ca8c9d0350 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 17:55:23 -0400 Subject: [PATCH 20/44] WIP --- rfcs/text/0016_buildkite.md | 69 +++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 85a449b66b3b0..70ef39e6be0b6 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -55,7 +55,7 @@ - [Overview](#overview-2) - [Configuration](#configuration-1) - [Build / Deploy](#build--deploy-1) - - [GCP Infrastructure](#gcp-infrastructure) + - [Infrastructure](#infrastructure) - [Monitoring / Alerting](#monitoring--alerting) - [Agent Image management](#agent-image-management) - [Buildkite org-level settings management](#buildkite-org-level-settings-management) @@ -110,8 +110,8 @@ Omit this section if it's not applicable. --> | Scheduled Builds | Yes | Yes | TODO | TODO | | Container support | TODO | TODO | TODO | TODO | | | | | | | -| Customization | TODO | Yes | No | TODO | -| Core functionality is first-party | TODO | Mostly | TODO | TODO | +| Customization | No | Yes | No | TODO | +| Core functionality is first-party | No | Mostly | TODO | TODO | | First-class support for test results | Buggy | No | No | TODO | | GitHub Integration | Yes | Limited | Yes | TODO | | Local testing / reproduction? | TODO | TODO | TODO | TODO | @@ -608,24 +608,53 @@ Currently, the bot is built and deployed using [Google Cloud Build](https://clou TODO link to cloud build yaml once available -### GCP Infrastructure +### Infrastructure -TODO +We will need to maintain our infrastructure related to Buildkite, primarily ephemeral agents. To start, it will mean supporting infrastructure in GCP, but could later mean AWS as well. -Hosting for bots/services, GCS buckets, images, networking (cloud nat), IAM/permissions +- Separate GCP project for CI resources +- Hosting for bots/services we maintain, such as the Agent Manager (GKE Auto-Pilot) and GitHub PR bot (Cloud Run) +- Google Storage Buckets for CI artifacts +- Networking (security, we may also need Cloud NAT) +- IAM and Security +- Agent images -Terraform +We are already using Terraform to manage most resources related to Buildkite, and will continue to do so. ### Monitoring / Alerting -TODO +We will need to set up and maintain monitoring and alerting for our GCP infrastructure, as well as Buildkite metrics. + +Some examples: + +GCP + +- Number of instances by type +- Age of instances +- Resource Quotas -GCP monitoring (instances, quotas, etc) +Buildkite -Buildkite monitoring (agent queues, job times) +- Agent queues +- Job wait times +- Build status ### Agent Image management +We will need to maintain images used to create GCP instances for our Buildkite agents. These images would need to be built on a regular basis (daily, or possibly more often). + +We could likely maintain a single linux-based image to cover all of our current CI needs. However, in the future, if we need to maintain many images across different operating systems and architectures, this is likely to become the most complex part of the CI system that we would need to maintain. Every operating system and architecture we need to support adds another group of required images, with unique dependencies and configuration automation. + +For our testing, we have a single GCP image, built using Packer, with the Buildkite agent installed and all of our dependencies. + +TODO + +automated process for updating images +cleaning out old images +rolling back images +base vs cache +cache image could run multiple times per day + ### Buildkite org-level settings management TODO @@ -728,8 +757,6 @@ Cons: - Jobs that reference a pipeline have to be managed separately. Only third-party tools exist for managing these jobs as code (JJB and Job DSL). - Very difficult to test code without running it live in Jenkins -https://issues.jenkins.io/browse/JENKINS-44924 - #### Advanced Pipeline logic See above section. Jenkins supports very advanced pipeline logic using scripted pipelines and Groovy. @@ -740,11 +767,17 @@ Given that Jenkins is open-source, we pay only for infrastructure and people to #### Public access -Jenkins has pretty fine-grained authorization settings, including anonymous user access for the public. +- Fine-grained authorization settings +- Anonymous user access +- Per-job authorization, so some jobs can be private #### Secrets handling -TODO +- Supports [Credentials](https://www.jenkins.io/doc/book/using/using-credentials/), which are stored encrypted on disk and have authorization settings + - Credentials are difficult to manage in an automated way +- Pipeline support for accessing credentials +- Credentials masked in log output +- Support for masking custom values in log output #### Support or Documentation @@ -752,7 +785,7 @@ TODO #### Scheduled Builds -TODO +Jenkins supports scheduled builds via a Cron-like syntax, and can spread scheduled jobs out. For example, if many jobs are scheduled to run every day at midnight, a syntax is available that will automatically spread the triggered jobs evenly out across the midnight hour. ### Desired @@ -762,6 +795,12 @@ TODO #### Core functionality is first-party +Jenkins is very modular, and almost all Jenkins functionality is provided by plugins. + +It's difficult to understand which plugins are required to support which base features. For example, Pipelines support is provided by a group of many plugins, and many of them have outdated names ([Pipeline: Nodes and Processes](https://github.com/jenkinsci/workflow-durable-task-step-plugin) is actually a plugin called `workflow-durable-task-step-plugin`). + +Many plugins are maintained by CloudBees employees, but it can be very difficult to determine which ones are, without knowing the names of CloudBees employees. All Jenkins community/third-party plugins live under the `jenkinsci` organization in GitHub. + TODO #### First-class support for test results From c52f7fde9dd179b03e4ceb5184a475f23d143f2c Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 22 Mar 2021 21:12:09 -0400 Subject: [PATCH 21/44] WIP --- rfcs/text/0016_buildkite.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 70ef39e6be0b6..542d2455347a8 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -96,6 +96,8 @@ Implement a CI system for Kibana teams that is highly scalable, is stable, surfa If the proposal involves a new or changed API, include a basic code example. Omit this section if it's not applicable. --> +This table provides an overview of the conclusions made throughout the rest of this document. A lot of this is subjective, but we've tried to take an honest look at each system and feature, based on a large amount of research on and/or experience with each system. + | | Jenkins | Buildkite | GitHub Actions | CircleCI | | ------------------------------------ | ------- | --------- | -------------- | -------- | | Scalable | No | Yes | No | Yes | @@ -116,6 +118,8 @@ Omit this section if it's not applicable. --> | GitHub Integration | Yes | Limited | Yes | TODO | | Local testing / reproduction? | TODO | TODO | TODO | TODO | +TODO link the conclusions to each section? + # Motivation We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. @@ -657,17 +661,21 @@ cache image could run multiple times per day ### Buildkite org-level settings management -TODO +There are a few settings outside of pipelines that we will need to manage. -Mostly/all terraform +- Top-level pipelines and their settings +- Pipeline schedules / scheduled jobs +- Public visibility of pipelines +- Teams and Permissions +- Single Sign On settings -Any settings not stored in pipeline yaml +Most of the content for our pipelines will be stored in repositories as YAML. However, a job still must exist in Buildkite that points to that repo and that YAML. For managing those top-level configurations, an official [Terraform provider](https://registry.terraform.io/providers/buildkite/buildkite/latest/docs/resources/pipeline) exists, which we will likely take advantage of. -Top-level pipelines and their settings +Pipeline schedules can also be managed using the Terraform provider. -Users/roles +Teams can also be managed using Terraform, but it's unlikely we will need to use Teams. -SSO +For everything else, we will likely start off using UI and build automation (or contribute to the Terraform provider) where we see fit. Most of the other settings are easy to configure, and unlikely to change. ### IT Security Processes @@ -817,6 +825,12 @@ TODO ### GitHub Actions +GitHub Actions is an interesting option, but it didn't pass our initial consideration round for one main reason: scalability. + +To ensure we're able to run the number of parallel tasks that we need to run, we'll have to use self-hosted runners. Self-hosted runners aren't subject to concurrency limits. However, managing auto-scaling runners seems to be pretty complex at the moment, and GitHub doesn't seem to have any official guidance on how to do it. + +Also, even with self-hosted runners, there is a 1,000 API request per hour hard limit, though it does not specify which APIs. Assuming even that 1 parallel step in a job is one API request, given the large number of small tasks that we'd like to split our CI into, we will likely hit this limit pretty quickly. + # Adoption strategy If we implement this proposal, how will existing Kibana developers adopt it? Is From e58171ee050b305e495fe66da3b749ebd30393a3 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 23 Mar 2021 11:10:36 -0400 Subject: [PATCH 22/44] wip --- rfcs/text/0016_buildkite.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index 542d2455347a8..feecfbff11643 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -91,12 +91,7 @@ Implement a CI system for Kibana teams that is highly scalable, is stable, surfaces information in an intuitive way, and supports pipelines that are easy to understand and change. - - -This table provides an overview of the conclusions made throughout the rest of this document. A lot of this is subjective, but we've tried to take an honest look at each system and feature, based on a large amount of research on and/or experience with each system. +This table provides an overview of the conclusions made throughout the rest of this document. A lot of this is subjective, but we've tried to take an honest look at each system and feature, based on a large amount of research on and/or experience with each system, our requirements, and our preferences as a team. Your team would likely come to different conclusions based on your preferences and requirements. | | Jenkins | Buildkite | GitHub Actions | CircleCI | | ------------------------------------ | ------- | --------- | -------------- | -------- | @@ -260,8 +255,6 @@ We were able to connect 2,200 running agents and run a [single job with 1,800 pa TODO test a large number of parallel jobs as well? -TODO link to agent manager info - #### Stable So far, we have witnessed no stability issues in our testing. From da9ca3123740fc2cd70190be55c28d56b72534b8 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 23 Mar 2021 14:30:17 -0400 Subject: [PATCH 23/44] WIP --- rfcs/text/0016_buildkite.md | 40 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/rfcs/text/0016_buildkite.md b/rfcs/text/0016_buildkite.md index feecfbff11643..dfe52a9940f65 100644 --- a/rfcs/text/0016_buildkite.md +++ b/rfcs/text/0016_buildkite.md @@ -119,7 +119,7 @@ TODO link the conclusions to each section? We have lived with the scalability and stability problems of our current Jenkins infrastructure for several years. We have spent a significant amount of time designing around problems, and are limited in how we can design our pipelines. Since the company-wide effort to move to a new system has been cancelled for the forseeable future, we are faced with either re-engineering the way we use Jenkins, or exploring other solutions and potentially managing one ourselves. -This RFC is focused on the option of using a system other than Jenkins, and managing it ourselves (to the extend that it must be managed). If the RFC is rejected, the alternative will be to instead invest significantly into Jenkins to further stablize and scale our usage of it. +This RFC is focused on the option of using a system other than Jenkins, and managing it ourselves (to the extent that it must be managed). If the RFC is rejected, the alternative will be to instead invest significantly into Jenkins to further stabilize and scale our usage of it. ## Required and Desired Capabilities @@ -140,7 +140,7 @@ This RFC is focused on the option of using a system other than Jenkins, and mana #### Surfaces information intuitively - Developers should be able to easily understand what happened during their builds, and find information related to failures. -- Uer interfaces should be functional and easy to use. +- User interfaces should be functional and easy to use. - Overview and details about failures and execution time are particularly important. #### Pipelines @@ -151,7 +151,7 @@ This RFC is focused on the option of using a system other than Jenkins, and mana #### Advanced Pipeline logic -With such a large codebase and CI pipeline, we often complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. +With such a large codebase and CI pipeline, we often have complex requirements around when and how certain tasks should run, and we want the ability to handle this built into the system we use. It can be very difficult and require complex solutions for fairly simple use cases when the system does not support advanced pipeline logic out of the box. For example, the flaky test suite runner that we currently have in Jenkins is fairly simple: run a given task (which might have a dependency) `N` number of times on `M` agents. This is very difficult to model in a system like TeamCity, which does not have dynamic dependencies. @@ -172,7 +172,7 @@ If the given system has a cost, the pricing model should be cloud-friendly and/o A per-agent or per-build model based on peak usage in a month is not a good model, because our peak build times are generally short-lived (e.g. around feature freeze). -A model based on build-minutes can also be bad, if it encourages running things in parallel on bigger machines to keep costs down. For example, running two tasks on a single 2-CPU machine with our own orchestration should not be cheaper than running two tasks on two 1-CPU machines using the system's build-in orchestration. +A model based on build-minutes can also be bad, if it encourages running things in parallel on bigger machines to keep costs down. For example, running two tasks on a single 2-CPU machine with our own orchestration should not be cheaper than running two tasks on two 1-CPU machines using the system's built-in orchestration. #### Public access @@ -208,7 +208,7 @@ Required or Desired? #### Customization -We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desirable. The alternative is building custom reports and UIs outside of the system. #### Core functionality is first-party @@ -229,7 +229,7 @@ TODO # Buildkite - Detailed design -For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgable, and the pricing model does not encourage bad practices to lower cost. +For the alternative system in this RFC, we are recommending Buildkite. The UI, API, and documentation have been a joy to work with, they provide most of our desired features and functionality, the team is responsive and knowledgeable, and the pricing model does not encourage bad practices to lower cost. ## Overview @@ -281,15 +281,17 @@ The Buildkite UI is very easy to use, and works as expected. Here is some of the - Artifacts uploaded by each step - The entire agent/job configuration at the time the step executed, expressed as environment variables -TODO how are complex pipelines (dependencies) handled in the UI? +![Example Build](../images/0016_buildkite_build.png) -TODO screenshots? links? +Note that dependencies between steps are mostly not shown in the UI. See screenshot below for an example. There are several layers of dependencies between all of the steps in this pipeline. The only one that is shown is the final step (`Post All`), which executes after all steps beforehand are finished. There are some other strategies to help organize the steps (such as the new grouping functionality) if we need. -TODO link to customization section once complete - we can surface any extra information we want +![Dependencies](../images/0016_buildkite_deps.png) + +Buildkite has rich build page customization via "annotations" which will let us surface custom information. See the [customization section](#customization-1) #### Pipelines -- [Buildkite piplines](https://buildkite.com/docs/pipelines) must be defined as code. Even if you configure them through the UI, you still have to do so using yaml. +- [Buildkite pipelines](https://buildkite.com/docs/pipelines) must be defined as code. Even if you configure them through the UI, you still have to do so using yaml. - This is subjective, but the yaml syntax for pipelines is friendly and straightforward. We feel that it will be easy for teams to create and modify pipelines with minimal instructions. - If your pipeline is configured to use yaml stored in your repo for its definition, branches and PRs will use the version in their source by default. This means that PRs that change the pipeline can be tested as part of the PR CI. - Top-level pipeline configurations, i.e. basically a pointer to a repo that has the real pipeline yaml in it, can be configured via the UI, API, or terraform. @@ -409,7 +411,7 @@ Besides this, [Enterprise](https://buildkite.com/enterprise) customers get 24/7 #### Customization -We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desireable. The alternative is building custom reports and UIs outside of the system. +We have very large CI pipelines which generate a lot of information (bundle sizes, performance numbers, etc). Being able to attach this information to builds, so that it lives with the builds in the CI system, is highly desirable. The alternative is building custom reports and UIs outside of the system. [Annotations](https://buildkite.com/docs/agent/v3/cli-annotate) provide a way to add rich, well-formatted, custom information to build pages using CommonMark Markdown. There are several built-in CSS classes for formatting and several visual styles. Images, emojis, and links can be embedded as well. Just for some examples: Metrics such as bundle sizes, links to the distro builds for that build, and screenshots for test failures could all be embedded directly into the build pages. @@ -450,7 +452,7 @@ Features: - Handles many different agent configurations with one instance - Configures long-running agents, one-time use agents, and agents that will terminate after being idle for a configured amount of time - Configures both minimum and maximum agent limits - i.e. can ensure a certain number of agents are always online, even if no jobs currently require them -- Supports overproivisioning agents by a percentage or a fixed number +- Supports overprovisioning agents by a percentage or a fixed number - Supports many GCE settings: zone, image/image family, machine type, disk type and size, tags, metadata, custom startup scripts - Agent configuration is stored in a separate repo and read at runtime - Agents are gracefully replaced (e.g. after they finish their current job) if they are running using an out-of-date agent configuration that can affect the underlying GCE instance @@ -466,7 +468,7 @@ Also planned: #### Design -The agent manager is primarily concerned with ensuring that, given an agent configuration, the number of online agents for that configuration is **greather than or equal to** the desired number. Buildkite then determines how to use the agents: which jobs they should execute and when they should go offline (due to being idle, done with jobs, etc). Even when stopping agents due to having an outdated configuration, Buildkite still determines the actual time that the agent should disconnect. +The agent manager is primarily concerned with ensuring that, given an agent configuration, the number of online agents for that configuration is **greater than or equal to** the desired number. Buildkite then determines how to use the agents: which jobs they should execute and when they should go offline (due to being idle, done with jobs, etc). Even when stopping agents due to having an outdated configuration, Buildkite still determines the actual time that the agent should disconnect. The current version of the agent manager only handles GCP-based agents, but support for other platforms could be added as well, such as AWS or Kubernetes. There's likely more complexity in managing all of the various agent images than in maintaining support in the agent manager. @@ -492,7 +494,7 @@ Because the service gathers data about the total current state and creates a pla ##### Protection against creating too many instances -Creating too many instances in GCP could be costly, so is worth mentioning here. Since the agent manager itself is stateless, and only looks at the current, external state when determining an execution plan, there is the possibility of creating too many instances. +Creating too many instances in GCP could be costly, so it is worth mentioning here. Since the agent manager itself is stateless, and only looks at the current, external state when determining an execution plan, there is the possibility of creating too many instances. There are two primary mechanisms to protect against this: @@ -503,9 +505,9 @@ The other is built into the agent manager. The agent manager checks both the num This is a simple failsafe, but means that a large number of unnecessary instances should only be able to be created in a pretty specific scenario (keep in mind that errors will abort the current agent manager run): - The GCP APIs (both read and create) are returning success codes -- The GCP API for listing instances is returning partial/missing/erroroneous data, with a success code +- The GCP API for listing instances is returning partial/missing/erroneous data, with a success code - GCP instances are successfully being created -- Created GCP instances are unable to connect to Buildkite, or Buildkite Agents API is returning partial/missing/erroroneous data +- Created GCP instances are unable to connect to Buildkite, or Buildkite Agents API is returning partial/missing/erroneous data All of these things would need to be true at the same time for a large number of instances to be created. In the unlikely event that that were to happen, the GCP quotas would still be in-place. @@ -693,9 +695,9 @@ There are tradeoffs to choosing any path. Attempt to identify them here. #### Scalable -Our current Jenkins instance only allows for 300-400 connected agents, before effectively going offline. We have strugged with this issue for several years, and completely redesigned our pipelines around this limitation. The resulting design, which involves running 20+ tasks in parallel on single, large machines, and managing all of the concurrency ourselves, is complicated and problematic. +Our current Jenkins instance only allows for 300-400 connected agents, before effectively going offline. We have struggled with this issue for several years, and completely redesigned our pipelines around this limitation. The resulting design, which involves running 20+ tasks in parallel on single, large machines, and managing all of the concurrency ourselves, is complicated and problematic. -Other teams at Elastic, especially over the last few months, have been experiencing this same limitation with their Jenkins instaces as well. The team that manages Jenkins at Elastic is well aware of this issue, and is actively investigating. It is currently unknown whether or not it is a solvable problem (without sharding) or a limitation of Jenkins. +Other teams at Elastic, especially over the last few months, have been experiencing this same limitation with their Jenkins instances as well. The team that manages Jenkins at Elastic is well aware of this issue, and is actively investigating. It is currently unknown whether or not it is a solvable problem (without sharding) or a limitation of Jenkins. #### Stable @@ -752,7 +754,7 @@ Pros: Cons: - The sandbox is pretty difficult to work with. There's a [hard-coded list](https://github.com/jenkinsci/script-security-plugin/tree/e99ba9cffb0502868b05d19ef5cd205ca7e0e5bd/src/main/resources/org/jenkinsci/plugins/scriptsecurity/sandbox/whitelists) of allowed methods for pipelines. Other methods must be approved separately, or put in a separate shared repository that runs trusted code. -- Pipeline code is serialized by Jenkins, and the serializiation process leads to a lot of issues that are difficult to debug and reason about. See [JENKINS-44924](https://issues.jenkins.io/browse/JENKINS-44924) - `List.sort()` doesn't work and silently returns `-1` instead of a list +- Pipeline code is serialized by Jenkins, and the serialization process leads to a lot of issues that are difficult to debug and reason about. See [JENKINS-44924](https://issues.jenkins.io/browse/JENKINS-44924) - `List.sort()` doesn't work and silently returns `-1` instead of a list - Reasonably complex pipelines are difficult to view in the UI ([see above](#surfaces-information-intuitively-2)) - Using Pipelines to manage certain configurations (such as Build Parameters) requires running an outdated job once and letting it fail to update it - Jobs that reference a pipeline have to be managed separately. Only third-party tools exist for managing these jobs as code (JJB and Job DSL). From 4ef85faac54236b8346182db2c7375ab6ed90dbd Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Tue, 23 Mar 2021 14:30:30 -0400 Subject: [PATCH 24/44] Add images --- rfcs/images/0016_buildkite_build.png | Bin 0 -> 194899 bytes rfcs/images/0016_buildkite_deps.png | Bin 0 -> 44281 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 rfcs/images/0016_buildkite_build.png create mode 100644 rfcs/images/0016_buildkite_deps.png diff --git a/rfcs/images/0016_buildkite_build.png b/rfcs/images/0016_buildkite_build.png new file mode 100644 index 0000000000000000000000000000000000000000..1b04fc85561c8db80c567ec24ce55c1539d77989 GIT binary patch literal 194899 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 NP*Ko?mCKn2{13@;@g@KO literal 0 HcmV?d00001 diff --git a/rfcs/images/0016_buildkite_deps.png b/rfcs/images/0016_buildkite_deps.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b0376d6e26f5456bf8fa1d3b3b1205edd79b5e GIT binary patch literal 44281 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