From 98a6b5094ba28a23bc80921108708c42a48e5d68 Mon Sep 17 00:00:00 2001 From: eeaton Date: Mon, 24 Jun 2024 17:03:12 +0100 Subject: [PATCH] Chore(docs): Add guidance about deprecated deployment methods and intended support (#1276) --- 0-bootstrap/README-Jenkins.md | 2 ++ 0-bootstrap/README.md | 20 +++++++++++++++++++- README.md | 22 +++++++++++++++++++--- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/0-bootstrap/README-Jenkins.md b/0-bootstrap/README-Jenkins.md index d9ab310cb..ac536a6c4 100644 --- a/0-bootstrap/README-Jenkins.md +++ b/0-bootstrap/README-Jenkins.md @@ -1,3 +1,5 @@ +*Warning: the guidance for deploying with Jenkins is no longer actively tested or maintained. While we have left the guidance available for users who prefer Jenkins, we make no guarantees about its quality, and you might be responsible for troubleshooting and modifying the directions.* + # 0-bootstrap - deploying a Jenkins-compatible environment The purpose of this step is to bootstrap a GCP organization, creating all the required resources & permissions to start using the Cloud Foundation Toolkit (CFT). This step also guides you on how to configure a CI/CD project to host a Jenkins Agent, which connects to your existing Jenkins Controller infrastructure & your own Git repos (which might live on-prem). The Jenkins Agent will run [CI/CD Pipelines](../docs/GLOSSARY.md#foundation-cicd-pipeline) for foundations code in subsequent stages. diff --git a/0-bootstrap/README.md b/0-bootstrap/README.md index 354e9f756..2b5b5c58c 100644 --- a/0-bootstrap/README.md +++ b/0-bootstrap/README.md @@ -58,6 +58,20 @@ file. The purpose of this step is to bootstrap a Google Cloud organization, creating all the required resources and permissions to start using the Cloud Foundation Toolkit (CFT). This step also configures a [CI/CD Pipeline](/docs/GLOSSARY.md#foundation-cicd-pipeline) for foundations code in subsequent stages. The [CI/CD Pipeline](/docs/GLOSSARY.md#foundation-cicd-pipeline) can use either Cloud Build and Cloud Source Repos or Jenkins and your own Git repos (which might live on-premises). +## Intended usage and support + +This repository is intended as an example to be forked, tweaked, and maintained in the user's own version-control system; the modules within this repository are not intended for use as remote references. +Though this blueprint can help accelerate your foundation design and build, we assume that you have the engineering skills and teams to deploy and customize your own foundation based on your own requirements. + +We will support: + - Code is semantically valid, pinned to known good versions, and passes terraform validate and lint checks + - All PR to this repo must pass integration tests to deploy all resources into a test environment before being merged + - Feature requests about ease of use of the code, or feature requests that generally apply to all users, are welcome + +We will not support: + - In-place upgrades from a foundation deployed with an earlier version to a more recent version, even for minor version changes, might not be feasible. Repository maintainers do not have visibility to what resources a user deploys on top of their foundation or how the foundation was customized in deployment, so we make no guarantee about avoiding breaking changes. + - Feature requests that are specific to a single user's requirement and not representative of general best practices + ## Prerequisites To run the commands described in this document, install the following: @@ -153,6 +167,8 @@ See [troubleshooting](../docs/TROUBLESHOOTING.md) if you run into issues during ## Deploying with Jenkins +*Warning: the guidance for deploying with Jenkins is no longer actively tested or maintained. While we have left the guidance available for users who prefer Jenkins, we make no guarantees about its quality, and you might be responsible for troubleshooting and modifying the directions.* + If you are using the `jenkins_bootstrap` sub-module, see [README-Jenkins](./README-Jenkins.md) for requirements and instructions on how to run the 0-bootstrap step. Using Jenkins requires a few manual steps, including configuring connectivity with @@ -178,7 +194,9 @@ Using Terraform Cloud requires manual creation of the GitHub repositories or Git ## Deploying with Cloud Build -**Note:** When deploying with cloud build is also possible to use a [script helper](../helpers/foundation-deployer/README.md) to do the deploy. +*Warning: This method has a dependency on Cloud Source Repositories, which is [no longer available to new customers](https://cloud.google.com/source-repositories/docs). If you have previously used the CSR API in your organization then you can use this method, but a newly created organization will not be able to enable CSR and cannot use this deployment method. In that case, we recommend that you follow the directions for deploying locally, Github, Gitlab, or Terraform Cloud instead.* + +The following steps introduce the steps to deploy with Cloud Build Alternatively, use the [helper script](../helpers/foundation-deployer/README.md) to automate all the stages of. Use the helper script when you want to rapidly create and destroy the entire organization for demonstration or testing purposes, without much customization at each stage. 1. Clone [terraform-example-foundation](https://github.com/terraform-google-modules/terraform-example-foundation) into your local environment and navigate to the `0-bootstrap` folder. diff --git a/README.md b/README.md index f2f78cddc..a9aad504d 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,29 @@ # terraform-example-foundation This example repository shows how the CFT Terraform modules can build a secure Google Cloud foundation, following the [Google Cloud Enterprise Foundations Blueprint](https://cloud.google.com/architecture/security-foundations) (previously called the _Security Foundations Guide_). -The supplied structure and code is intended to form a starting point for building your own foundation with pragmatic defaults that you can customize to meet your own requirements. Currently, the step 0 is manually executed. -From step 1 onwards, the Terraform code is deployed by using either Google Cloud Build (default) or Jenkins. -Cloud Build has been chosen by default to allow you to quickly get started without having to deploy a CI/CD tool, although it is worth noting the code can easily be executed by your preferred tool. +The supplied structure and code is intended to form a starting point for building your own foundation with pragmatic defaults that you can customize to meet your own requirements. + +The intended audience of this blueprint is large enterprise organizations with a dedicated platform team responsible for deploying and maintaining their GCP environment, who is commited to separation of duties across multiple teams and managing their environment solely through version-controlled Infrastructure as Code. Smaller organizations looking for a turnkey solution might prefer other options such as [Google Cloud Setup](https://console.cloud.google.com/cloud-setup/overview) + +## Intended usage and support + +This repository is intended as an example to be forked, tweaked, and maintained in the user's own version-control system; the modules within this repository are not intended for use as remote references. +Though this blueprint can help accelerate your foundation design and build, we assume that you have the engineering skills and teams to deploy and customize your own foundation based on your own requirements. + +We will support: + - Code is semantically valid, pinned to known good versions, and passes terraform validate and lint checks + - All PR to this repo must pass integration tests to deploy all resources into a test environment before being merged + - Feature requests about ease of use of the code, or feature requests that generally apply to all users, are welcome + +We will not support: + - In-place upgrades from a foundation deployed with an earlier version to a more recent version, even for minor version changes, might not be feasible. Repository maintainers do not have visibility to what resources a user deploys on top of their foundation or how the foundation was customized in deployment, so we make no guarantee about avoiding breaking changes. + - Feature requests that are specific to a single user's requirement and not representative of general best practices ## Overview This repo contains several distinct Terraform projects, each within their own directory that must be applied separately, but in sequence. +Stage `0-bootstrap` is manually executed, and subsequent stages are executed using your preferred CI/CD tool. + Each of these Terraform projects are to be layered on top of each other, and run in the following order. ### [0. bootstrap](./0-bootstrap/)