From 57ee376b9e2a84f26703643a210fd715e49925dc Mon Sep 17 00:00:00 2001 From: Michael Noonan Date: Thu, 28 Sep 2023 13:56:33 +1000 Subject: [PATCH 01/49] Simplifies the telemetry request doc page Previously, this page was brittle because it tried to describe every data element, making it harder to change telemetry, resulting in this page becoming out of date. The detailed list isn't really needed any more because: 1. Customers can download a preview of the request to see what is being sent. 2. We have our GDPR page which describes our stance on data privacy and our compliance. --- .../security/outbound-requests/telemetry.md | 59 ++++--------------- 1 file changed, 10 insertions(+), 49 deletions(-) diff --git a/src/pages/docs/security/outbound-requests/telemetry.md b/src/pages/docs/security/outbound-requests/telemetry.md index 541cd8af99..d718d855a9 100644 --- a/src/pages/docs/security/outbound-requests/telemetry.md +++ b/src/pages/docs/security/outbound-requests/telemetry.md @@ -1,61 +1,22 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-07-07 +modDate: 2023-09-28 title: Telemetry description: Telemetry from Octopus Server and what is included navOrder: 25 --- -Telemetry reporting is enabled by default and transmits once per day. We use the data we receive to inform our decisions and to help us make a better product. You can opt-out of sending telemetry by navigating to **Configuration ➜ Telemetry** in Octopus. +Telemetry reporting is enabled by default and transmits once per day. We use the data we receive to inform our decisions and to help us make a better product. Self-hosted customers can opt-out of sending telemetry by navigating to **Configuration ➜ Telemetry** in Octopus. -When the **Telemetry Reporting** option is enabled, Octopus will make an HTTPS request, this request includes: +When the **Telemetry Reporting** option is enabled, Octopus will make a secure HTTPS request containing the following data. -- The current Octopus Deploy version number that you are running. -- A unique installation ID (read more below). -- Telemetry data payload - -In addition, we'll send some specific aggregate criteria along with the request. This has evolved a bit over time, so it depends on the version you are running: - -| Metrics | Since | -| ------------- | ------- | -| The number of environments that you have | <2.6 | -| The number of machines and deployment targets that you have (including Listening Tentacles, Polling Tentacles, Offline package drops, Azure Web Apps, Azure Cloud Services, Kubernetes and SSH connections) | <2.6 | -| The number of projects that you have | <2.6 | -| The number of each of the different types of deployment steps that you have | <2.6 | -| The number of releases and deployments that you have done in the last 90 days | <2.6 | -| The number of users that you have | <2.6 | -| A SHA1 hash of your license key serial number | 2.6 | -| The amount of memory Octopus is using | 2.6 | -| The % of CPU Octopus is using on average | 2.6 | -| The number of channels you are using | 3.2 | -| Usage of multi-tenant features (number of tenants, number of tenant tags) | 3.4 | -| The number of certificates you have | 3.11.2 | -| The time to your first deployment | 3.12 | -| Whether you are using LetsEncrypt | 3.15 | -| Whether you are using the guest account | 3.16.1 | -| The number of each of the different community steps you have | 2018.2.2 | -| The number of Azure accounts and AWS accounts | 2018.2.2 | -| Whether you have a custom account configured for the built-in worker | 2018.2.2 | -| The number of non built-in workers you have | 2018.2.2 | -| Number of projects using release note templates and the date of the last metadata event | 2019.4.0 | -| The number of monthly active users that you have | 2019.5.1 | -| The operating systems of the server and targets | 2019.5.4 | -| The number and type of issue trackers that you use | 2019.4 | -| The number of Runbooks and Runbook runs, snapshots, Triggers that you have | 2019.10 | -| Whether the server is running in a container | 2020.1.21 | -| The usage of step configuration options | 2020.2.5 | -| Aggregated type, result code and duration of database and api calls | 2020.2.14 | -| Counts of specific kinds of events that occur internally, e.g. usage of deprecated code paths, errors | 2020.3.0 | -| Structured Configuration Variable usage across projects including how many steps have Structured Configuration Variables enabled and what file extensions are being used | 2020.4.0 | -| OS Architecture of Deployment Target Tentacles | 2021.1.0 | -| The number of Projects that are version controlled | 2021.2.0 | -| Aggregated data about the number and type of ITSM change managed deployments | 2022.2.0 | - -The installation ID is a GUID that we generate when Octopus is installed. This GUID is simply a way for us to get a rough idea of the number of installations there are in the wild, and which versions people are using, so we can make decisions about backwards compatibility support. - -Together, this information helps us when making decisions about the product. For example, we expected users to only have a handful of machines, but the statistics tell us that some customers have over 900; we now take that into account when designing the user experience. - -Be assured that names, descriptions, URI's, and so on are _never_ included. You can download a preview of the data that will be sent by clicking on the **Download Preview** button on the **Configuration ➜ Telemetry** page +| Data | Description | +| ----- | ------ | +| Version | The current Octopus Deploy version number that you are running. | +| Installation ID | A GUID that we generate when Octopus is installed. This GUID is simply a way for us to get a rough idea of the number of installations that exist in the wild, and which versions people are using, so we can make decisions about backwards compatibility support. | +| Telemetry payload | Configuration and usage information helps us when making decisions about the product. For example, we expected users to only have a handful of machines, but the statistics tell us that some customers have over 900; we now take that into account when designing the user experience. | Please do consider enabling **Telemetry Reporting**. We look at the data every week, and it really does help us to make a better product. + +Be assured that names, descriptions, URI's, and so on are _never_ included. You can download a preview of the data that will be sent by clicking on the **Download Preview** button on the **Configuration ➜ Telemetry** page. You can also learn more about Octopus and data privacy in our [GDPR page](https://octopus.com/legal/gdpr). \ No newline at end of file From 0c027ae8ed476279295dc862025b9f53a0a5a2f2 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Thu, 28 Sep 2023 14:17:06 +0100 Subject: [PATCH 02/49] Update telemetry.md --- src/pages/docs/security/outbound-requests/telemetry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/docs/security/outbound-requests/telemetry.md b/src/pages/docs/security/outbound-requests/telemetry.md index d718d855a9..175c16deb7 100644 --- a/src/pages/docs/security/outbound-requests/telemetry.md +++ b/src/pages/docs/security/outbound-requests/telemetry.md @@ -3,7 +3,7 @@ layout: src/layouts/Default.astro pubDate: 2023-01-01 modDate: 2023-09-28 title: Telemetry -description: Telemetry from Octopus Server and what is included +description: Find out about Octopus telemetry reporting and how it helps us make a better product. navOrder: 25 --- @@ -19,4 +19,4 @@ When the **Telemetry Reporting** option is enabled, Octopus will make a secure H Please do consider enabling **Telemetry Reporting**. We look at the data every week, and it really does help us to make a better product. -Be assured that names, descriptions, URI's, and so on are _never_ included. You can download a preview of the data that will be sent by clicking on the **Download Preview** button on the **Configuration ➜ Telemetry** page. You can also learn more about Octopus and data privacy in our [GDPR page](https://octopus.com/legal/gdpr). \ No newline at end of file +Be assured that names, descriptions, URI's, and so on are _never_ included. You can download a preview of the data that will be sent by clicking on the **Download Preview** button on the **Configuration ➜ Telemetry** page. You can also learn more about Octopus and data privacy in our [GDPR page](https://octopus.com/legal/gdpr). From 883ccf1327d4838f5b96d9b08021ec510c7730ef Mon Sep 17 00:00:00 2001 From: Donny Bell <63249187+donnybell@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:21:46 +0100 Subject: [PATCH 03/49] Create upgrade-find-and-backup-master-key.md --- .../upgrade/upgrade-find-and-backup-master-key.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/shared-content/upgrade/upgrade-find-and-backup-master-key.md diff --git a/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md b/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md new file mode 100644 index 0000000000..7355e8e47c --- /dev/null +++ b/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md @@ -0,0 +1,12 @@ +### Finding and backing up your Master Key + +When connecting an existing Octopus database to a "new" Octopus instance, either due to migration or for testing, you will need the Master Key to gain access to the database during the Octopus instance setup process. + +To obtain your existing Master Key from your source Octopus instance, you can simply open Octopus Manager then select "View master key" as shown below: + + +:::figure +![](/docs/upgrade/images/view-master-key.png) +::: + +Alternatively, you may also use the `show-master-key` command via the `Octopus.Server.exe` command-line tool. [You can find more information on this here](https://octopus.com/docs/octopus-rest-api/octopus.server.exe-command-line/show-master-key). From c7b9db4fb820e38e0dce1100f8f7f72f8b2c96f2 Mon Sep 17 00:00:00 2001 From: Donny Bell <63249187+donnybell@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:26:28 +0100 Subject: [PATCH 04/49] Update creating-test-instance.mdx --- .../administration/upgrading/guide/creating-test-instance.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx b/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx index ec7879cec8..42062600cf 100644 --- a/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx +++ b/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx @@ -6,6 +6,7 @@ title: Creating a test instance description: A guide on how to create a test instance with Octopus Deploy navOrder: 8 --- +import UpgradeFindAndBackupMasterKey from 'src/shared-content/upgrade/upgrade-find-and-backup-master-key.md'; import UpgradeOctopusBackupDatabase from 'src/shared-content/upgrade/upgrade-octopus-backup-database.include.md'; import UpgradeTestingUpgradedInstance from 'src/shared-content/upgrade/upgrade-testing-upgraded-instance.include.md'; import UpgradeRestoreBackup from 'src/shared-content/upgrade/upgrade-restore-backup.include.md'; @@ -71,6 +72,7 @@ Configuring a clone typically takes much more time and compute resources. There Creating a clone of an existing instance involves: +1. Finding and backing up your Master Key. 1. Enabling maintenance mode on the main instance. 1. Backing up the database of the main instance. 1. Disabling maintenance mode on the main instance. @@ -83,6 +85,8 @@ Creating a clone of an existing instance involves: 1. Upgrade the test instance to the latest version of Octopus Deploy. 1. Test and verify the test instance. + + From 40d5dd0f5e5df9c7fa70d6257517d9e959a9e882 Mon Sep 17 00:00:00 2001 From: Donny Bell <63249187+donnybell@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:40:19 +0100 Subject: [PATCH 05/49] Update upgrade-find-and-backup-master-key.md --- .../upgrade/upgrade-find-and-backup-master-key.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md b/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md index 7355e8e47c..b1c6892de2 100644 --- a/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md +++ b/src/shared-content/upgrade/upgrade-find-and-backup-master-key.md @@ -10,3 +10,5 @@ To obtain your existing Master Key from your source Octopus instance, you can si ::: Alternatively, you may also use the `show-master-key` command via the `Octopus.Server.exe` command-line tool. [You can find more information on this here](https://octopus.com/docs/octopus-rest-api/octopus.server.exe-command-line/show-master-key). + +For Octopus Server instances hosted in Linux containers, you may use the `container exec` command [per the instructions here](https://octopus.com/docs/installation/octopus-server-linux-container#upgrading). From 461a65ef964f81d266290c64da32082a215ca30b Mon Sep 17 00:00:00 2001 From: Samuel Jaeschke Date: Tue, 3 Oct 2023 15:52:21 +1030 Subject: [PATCH 06/49] DW pools: Switch examples from `Windows` to `Ubuntu` --- .../infrastructure/workers/dynamic-worker-pools.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md index 9049550e94..b68b015f06 100644 --- a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md +++ b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md @@ -28,18 +28,18 @@ Each worker is provisioned exclusively to a specific customer, and is completely ## Dynamic Worker Images -Each dynamic worker pool can specify the worker image used. Windows Server Core 2019 is the default. Ubuntu Server 22.04 worker images are also available. +Each dynamic worker pool can specify the worker image used. Windows Server Core 2019 is the default. Ubuntu Linux 22.04 worker images are also available. Editing a dynamic worker pool allows you to modify the image used. -The available worker images list specific operating system versions (e.g., `Windows Server Core 2019`) but also generic "default" options such as `Windows (default)`. Choosing the default option means that your worker will get the latest stable worker image released. This is a good option to choose if you're running a basic script that doesn't have any dependencies on specific tool or operating system versions. +The available worker images list specific operating system versions (e.g., `Ubuntu Linux 22.04`) but also generic "default" options such as `Ubuntu (default)`. Choosing the default option means that your worker will get the latest stable worker image released. This is a good option to choose if you're running a basic script that doesn't have any dependencies on specific tool or operating system versions. If you're writing a script that relies on a specific version of tooling (e.g., helm), then we recommend choosing a specific worker image, instead of the "default" options, to prevent worker image upgrades from impacting your deployments. |Type | Pros | Cons | |-----|------|------| -| Default (eg `Windows (default)`) | Automatically uses the latest image. Deployments will continue to work even when a worker image is marked as deprecated or decommissioned.| The versions of dependencies (e.g., helm) are not fixed. Deployments that rely on specific versions of dependencies or operating system specific features may break during upgrades. | -| Specific (e.g., `Windows Server Core 2019`) | The version of the operating system and dependencies are fixed and can be relied upon. | When a worker image is marked as deprecated, warnings will start to appear in your deployment logs. When a worker image is decommissioned, you will need to take action to update your worker pool or deployments will fail. | +| Default (eg `Ubuntu (default)`) | Automatically uses the latest image. Deployments will continue to work even when a worker image is marked as deprecated or decommissioned.| The versions of dependencies (e.g., helm) are not fixed. Deployments that rely on specific versions of dependencies or operating system specific features may break during upgrades. | +| Specific (e.g., `Ubuntu Linux 22.04`) | The version of the operating system and dependencies are fixed and can be relied upon. | When a worker image is marked as deprecated, warnings will start to appear in your deployment logs. When a worker image is decommissioned, you will need to take action to update your worker pool or deployments will fail. | ## Deprecation @@ -47,7 +47,7 @@ When an image is marked as deprecated, you will see warnings in the Octopus UI, When you start getting warnings in your deployments and/or see deprecation warnings in the Octopus portal, please plan to modify your worker pool to use a different image and test your scripts on the new image. -If your Worker Pool is set to use the Operating System default, for example, `Windows (default)`, the default will be swapped over to a new Operating System version by Octopus Deploy. Your deployments and runbooks will automatically use the new version. +If your Worker Pool is set to use the Operating System default, for example, `Ubuntu (default)`, the default will be swapped over to a new Operating System version by Octopus Deploy. Your deployments and runbooks will automatically use the new version. You should validate that your deployments and runbooks work with the new version prior to the cutover date. The new image will be made available prior to the cutover date and we will notify you of the cutover date to give you time to undertaking any required testing. From 5375dfdfaa568fbcf3a702c2f43a88c2dc721b8e Mon Sep 17 00:00:00 2001 From: Samuel Jaeschke Date: Tue, 3 Oct 2023 15:53:18 +1030 Subject: [PATCH 07/49] DW pools: Reorder sections to put Ubuntu first --- .../workers/dynamic-worker-pools.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md index b68b015f06..0e6c8e1462 100644 --- a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md +++ b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md @@ -64,6 +64,28 @@ The Worker Type can be modified by editing the Worker Pool and changing the Work Worker images are rebuilt on a regular basis, so that the operating system is up to date with the latest security patches. +### Ubuntu 22.04 + +This is the default for the Ubuntu operating system, referenced as `Ubuntu (default)`. + +Each `Ubuntu Server 22.04` worker is provisioned with a baseline of tools including (but not limited to): + +- .NET 6 +- Docker (latest) +- Powershell Core (latest) +- Python 3 (latest) +- GCloud CLI (367.0.0) + +:::div{.hint} +Ubuntu workers are designed to use [execution worker containers](https://octopus.com/blog/execution-containers) for tooling such as `kubectl` and `helm`. This makes it much easier to choose the appropriate runtime environment with the tools you need for your use case. +::: + +### Ubuntu 18.04 + +:::div{.warning} +Ubuntu 18.04 images are no longer available as of 3 April 2023. Please refer to [Ubuntu 18.04 End-of-life](/docs/infrastructure/workers/dynamic-worker-pools/ubuntu-1804-end-of-life) for further details. +::: + ### Windows Server Core 2019 This is the default for the Windows operating system, referenced as `Windows (default)`. @@ -93,28 +115,6 @@ Windows 2019 workers are capable of running [execution worker containers](/docs/ We recommend execution containers as the preferred option for steps requiring external tools. This allows you to control which version of the tools will be used as your scripts will rely on a specific version that they are compatible with to function correctly. ::: -### Ubuntu 18.04 - -:::div{.warning} -Ubuntu 18.04 images are no longer available as of 3 April 2023. Please refer to [Ubuntu 18.04 End-of-life](/docs/infrastructure/workers/dynamic-worker-pools/ubuntu-1804-end-of-life) for further details. -::: - -### Ubuntu 22.04 - -This is the default for the Ubuntu operating system, referenced as `Ubuntu (default)`. - -Each `Ubuntu Server 22.04` worker is provisioned with a baseline of tools including (but not limited to): - -- .NET 6 -- Docker (latest) -- Powershell Core (latest) -- Python 3 (latest) -- GCloud CLI (367.0.0) - -:::div{.hint} -Ubuntu workers are designed to use [execution worker containers](https://octopus.com/blog/execution-containers) for tooling such as `kubectl` and `helm`. This makes it much easier to choose the appropriate runtime environment with the tools you need for your use case. -::: - ## kubectl on Windows Images Windows 2019 dynamic worker images come with many versions of `kubectl` available. @@ -144,7 +144,7 @@ By default, every dynamic worker is destroyed after it has been allocated for ov For deployments and runbook runs that require additional software dependencies on a Dynamic worker, our recommendation is to leverage [execution containers for workers](/docs/projects/steps/execution-containers-for-workers). Octopus provides execution containers with a baseline of tools (`octopusdeploy/worker-tools`) pre-installed. These tools won't include every possible software combination you might need. If you require a specific set of software and tooling we recommend [building your own custom docker images for use with execution containers](/docs/projects/steps/execution-containers-for-workers/#custom-docker-images). :::div{.hint} -**Octopus worker-tools cached on Dynamic Workers** +**Octopus worker-tools are cached on Dynamic Workers** The `octopusdeploy/worker-tools` images provided for the execution containers feature cache the five latest Ubuntu and two latest Windows [Worker Tool](/docs/infrastructure/workers/worker-tools-versioning-and-caching) images on a Dynamic Worker when it's created. This makes them an excellent choice over installing additional software on a Dynamic Worker. ::: From 36f8b753a985e85f22af8cb48e8d94616842d8b7 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Tue, 3 Oct 2023 07:45:55 +0100 Subject: [PATCH 08/49] Update creating-test-instance.mdx --- .../administration/upgrading/guide/creating-test-instance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx b/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx index 42062600cf..9b01a4fe3a 100644 --- a/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx +++ b/src/pages/docs/administration/upgrading/guide/creating-test-instance.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-02 title: Creating a test instance description: A guide on how to create a test instance with Octopus Deploy navOrder: 8 From 85c519b67c53f56775ef724b5fbbea0f6879a697 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Tue, 3 Oct 2023 07:55:29 +0100 Subject: [PATCH 09/49] Conditionally run deploy steps only if an Octopus URL is present --- .github/workflows/build-astro.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-astro.yml b/.github/workflows/build-astro.yml index a97ce0e0dd..1cfebcf495 100644 --- a/.github/workflows/build-astro.yml +++ b/.github/workflows/build-astro.yml @@ -17,6 +17,7 @@ jobs: runs-on: ubuntu-latest env: + SHOULD_DEPLOY: ${{ secrets.OCTOPUSSERVERURL != '' }} OCTOPUS_URL: ${{ secrets.OCTOPUSSERVERURL }} OCTOPUS_API_KEY: ${{ secrets.OCTOPUSSERVERAPIKEY }} OCTOPUS_SPACE: "DevOps Microsite" @@ -88,26 +89,30 @@ jobs: - name: Push a package to Octopus Deploy 🐙 uses: OctopusDeploy/push-package-action@v3.0.2 + if: ${{ env.SHOULD_DEPLOY }} with: packages: ${{ steps.package.outputs.package_file_path }} - name: Push build information to Octopus Deploy 🐙 uses: OctopusDeploy/push-build-information-action@v3 + if: ${{ env.SHOULD_DEPLOY }} with: version: "${{ env.PACKAGE_VERSION }}" packages: "Docs Microsite" - name: Create a release in Octopus Deploy 🐙 - uses: OctopusDeploy/create-release-action@v3 id: "create_release" + uses: OctopusDeploy/create-release-action@v3 + if: ${{ env.SHOULD_DEPLOY }} with: project: "Docs Microsite" package_version: "${{ env.PACKAGE_VERSION }}" git_ref: ${{ github.ref }} - name: Deploy the release in Octopus Deploy 🐙 - uses: OctopusDeploy/deploy-release-action@v3 id: "queue_deployments" + uses: OctopusDeploy/deploy-release-action@v3 + if: ${{ env.SHOULD_DEPLOY }} with: project: "Docs Microsite" release_number: ${{ steps.create_release.outputs.release_number }} From 603131ae08eadb833a32e6f974c933b5885368ce Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:44:17 +0100 Subject: [PATCH 10/49] Adjust condition for SHOULD_DEPLOY --- .github/workflows/build-astro.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-astro.yml b/.github/workflows/build-astro.yml index 1cfebcf495..f50106df01 100644 --- a/.github/workflows/build-astro.yml +++ b/.github/workflows/build-astro.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest env: - SHOULD_DEPLOY: ${{ secrets.OCTOPUSSERVERURL != '' }} + SHOULD_DEPLOY: ${{ secrets.OCTOPUSSERVERURL != '' || '' }} OCTOPUS_URL: ${{ secrets.OCTOPUSSERVERURL }} OCTOPUS_API_KEY: ${{ secrets.OCTOPUSSERVERAPIKEY }} OCTOPUS_SPACE: "DevOps Microsite" From cd50a7ce605b4b07ebf70e83946d9edee0df0f18 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:11:42 -0400 Subject: [PATCH 11/49] Allow people to download microsite --- .github/workflows/build-astro.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/build-astro.yml b/.github/workflows/build-astro.yml index f50106df01..02f00fc607 100644 --- a/.github/workflows/build-astro.yml +++ b/.github/workflows/build-astro.yml @@ -93,6 +93,13 @@ jobs: with: packages: ${{ steps.package.outputs.package_file_path }} + - name: Let people download package + uses: actions/upload-artifact@v3 + if: ${{ ! env.SHOULD_DEPLOY }} + with: + name: docs-microsite + path: ${{ steps.package.outputs.package_file_path }} + - name: Push build information to Octopus Deploy 🐙 uses: OctopusDeploy/push-build-information-action@v3 if: ${{ env.SHOULD_DEPLOY }} From 19564859ce012b81507db47eb830bc13b0790cb0 Mon Sep 17 00:00:00 2001 From: Samuel Jaeschke Date: Wed, 4 Oct 2023 11:21:36 +1030 Subject: [PATCH 12/49] DW pools: Switch default image from Windows to Linux --- src/pages/docs/infrastructure/workers/dynamic-worker-pools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md index 0e6c8e1462..ccdb8dadfa 100644 --- a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md +++ b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md @@ -28,7 +28,7 @@ Each worker is provisioned exclusively to a specific customer, and is completely ## Dynamic Worker Images -Each dynamic worker pool can specify the worker image used. Windows Server Core 2019 is the default. Ubuntu Linux 22.04 worker images are also available. +Each dynamic worker pool can specify the worker image used. Ubuntu Linux 22.04 is the default. Windows Server Core 2019 worker images are also available. Editing a dynamic worker pool allows you to modify the image used. From 4a39c31d6fdbe6639621563bae46accaa29affc3 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Wed, 4 Oct 2023 08:37:34 +0100 Subject: [PATCH 13/49] Patch for zod --- package.json | 8 +++++++- pnpm-lock.yaml | 26 +++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 8172b988fb..b664d5c813 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "dependencies": { "@astrojs/mdx": "^1.0.0", "astro": "^3.0.3", - "astro-accelerator": "^0.3.10", + "astro-accelerator": "^0.3.11", "astro-accelerator-utils": "^0.3.0", "hast-util-from-selector": "^3.0.0", "remark-directive": "^2.0.1", @@ -29,5 +29,11 @@ }, "devDependencies": { "@playwright/test": "^1.37.1" + }, + "pnpm": { + "overrides": { + "postcss@<8.4.31": ">=8.4.31", + "zod@<=3.22.2": ">=3.22.3" + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3004212604..0222fd72bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,10 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + postcss@<8.4.31: '>=8.4.31' + zod@<=3.22.2: '>=3.22.3' + dependencies: '@astrojs/mdx': specifier: ^1.0.0 @@ -12,8 +16,8 @@ dependencies: specifier: ^3.0.3 version: 3.0.3 astro-accelerator: - specifier: ^0.3.10 - version: 0.3.10 + specifier: ^0.3.11 + version: 0.3.11 astro-accelerator-utils: specifier: ^0.3.0 version: 0.3.0 @@ -1077,8 +1081,8 @@ packages: resolution: {integrity: sha512-qN1EiESBi4GXBO5hvNINtNaOBbPMIYrFUhq7ouFXfCxJ01+WYy0FyST3p+JclB3AxhaFTCs1zzLuTA4IFKlo/Q==} dev: false - /astro-accelerator@0.3.10: - resolution: {integrity: sha512-BR082aHKh3jmIloYch0KrXDk4XFNJ7+XvaWKsiwl1GBWtVP9u9x9jbLly4aqhuJIbbKvFPDqu2nKG1gwYcs0SA==} + /astro-accelerator@0.3.11: + resolution: {integrity: sha512-HG2kK6lXj7EvmaWaboSAGGNw1qmoQMdwhxCB1W0Bv74yTNwsCSdwuInY8HKxf2IJWut6zc0RoCnyc62dywhuow==} engines: {node: '>=18.14.1', pnpm: '>=8.6.12'} dependencies: '@astrojs/mdx': 1.0.0(astro@3.0.5) @@ -1161,7 +1165,7 @@ packages: vitefu: 0.2.4(vite@4.4.9) which-pm: 2.1.1 yargs-parser: 21.1.1 - zod: 3.21.1 + zod: 3.22.3 transitivePeerDependencies: - '@types/node' - less @@ -1233,7 +1237,7 @@ packages: vitefu: 0.2.4(vite@4.4.9) which-pm: 2.1.1 yargs-parser: 21.1.1 - zod: 3.21.1 + zod: 3.22.3 transitivePeerDependencies: - '@types/node' - less @@ -3180,8 +3184,8 @@ packages: hasBin: true dev: true - /postcss@8.4.29: - resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -3967,7 +3971,7 @@ packages: optional: true dependencies: esbuild: 0.18.20 - postcss: 8.4.29 + postcss: 8.4.31 rollup: 3.28.1 optionalDependencies: fsevents: 2.3.3 @@ -4068,8 +4072,8 @@ packages: engines: {node: '>=12.20'} dev: false - /zod@3.21.1: - resolution: {integrity: sha512-+dTu2m6gmCbO9Ahm4ZBDapx2O6ZY9QSPXst2WXjcznPMwf2YNpn3RevLx4KkZp1OPW/ouFcoBtBzFz/LeY69oA==} + /zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} dev: false /zwitch@2.0.4: From 7e67dbdbdcc1ebdffe406afbe6ede545cb3e2ca3 Mon Sep 17 00:00:00 2001 From: Mark Harrison Date: Wed, 4 Oct 2023 14:51:06 +0100 Subject: [PATCH 14/49] Fix table --- .../xml-configuration-variables-feature.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/docs/projects/steps/configuration-features/xml-configuration-variables-feature.md b/src/pages/docs/projects/steps/configuration-features/xml-configuration-variables-feature.md index 86564014ef..0ff94bfd82 100644 --- a/src/pages/docs/projects/steps/configuration-features/xml-configuration-variables-feature.md +++ b/src/pages/docs/projects/steps/configuration-features/xml-configuration-variables-feature.md @@ -58,8 +58,8 @@ Suppose you have this `web.config` or `MyApp.exe.config` file in your package wh In this example, you would have variables similar to the following: -| Variable Name | Value | Sensitive | Scope | -| ----------------------- | --------------- | -------- | +| Variable Name | Value | Sensitive | Scope | +| ----------------------- | --------------- | -------- | -------- | | `AWSAccessKey` | `ABCDEFG` | `No` | `Test` | | `AWSAccessKey` | `HIJKLMN` | `No` | `Production` | | `AWSSecretKey` | `1111111` | `Yes` | `Test` | From e58f472ac962404821f761dcf4f173a364302e3a Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Wed, 4 Oct 2023 18:39:45 +0100 Subject: [PATCH 15/49] Single pass through headings to fix casing --- .../octopus-for-high-availability-on-gcp.mdx | 4 +-- .../administration/high-availability/index.md | 4 +-- .../high-availability/migrate/index.mdx | 6 ++--- .../lost-master-key.md | 4 +-- .../performance/index.mdx | 14 +++++----- .../manually-uninstall-octopus-server.md | 4 +-- .../retention-policies/index.mdx | 4 +-- .../administration/sync-instances/index.md | 14 +++++----- .../upgrading/guide/automate-upgrades.mdx | 6 ++--- .../administration/upgrading/guide/index.md | 6 ++--- .../upgrading-from-octopus-3.x-to-modern.mdx | 4 +-- ...ding-from-octopus-4.x-2018.x-to-modern.mdx | 6 ++--- .../guide/upgrading-major-releases.mdx | 4 +-- .../docs/administration/upgrading/index.mdx | 6 ++--- .../manual-upgrade.md | 4 +-- .../upgrade-with-a-new-server-instance.mdx | 4 +-- .../jira-service-management/index.md | 8 +++--- src/pages/docs/approvals/servicenow/index.md | 4 +-- ...ng-deployment-slots-with-azure-web-apps.md | 8 +++--- src/pages/docs/deployments/java/index.md | 8 +++--- .../cleaning-up-environments.md | 8 +++--- .../deploying-to-transient-targets.md | 6 ++--- .../immutable-infrastructure.md | 16 ++++++------ .../dotnet-windows-rollbacks/index.mdx | 26 +++++++++---------- .../deployments/patterns/rollbacks/index.md | 24 ++++++++--------- .../patterns/rollbacks/kubernetes/index.mdx | 14 +++++----- .../patterns/rollbacks/nginx/index.mdx | 14 +++++----- .../patterns/rollbacks/tomcat/index.mdx | 20 +++++++------- .../index.md | 4 +-- ...nments-and-deployment-targets-and-roles.md | 6 ++--- .../installation-guidelines.mdx | 10 +++---- .../lifecycles-and-environments.md | 6 ++--- .../partition-octopus-with-spaces.md | 8 +++--- .../project-and-project-groups.md | 6 ++--- .../best-practices/users-roles-and-teams.md | 10 +++---- .../best-practices/variables.md | 6 ++--- .../best-practices/worker-configuration.md | 6 ++--- src/pages/docs/getting-started/glossary.md | 8 +++--- src/pages/docs/getting-started/index.md | 8 +++--- .../accounts/username-and-password.md | 4 +-- .../amazon-ecs-cluster-target.md | 4 +-- .../kubernetes-target/openshift/index.md | 8 +++--- .../deployment-targets/machine-policies.mdx | 6 ++--- .../diagnosing-issues.mdx | 4 +-- src/pages/docs/infrastructure/index.mdx | 4 +-- src/pages/docs/insights/api.md | 4 +-- src/pages/docs/insights/index.md | 12 ++++----- .../docs/insights/space-level-insights.md | 6 ++--- .../octopus-server-linux-container/index.mdx | 8 +++--- .../octopus-in-kubernetes.mdx | 4 +-- .../docs/octopus-cloud/disaster-recovery.md | 4 +-- src/pages/docs/octopus-cloud/migrations.md | 8 +++--- src/pages/docs/octopus-rest-api/index.mdx | 12 ++++----- .../octopus-cli/create-release.md | 6 ++--- .../octopus-rest-api/octopus-cli/index.mdx | 4 +-- .../tentacle.exe-command-line/index.md | 4 +-- .../tentacle.exe-command-line/update-trust.md | 4 +-- .../variables/worker-pool-variables.md | 6 ++--- .../config-as-code-reference.md | 22 ++++++++-------- ...ng-releases-version-controlled-project.mdx | 4 +-- ...ng-release-from-a-build-server-plug-in.mdx | 6 ++--- ...-a-project-with-version-control-enabled.md | 12 ++++----- .../unsupported-config-as-code-scenarios.md | 10 +++---- .../releases/issue-tracking/azure-devops.md | 4 +-- .../docs/releases/issue-tracking/jira.md | 4 +-- src/pages/docs/releases/release-versioning.md | 4 +-- .../databases/backup-mssql-database.md | 4 +-- .../databases/backup-rds-mssql-s3-database.md | 4 +-- .../databases/create-mysql-database.md | 4 +-- .../restore-mssql-database-to-environment.md | 6 ++--- .../databases/restore-mssql-database.md | 6 ++--- .../restore-rds-mssql-s3-database.md | 4 +-- .../runbooks/runbooks-vs-deployments/index.md | 4 +-- .../authentication/active-directory/index.md | 16 ++++++------ ...leshooting-active-directory-integration.md | 6 ++--- .../cve/shattered-and-octopus-deploy.md | 4 +-- src/pages/docs/security/hardening-octopus.mdx | 4 +-- .../docs/tenants/tenant-deployment-faq.md | 6 ++--- .../docs/tenants/tenant-infrastructure.md | 4 +-- ...from-windows-to-linux-container.include.md | 8 +++--- .../project-configure.include.md | 10 +++---- .../project-recommendations.include.md | 2 +- ...uctured-configuration-variables.include.md | 9 ++++--- ...disable-targets-cloned-instance.include.md | 2 +- ...ade-export-import-test-projects.include.md | 2 +- .../upgrade-inplace-upgrade.include.md | 4 +-- ...upgrade-octopus-backup-database.include.md | 2 +- .../upgrade/upgrade-restore-backup.include.md | 2 +- .../upgrade-rollback-folders.include.md | 2 +- 89 files changed, 311 insertions(+), 310 deletions(-) diff --git a/src/pages/docs/administration/high-availability/design/octopus-for-high-availability-on-gcp.mdx b/src/pages/docs/administration/high-availability/design/octopus-for-high-availability-on-gcp.mdx index 82d4ab5eb7..646ad58ba4 100644 --- a/src/pages/docs/administration/high-availability/design/octopus-for-high-availability-on-gcp.mdx +++ b/src/pages/docs/administration/high-availability/design/octopus-for-high-availability-on-gcp.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Designing Octopus HA in GCP description: Information on configuring Octopus High Availability hosted in Google Cloud Platform (GCP). navOrder: 40 @@ -345,7 +345,7 @@ Once you've completed those steps, [install Octopus](/docs/installation/) and th Changing the path only needs to be done once, and not on each node as the values are stored in the database. ::: -### Load Balancing in Google Cloud +### Load balancing in Google Cloud To distribute traffic to the Octopus web portal on multiple nodes, you need to use a load balancer. Google Cloud provides two options you should consider to distribute HTTP/HTTPS traffic to your Compute Engine instances. diff --git a/src/pages/docs/administration/high-availability/index.md b/src/pages/docs/administration/high-availability/index.md index e2175706d4..25b9e8998c 100644 --- a/src/pages/docs/administration/high-availability/index.md +++ b/src/pages/docs/administration/high-availability/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-08-24 +modDate: 2023-10-04 title: High Availability description: Octopus High Availability (HA) enables you to run multiple Octopus Server nodes, distributing load and tasks between them. hideInThisSection: true @@ -42,7 +42,7 @@ The node limit is included in the license key in the NodeLimit node. If you do not have that node in your license key then you are limited to a single node. If you recently purchased a license key and it is missing that node then reach out to [sales@octopus.com](mailto:sales@octopus.com). -## How High Availablity Works +## How High Availablity works In broad terms, HA allows for load to be distributed between multiple Octopus Server nodes. How that load is distributed, specifically tasks, is more complex than "it's load balanced." diff --git a/src/pages/docs/administration/high-availability/migrate/index.mdx b/src/pages/docs/administration/high-availability/migrate/index.mdx index 7cede3db90..ca7e342422 100644 --- a/src/pages/docs/administration/high-availability/migrate/index.mdx +++ b/src/pages/docs/administration/high-availability/migrate/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Migration description: How to migrate from a stand-alone Octopus server to a High Availability (HA) setup. navOrder: 30 @@ -102,7 +102,7 @@ The advantage of a new URL is: -## Outage Windows +## Outage windows The below steps will cause an outage in Octopus Deploy. With all the prep work, the outage window should be small. If possible, we recommend making these change off-hours. In addition, you don't have to do them all in one outage window. You can move the database in one outage window, and the file system in the other outage window. @@ -161,7 +161,7 @@ After you finish moving the database and file storage, it is time to turn back o 1. Assuming all goes well, disable maintenance mode. 1. Notify everyone of the new URL (if there is one). -## Adding Additional Nodes +## Adding additional nodes After configuring a load balancer and moving the database and files, adding a new node is trivial. diff --git a/src/pages/docs/administration/managing-infrastructure/lost-master-key.md b/src/pages/docs/administration/managing-infrastructure/lost-master-key.md index 68e6145d43..3e1e0a4227 100644 --- a/src/pages/docs/administration/managing-infrastructure/lost-master-key.md +++ b/src/pages/docs/administration/managing-infrastructure/lost-master-key.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Recovering after losing your Octopus Server and Master Key description: A guide to recovering if the machine hosting Octopus Server dies irrecoverably, and you don't have the Master Key. navOrder: 40 @@ -24,7 +24,7 @@ Octopus [encrypts important and sensitive data](/docs/security/data-encryption) - Sensitive values in your deployment processes, like the password for a custom IIS App Pool user account. - Sensitive values in your deployment targets, like the password for creating [Offline Drops](/docs/infrastructure/deployment-targets/offline-package-drop). -## Recovering with a New Master Key +## Recovering with a new Master Key If you are confident with Octopus you can follow these steps to get back up and going. Otherwise, please get in contact with our [support team](https://octopus.com/support) so we can be available to help get you up and going. diff --git a/src/pages/docs/administration/managing-infrastructure/performance/index.mdx b/src/pages/docs/administration/managing-infrastructure/performance/index.mdx index 32a132d2d1..b21271a37a 100644 --- a/src/pages/docs/administration/managing-infrastructure/performance/index.mdx +++ b/src/pages/docs/administration/managing-infrastructure/performance/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Performance description: Octopus is all about reliable and repeatable deployments, but that doesn't mean it has to be slow. This page will help you tune your Octopus installation for the best performance in your scenario. navOrder: 60 @@ -136,11 +136,11 @@ Delta compression doesn't always result in smaller package transfers. The algor If your packages have a lot of static data, consider creating a package containing only that static data and deploying it only when it changes. -### Custom Package Feed +### Custom package feed Consider using a custom package feed close to your deployment targets, and download the packages directly on the agent. This alleviates a lot of resource contention on the Octopus Server. -### Retention Policy +### Retention policy The built-in package feed has its own [retention policy](/docs/administration/retention-policies/#set-builtinfeed-retentionpolicy). Ensure that is enabled to keep the amount of packages to store and index down. @@ -148,19 +148,19 @@ The built-in package feed has its own [retention policy](/docs/administration/re The package retention policy only deletes packages not referenced by a release or runbook. Setting the retention policy to 1 day means the package will be deleted 1 day after the release is deleted. ::: -## File Storage +## File storage Octopus Deploy stores BLOB data (task logs, packages, project images, etc.) on the file system. -### Task Logs \{#tip-task-logs} +### Task logs \{#tip-task-logs} Larger task logs put the entire Octopus pipeline under more pressure. The task log has to be transferred from the Tentacle to the server, it has to be saved to the file system, and is read when you are on the deployment or runbook screen. We recommend printing messages required to understand progress and deployment failures. The rest of the information should be streamed to a file, then published as a deployment [artifact](/docs/projects/deployment-process/artifacts). -### Image Size +### Image size While it is fun to have gifs and fancy images for your projects consider the size of each image. Keep them under 100x100 pixels. This will reduce the amount of data you have to download from the Octopus Server. -## Deployment Parallelism +## Deployment parallelism By default, Octopus will only run one process on each [deployment target](/docs/infrastructure/deployment-targets) at a time, queuing the rest. There may be times that you want to run multiple processes at a time. In those situations, there are three special variables that can be used to control the way Octopus runs steps in parallel: diff --git a/src/pages/docs/administration/managing-infrastructure/server-configuration-and-file-storage/manually-uninstall-octopus-server.md b/src/pages/docs/administration/managing-infrastructure/server-configuration-and-file-storage/manually-uninstall-octopus-server.md index 79a8f99d18..edc776a492 100644 --- a/src/pages/docs/administration/managing-infrastructure/server-configuration-and-file-storage/manually-uninstall-octopus-server.md +++ b/src/pages/docs/administration/managing-infrastructure/server-configuration-and-file-storage/manually-uninstall-octopus-server.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Manually uninstall Octopus Server description: Information on how to manually uninstall the Octopus Server. navOrder: 1 @@ -9,7 +9,7 @@ navOrder: 1 When you uninstall the Octopus Server MSI, it automatically removes the application files from the installation folder, but that's it. This page describes how to manually clean up Octopus Server in part, or completely remove it from your server. -## Why Would I Want To Clean Up? {#ManuallyuninstallOctopusServer-WhywouldIwanttocleanupinthefirstplace?} +## Why would I want to clean up? {#ManuallyuninstallOctopusServer-WhywouldIwanttocleanupinthefirstplace?} :::div{.problem} diff --git a/src/pages/docs/administration/retention-policies/index.mdx b/src/pages/docs/administration/retention-policies/index.mdx index eed455c79b..ca924680ac 100644 --- a/src/pages/docs/administration/retention-policies/index.mdx +++ b/src/pages/docs/administration/retention-policies/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Retention policies description: Retention policies allow you to specify the releases, packages and files you want to keep as well as the ones you want cleaned up. navOrder: 70 @@ -204,7 +204,7 @@ Choosing the *A limited time* option will allow you to select the number of days Only packages that are not associated with releases will be cleaned up. That means even if a package is older than the value you choose, if it's attached to an existing release, it won't be cleaned up until that release is also cleaned up. ::: -## External Feeds +## External feeds Octopus does not apply any retention policies to external feeds. However the packages that are currently in-use can be retrieved from the API ([example](https://github.com/OctopusDeploy/OctopusDeploy-Api/blob/master/Octopus.Client/LINQPad/GetInUsePackages.linq)) and those results then used to remove packages from those feeds. diff --git a/src/pages/docs/administration/sync-instances/index.md b/src/pages/docs/administration/sync-instances/index.md index b01ffebb8a..a371bd38aa 100644 --- a/src/pages/docs/administration/sync-instances/index.md +++ b/src/pages/docs/administration/sync-instances/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Sync multiple instances description: How to keep two or more Octopus Deploy instances in sync. navOrder: 45 @@ -17,7 +17,7 @@ Keeping multiple instances in sync is a complex task involving dozens if not hun TL;DR; copying projects between instances should be done when all other options have been exhausted. There is no provided tooling to support syncing instances with different environments, tenants, or variable values. Due to the number of decisions and business rules, you will have to create and maintain a custom syncing process. Before making this decision, reach out to [customersuccess@octopus.com](mailto:customersuccess@octopus.com) to see if there are alternatives. ::: -## Suitable Scenarios +## Suitable scenarios Split and sync instances only when Octopus lacks a critical feature to satisfy a company policy, industry regulation, or a business contract. The use cases we've seen in the past are: @@ -104,7 +104,7 @@ We make that recommendation because, as you'll soon see, there are a lot of busi The Octopus team has written a sample PowerShell tool, [SpaceCloner](https://github.com/OctopusDeployLabs/SpaceCloner), you can use as a reference or example for your syncing process. A lot of this documentation used lessons from writing that tool. While the SpaceCloner supports syncing instances with a known delta, we recommend using that tool as a guide. It was created with specific use cases in mind and probably won't support your hyper-specific use case. -## Syncing Process +## Syncing process If you do determine the best course of action is to sync projects across multiple Octopus Deploy instances, then you will need to start designing a syncing process. While the actual business rules and decisions will vary between implementations, the core rules for any syncing process will remain the same. @@ -130,7 +130,7 @@ It will be nearly impossible to know which instance is "right" and whether the c It's okay to have known differences between the instances, such as different environments, lifecycles, variable values, tenants, deployment targets, channels, and more. But when something new is added, such as a new variable or step, it should be done on one instance and synced to the other instance. It is hard enough to detect when something is "new". A one-way sync will help keep conflicts to a minimum, and reduce complexity. -### Data to Sync +### Data to sync Octopus Deploy is more than a deployment process and variables. A lot of scaffolding data is needed for everything to work correctly. The syncing process should allow for the syncing of the following data: @@ -258,7 +258,7 @@ A deployment, and runbook run, have the same limitation. Issuing a `POST` comma What this comes back to is auditability. If that data can be modified by any outside process then it is not auditable. -### Syncing Order +### Syncing order In our experience, it is far easier to group data by type and sync them all together. For example, sync all the Project Groups before syncing Projects. That requires an order of precedence in syncing due to data dependencies. That order of precedence is: @@ -383,7 +383,7 @@ In most cases, it doesn't make much sense to sync Accounts and Certificates. Bu - Create an Account or Certificate with the same name on each instance but different details. You don't have to modify any variables. - Re-use the same variable name but associate it to different Accounts or Certificates. The syncing process will only create new variables and insert dummy data. -### Variable Scoping +### Variable scoping Syncing variables between instances with different environments is very complex due to scoping and variable types. For all the examples below, the source instance has **Development** and **Test** while the destination instance has **Staging** and **Production**. The source instance has the following variables. @@ -493,7 +493,7 @@ Both Accounts and Certificates are referenced by variables in either projects or In most cases, it doesn't make much sense to sync Accounts and Certificates. But the variables referencing the Accounts and Certificates are used in Deployment and Runbook processes. In this case, the best option is to re-use the same variable name but associate it with different Accounts or Certificates. -### Team User Role Scoping +### Team User Role scoping The Team user role scoping is used for permissions. For example, a team has access to edit a specific set of Tenants. In this case, it makes sense to exclude any Tenants not found on the destination instance from the team user role scope. It won't hurt anything as that Tenant doesn't exist. Most likely, the list of Tenants that particular team has permission to edit will be very different. diff --git a/src/pages/docs/administration/upgrading/guide/automate-upgrades.mdx b/src/pages/docs/administration/upgrading/guide/automate-upgrades.mdx index 5e8cd6fe40..e4b1e6277b 100644 --- a/src/pages/docs/administration/upgrading/guide/automate-upgrades.mdx +++ b/src/pages/docs/administration/upgrading/guide/automate-upgrades.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-07-10 +modDate: 2023-10-04 title: How to automate Octopus Deploy upgrades description: A how-to guide on how to automate Octopus Deploy upgrades navOrder: 4 @@ -14,7 +14,7 @@ Automating the Octopus Deploy upgrade ensures all essential steps are executed d This guide was written for upgrading Octopus Deploy on Windows. -## Prep Work +## Prep work Before going down the automation path, it is critical to back up the master key and license key. If anything goes wrong, you might need these keys to do a restore. It is better to have the backup and not need it than need the backup and not have it. The master key doesn't change, while your license key changes, at most, once a year. Back them up once to a secure location and move on. @@ -23,7 +23,7 @@ Before going down the automation path, it is critical to back up the master key -## Upgrading Single Node Octopus Deploy instances +## Upgrading single node Octopus Deploy instances A single node Octopus Deploy instance is an instance not configured for [high availability](/docs/administration/high-availability). The instance is running on a single Windows Server, and as such, you can run this script to: diff --git a/src/pages/docs/administration/upgrading/guide/index.md b/src/pages/docs/administration/upgrading/guide/index.md index 6461b9b5f7..ca2c12e29a 100644 --- a/src/pages/docs/administration/upgrading/guide/index.md +++ b/src/pages/docs/administration/upgrading/guide/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Upgrading a modern version of Octopus description: Everything you need to know about upgrading a modern version of Octopus. navOrder: 1 @@ -9,7 +9,7 @@ navOrder: 1 A modern version of Octopus Deploy is any version running on SQL Server. When Octopus Deploy was originally introduced, it ran on RavenDB. Octopus Deploy 3.x migrated from RavenDB to Microsoft SQL Server. This section contains guides to covering various use cases you might encounter when upgrading a modern version of Octopus Deploy. -## Upgrade Scenarios +## Upgrade scenarios The default upgrade scenario is an in-place upgrade. Thousands of customers upgrade every month without errors. However, no upgrade process is ever 100% error-free 100% of the time. The typical errors we see are: @@ -25,7 +25,7 @@ Please choose from one of five common upgrade scenarios: - [Upgrading from Octopus 3.x to latest version](/docs/administration/upgrading/guide/upgrading-from-octopus-3.x-to-modern) - [Upgrading host OS or .NET version](/docs/administration/upgrading/guide/upgrade-host-os-or-net) -## Mitigating Risk +## Mitigating risk The best way to mitigate risk is to automate the upgrade and/or creating a test instance. Automation ensures all steps, including backups, are followed for every upgrade. A test instance allows you to test out upgrades and new features without affecting your main instance. diff --git a/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-3.x-to-modern.mdx b/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-3.x-to-modern.mdx index e91b97ff8a..dcd86b2127 100644 --- a/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-3.x-to-modern.mdx +++ b/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-3.x-to-modern.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Upgrading from Octopus 3.x to the latest version description: Information on how to upgrade from Octopus Deploy 3.x to the latest version navOrder: 6 @@ -37,7 +37,7 @@ You should be safe doing an in-place upgrade of 3.x to the latest version of Oct - Raised the [minimum requirements for hosting and using Octopus Server](https://octopus.com/blog/raising-minimum-requirements-for-octopus-server) (both Windows and SQL Server). - Execution containers running on docker on workers were introduced. -## Prep Work +## Prep work Before starting the upgrade, it is critical to back up the master key and license key. If anything goes wrong, you might need these keys to do a restore. It is better to have the backup and not need it than need the backup and not have it. The master key doesn't change, while your license key changes, at most, once a year. Back them up once to a secure location and move onto the next steps. diff --git a/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-4.x-2018.x-to-modern.mdx b/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-4.x-2018.x-to-modern.mdx index f6edd2b904..613e4a386e 100644 --- a/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-4.x-2018.x-to-modern.mdx +++ b/src/pages/docs/administration/upgrading/guide/upgrading-from-octopus-4.x-2018.x-to-modern.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Upgrading from Octopus 4.x / 2018.x to latest version description: Information on how to upgrade from Octopus Deploy 4.x or 2018.x to the latest version navOrder: 5 @@ -34,7 +34,7 @@ It is generally safe to do an in-place upgrade from Octopus Deploy 4.x/2018.x to The upgrade should work without error, but there are integration concerns to consider. This guide will step through the steps to mitigate those concerns. -## Prep Work +## Prep work Before starting the upgrade, it is critical to back up the master key and license key. If anything goes wrong, you might need these keys to do a restore. It is better to have the backup and not need it than need the backup and not have it. The master key doesn't change, while your license key changes, at most, once a year. Back them up once to a secure location and move onto the next steps. @@ -160,7 +160,7 @@ Creating a clone of an existing instance involves: -## Rollback Failed Upgrade +## Rollback failed upgrade While unlikely, an upgrade may fail. It could fail on a database upgrade script, SQL Server version is no longer supported, license check validation, or plain old bad luck. Depending on what failed, you have a decision to make. If the cloned instance upgrade failed, it might make sense to start all over again. Or, it might make sense to roll back to a previous version. In either case, if you decide to roll back the process will be: diff --git a/src/pages/docs/administration/upgrading/guide/upgrading-major-releases.mdx b/src/pages/docs/administration/upgrading/guide/upgrading-major-releases.mdx index d027c12d8f..f259a8670b 100644 --- a/src/pages/docs/administration/upgrading/guide/upgrading-major-releases.mdx +++ b/src/pages/docs/administration/upgrading/guide/upgrading-major-releases.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Upgrading major releases of Octopus Deploy description: Information on how to upgrade major releases of Octopus Deploy. navOrder: 3 @@ -36,7 +36,7 @@ In general, the process looks like this: Learn more about [creating a test instance](/docs/administration/upgrading/guide/creating-test-instance). -## Prep Work +## Prep work Before starting the upgrade, it is critical to back up the master key and license key. If anything goes wrong, you might need these keys to do a restore. It is better to have the backup and not need it than need the backup and not have it. The master key doesn't change, while your license key changes, at most, once a year. Back them up once to a secure location and move onto the standard upgrade process. diff --git a/src/pages/docs/administration/upgrading/index.mdx b/src/pages/docs/administration/upgrading/index.mdx index 038f2c0668..f9df15e6c8 100644 --- a/src/pages/docs/administration/upgrading/index.mdx +++ b/src/pages/docs/administration/upgrading/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-07-10 +modDate: 2023-10-04 title: Upgrading Octopus description: Everything you need to know about upgrading Octopus to a newer version. navOrder: 40 @@ -22,7 +22,7 @@ Octopus Deploy connects to a SQL Server database, and can be hosted: - As a Windows Service, installed via an MSI. - In a [Linux](/docs/installation/octopus-server-linux-container) container. -### Upgrade Process +### Upgrade process When running on Windows, the typical (manual) upgrade process is: - Run the MSI to install the latest binaries. @@ -107,7 +107,7 @@ Please pick from one of these upgrade scenarios. Any version 3.x or higher is c Since Octopus Deploy 3.x, the backing database is SQL Server. Prior to Octopus Deploy 3.x, the backing database was RavenDB. That is why we consider any version released before 3.x a legacy upgrade. ::: -## Mitigating Risk +## Mitigating risk The best way to mitigate risk is to automate the upgrade and/or create a test instance. Automation ensures all steps, including backups, are followed for every upgrade. A test instance allows you to test out upgrades and new features without affecting your main instance. diff --git a/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/manual-upgrade.md b/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/manual-upgrade.md index 15b5aa972f..a429b03366 100644 --- a/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/manual-upgrade.md +++ b/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/manual-upgrade.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Manual upgrade description: Information on how to manually upgrade to Octopus 2018.10 LTS from Octopus 2.6.5. navOrder: 1 @@ -22,7 +22,7 @@ You can upgrade from **Octopus 2.6.5** to **Octopus 2018.10 LTS** by downloading To perform an in-place upgrade, follow these steps: -### 1. Back up Your Octopus 2.6.5 database and Master Key {#Manualupgrade-1.BackupyourOctopus2.6databaseandmasterkey} +### 1. Back up your Octopus 2.6.5 database and Master Key {#Manualupgrade-1.BackupyourOctopus2.6databaseandmasterkey} See the [Backup and restore](/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/backup-2.6/)[ page for instructions on backing up your database.](/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/backup-2.6) diff --git a/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/upgrade-with-a-new-server-instance.mdx b/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/upgrade-with-a-new-server-instance.mdx index 38351941cc..fc1983edc0 100644 --- a/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/upgrade-with-a-new-server-instance.mdx +++ b/src/pages/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts/upgrade-with-a-new-server-instance.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Upgrade with a new server instance description: Information on how to upgrade from Octopus 2.6.5 to a new Octopus instance. navOrder: 2 @@ -12,7 +12,7 @@ This is the recommended way of performing an upgrade for larger installations. I Be sure to read the [Upgrading from Octopus 2.6.5 to 2018.10 LTS](/docs/administration/upgrading/legacy/upgrading-from-octopus-2.6.5-2018.10lts) documentation page. You must have a working **Octopus 2.6.5** installation for the data migration. -## Step by Step \{#Upgradewithanew3.0serverinstance-Stepbystep} +## Step by step \{#Upgradewithanew3.0serverinstance-Stepbystep} To upgrade to a modern version of Octopus Server, follow these steps: diff --git a/src/pages/docs/approvals/jira-service-management/index.md b/src/pages/docs/approvals/jira-service-management/index.md index 1e5f8de3eb..012d6fa542 100644 --- a/src/pages/docs/approvals/jira-service-management/index.md +++ b/src/pages/docs/approvals/jira-service-management/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Jira Service Management Integration description: Octopus Deploy can integrate with your Jira Service Management instance for deployment control using Change Requests/Issues navOrder: 10 @@ -129,7 +129,7 @@ To enable a project to enforce a requirement for an approved CR: ![JSM Integration Project settings](/docs/approvals/jira-service-management/images/jsm-project-settings.png) ::: -### Default Behavior +### Default behavior Deployments resulting in a CR creation will produce an issue with a Request Type of **Request a change** @@ -195,7 +195,7 @@ e.g `Octopus: Deploy "Web Site" version 1.0.1-hotfix-001 to "Dev"` The title must match the format **exactly**, including the double-quotes. ::: -### Respecting Change Windows +### Respecting change windows In addition to a change request being approved, a change must also be in its schedule change window in order for the deployment to execute. The change window is controlled by the `Planned @@ -212,7 +212,7 @@ The following list assumes the linked change is in an **approved** state. **If at any time a `Planned end` is exceeded and the linked change request is not approved, the deployment will be terminated.** -## Known Issues and limitations +## Known issues and limitations - Once an Issue is deemed to be related to a deployment, then only this Issue will be evaluated for the deployment to proceed. If the Issue is incorrect, you will need to cancel the deployment, diff --git a/src/pages/docs/approvals/servicenow/index.md b/src/pages/docs/approvals/servicenow/index.md index 9c9ccb87dc..fd0e1ab60f 100644 --- a/src/pages/docs/approvals/servicenow/index.md +++ b/src/pages/docs/approvals/servicenow/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: ServiceNow Integration description: Octopus Deploy can integrate with your ServiceNow instance for deployment control using Change Request approvals navOrder: 10 @@ -210,7 +210,7 @@ e.g `Octopus: Deploy "Web Site" version 1.0.1-hotfix-001 to "Dev"` The title must match the format **exactly**, including the double-quotes. ::: -### Respecting Change Windows +### Respecting change windows :::div{.warning} This feature is only available for version 2022.3.3026 and later diff --git a/src/pages/docs/deployments/azure/deploying-a-package-to-an-azure-web-app/using-deployment-slots-with-azure-web-apps.md b/src/pages/docs/deployments/azure/deploying-a-package-to-an-azure-web-app/using-deployment-slots-with-azure-web-apps.md index 9b4c9a9964..d600ea0a92 100644 --- a/src/pages/docs/deployments/azure/deploying-a-package-to-an-azure-web-app/using-deployment-slots-with-azure-web-apps.md +++ b/src/pages/docs/deployments/azure/deploying-a-package-to-an-azure-web-app/using-deployment-slots-with-azure-web-apps.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Using Deployment Slots with Azure Web Apps description: Deploying Slots provide a nice way to implement Blue-Green deployments for Azure Web Apps. --- @@ -27,7 +27,7 @@ The scripts below assume you have a variable named 'WebSite' that contains the n Follow the steps for [Azure Web App targets](/docs/infrastructure/deployment-targets/azure/web-app-targets). -### Step 2: Create Staging Slot {#UsingDeploymentSlotswithAzureWebApps-Step1-CreateStagingSlot} +### Step 2: Create a staging slot {#UsingDeploymentSlotswithAzureWebApps-Step1-CreateStagingSlot} Create a [Run an Azure PowerShell Script](/docs/deployments/azure/running-azure-powershell) step. @@ -67,7 +67,7 @@ So your step should look like: ![](/docs/deployments/azure/deploying-a-package-to-an-azure-web-app/azure-remove-staging-slot-script.png) ::: -### Step 3: Deploy Your Package {#UsingDeploymentSlotswithAzureWebApps-Step2-DeployyourPackage} +### Step 3: Deploy your package {#UsingDeploymentSlotswithAzureWebApps-Step2-DeployyourPackage} The next step is to deploy your package to the Staging slot. We do this by creating a [Deploy an Azure Web App](/docs/deployments/azure/deploying-a-package-to-an-azure-web-app) step. @@ -94,7 +94,7 @@ As shown below: You can choose to specify the slot directly on the deployment target, or directly on the step (if you wish to deploy to multiple different slots on the same Web App Service, for example), however, the slot on the target will take priority. ::: -### Step 4: Swap the Staging and Production Slots {#UsingDeploymentSlotswithAzureWebApps-Step3-SwaptheStagingandProductionSlots} +### Step 4: Swap the Staging and Production slots {#UsingDeploymentSlotswithAzureWebApps-Step3-SwaptheStagingandProductionSlots} The final step is to create another Azure PowerShell step to swap the Staging and Production slots. diff --git a/src/pages/docs/deployments/java/index.md b/src/pages/docs/deployments/java/index.md index 4f223a3d00..e8e91b567f 100644 --- a/src/pages/docs/deployments/java/index.md +++ b/src/pages/docs/deployments/java/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Java applications description: Deploy to WildFly, Red Hat JBoss EAP and Tomcat using Octopus Deploy navOrder: 70 @@ -46,7 +46,7 @@ See the section [Building SemVer Compatible Artifacts](#building_semver_compatib Valid packages can then be added to the library using the [web based interface, or using the CLI tool](/docs/packaging-applications/package-repositories/built-in-repository/#pushing-packages-to-the-built-in-repository). -#### Building SemVer Compatible Artifacts +#### Building SemVer Compatible Artifacts {#building_semver_compatible_artifacts} The most common incompatibility between Maven and SemVer formatting comes from the use of a dash to separate the package name from the version. For example, by default Maven will build artifacts with names like `myapplication-1.0.0-SNAPSHOT.war`. To be managed by the built in Octopus library, this filename needs to be in the format `myapplication.1.0.0-SNAPSHOT.war`. @@ -89,7 +89,7 @@ The target machine must have Java 1.8 installed, and the `java` executable must The `Deploy to Tomcat via Manager` step takes advantage of the [Manager application](https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html) shipped with Tomcat to deploy Java applications. The following steps describe the process of deploying a web application (a WAR package) to Tomcat through Octopus Deploy. -### 1. Configure Tomcat +### 1. Configure Tomcat{#configure_tomcat} Tomcat needs to be configured with a user that Octopus can use to log into the Manager API. @@ -176,7 +176,7 @@ The `Deploy to WildFly or Red Hat JBoss EAP` step is used to deploy a package fr * If you are deploying to a domain controller, the server groups that will have the deployment enabled must be specified in the `Enabled Server Groups` field. Likewise the server groups that will have the deployment disabled must be specified in the `Disabled Server Groups`. Multiple server groups can be specified separated by a comma. These fields has no effect when deploying to a standalone server. -#### Defining Context Paths +#### Defining context paths There are multiple ways that the context of an application deployed to WildFly and JBoss EAP is defined. diff --git a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/cleaning-up-environments.md b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/cleaning-up-environments.md index 831568fb8f..d86e091a45 100644 --- a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/cleaning-up-environments.md +++ b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/cleaning-up-environments.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Cleaning up Environments description: Octopus can automatically remove unwanted machines from environments based on their health status. navOrder: 3 @@ -9,13 +9,13 @@ navOrder: 3 Octopus can automatically remove unwanted machines from environments based on their health status. This is useful when an environment is scaled down and orphaned deployment targets remain in Octopus. Automatic environment clean up can be configured through machine policies. -## Machine Policies {#Cleaningupenvironments-Machinepolicies} +## Machine policies {#Cleaningupenvironments-Machinepolicies} Machine policies are machine related settings that can be applied per-machine. They can be accessed at **Infrastructure ➜ Machine policies**. In this example we will create a machine policy to automatically delete machines when they become unavailable. -## Creating a Machine Policy for Environment Cleanup {#Cleaningupenvironments-Creatingamachinepolicyforenvironmentcleanup} +## Creating a machine policy for environment cleanup {#Cleaningupenvironments-Creatingamachinepolicyforenvironmentcleanup} 1. Navigate to the *Machine policies* screen. 2. Create a new machine policy by selecting **Add machine policy**: @@ -48,7 +48,7 @@ Machine deletion happens as part of health checks. Read more about [machine policies](/docs/infrastructure/deployment-targets/machine-policies) ::: -## Troubleshooting Automatic Environment Clean Up {#Cleaningupenvironments-Troubleshootingautomaticenvironmentcleanup} +## Troubleshooting automatic environment clean up {#Cleaningupenvironments-Troubleshootingautomaticenvironmentcleanup} Machine clean up is part of health checks and machine clean up logs are not stored. Machine clean up logging is written to the log of the health check task that performed the deletion. Audit events recording the automatic clean up of machines can be accessed via the **Configuration ➜ Diagnostics** page by selecting **Machine clean up events**, which redirects to the audit log of automatic machine removals. diff --git a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/deploying-to-transient-targets.md b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/deploying-to-transient-targets.md index 51d7e42629..6c127de942 100644 --- a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/deploying-to-transient-targets.md +++ b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/deploying-to-transient-targets.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Deploying to Transient Targets description: Transient deployment targets are targets that are intermittently available for a deployment. navOrder: 0 @@ -15,7 +15,7 @@ Transient deployment targets are targets that are intermittently available for a A typical Octopus deployment requires that all deployment targets are available when the deployment starts and will remain available while the deployment is in progress. Elastic Environments provides mechanisms for deploying to targets that may become unavailable while a deployment is in progress. You can also run a [health check](/docs/projects/built-in-step-templates/health-check) during a deployment, and based on those results opt to add or remove machines from the deployment. -## Deploying to Targets That Become Unavailable During a Deployment {#Deployingtotransienttargets-Deployingtotargetsthatbecomeunavailableduringadeployment} +## Deploying to Targets that become unavailable during a deployment {#Deployingtotransienttargets-Deployingtotargetsthatbecomeunavailableduringadeployment} This example uses the OctoFX project that does a deployment to two roles: **RateServer** and **TradingWebServer**. We have decided to auto-scale the machines in the **TradingWebServer** role and want to continue deploying the web site to the available machines, ignoring any machines that are no longer available, perhaps due to being scaled down. @@ -28,7 +28,7 @@ This example uses the OctoFX project that does a deployment to two roles: **Rate To ensure that a machine which has been skipped is kept up to date, consider [keeping deployment targets up to date](/docs/deployments/patterns/elastic-and-transient-environments/keeping-deployment-targets-up-to-date). ::: -## Including and Excluding Targets During a Deployment {#Deployingtotransienttargets-Includingandexcludingtargetsduringadeployment} +## Including and excluding targets during a deployment {#Deployingtotransienttargets-Includingandexcludingtargetsduringadeployment} In this example, OctoFX will deploy to **RateServer** and then run a Health Check step before it deploys to **TradingWebServer**, ensuring that only currently available targets are involved in the deployment. diff --git a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/immutable-infrastructure.md b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/immutable-infrastructure.md index 9e2b64807a..7330e74c5d 100644 --- a/src/pages/docs/deployments/patterns/elastic-and-transient-environments/immutable-infrastructure.md +++ b/src/pages/docs/deployments/patterns/elastic-and-transient-environments/immutable-infrastructure.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Immutable Infrastructure description: This guide covers deploying to immutable infrastructure where a new version of the infrastructure is provisioned and the old infrastructure is terminated. navOrder: 4 @@ -17,18 +17,18 @@ The features in [Elastic and Transient Environments](/docs/deployments/patterns/ In this example we will create an infrastructure project and an application project. The infrastructure project will provision new Tentacles and terminate the old ones. The application project gets deployed to the Tentacles. We will then automate deploying our application to brand new infrastructure with each release. -## Machine Policy {#ImmutableInfrastructure-Machinepolicy} +## Machine policy {#ImmutableInfrastructure-Machinepolicy} The Tentacles provisioned in this guide belong to the **Immutable Infrastructure** machine policy. For now, create a new machine policy called **Immutable Infrastructure** and leave all of the settings at their default value. -## Application Project {#ImmutableInfrastructure-Applicationproject} +## Application project {#ImmutableInfrastructure-Applicationproject} For this demonstration, let's create a project called **Hello World** that will run a script echoing "Hello World" to each of our Tentacles. In practice, this would be the project that deploys your application to the Tentacles. 1. Create a project called **Hello World**. 2. Add a script step that outputs "Hello World" on each Tentacle: -## Infrastructure Project {#ImmutableInfrastructure-Infrastructureproject} +## Infrastructure project {#ImmutableInfrastructure-Infrastructureproject} The infrastructure project runs a script that provisions two new Tentacles and removes any old Tentacles in the environment we are deploying to. In practice this project would create your new infrastructure, add it to your load balancer and terminate your old infrastructure. @@ -49,11 +49,11 @@ At this stage you should be able to provision new Tentacles by creating a releas You could also create and deploy a release of the **Hello World** project to your shiny new Tentacles, but it requires a lot of button clicking. -## Automating All the Things {#ImmutableInfrastructure-Automatingallthethings} +## Automating *all the things* {#ImmutableInfrastructure-Automatingallthethings} Imagine a developer makes a change to Hello World and would like to deploy it. At this stage, they would need to create and deploy a release of the Hello World Infrastructure project, wait for the new infrastructure to become available and then create and deploy a release of Hello World. It is possible but clunky. Also, someone would be required to remove all of the orphaned deployment targets left in Octopus when new Tentacles are provisioned. -### Cleaning Machines {#ImmutableInfrastructure-Cleaningmachines} +### Cleaning machines {#ImmutableInfrastructure-Cleaningmachines} Cleaning up old Tentacles can be accomplished through the use of machine policies. The **Immutable Infrastructure** machine policy that we created earlier can be edited so that it performs health checks more frequently, doesn't mind if machines are unavailable during that health check and automatically removes unavailable machines after a period of time. This is perfect for ensuring the Tentacles that we terminate are automatically cleaned up in a timely manner. @@ -67,7 +67,7 @@ Cleaning up old Tentacles can be accomplished through the use of machine policie ![](/docs/deployments/patterns/elastic-and-transient-environments/images/5865677.png) ::: -### Automatically Deploying {#ImmutableInfrastructure-Automaticallydeploying} +### Automatically deploying {#ImmutableInfrastructure-Automaticallydeploying} The **Hello World** project can be configured to automatically deploy when a new deployment target becomes available. Once this has been configured, any Tentacles created when **Hello World Infrastructure** is deployed will automatically receive the current successful deployment of the **Hello World** project. @@ -84,7 +84,7 @@ Create and deploy a new release of **Hello World Infrastructure**. You should n We are almost there! Next we need to bump the version of **Hello World** and automatically deploy it. -### Automatically Deploying a New Release {#ImmutableInfrastructure-Automaticallydeployinganewrelease} +### Automatically deploying a new release {#ImmutableInfrastructure-Automaticallydeployinganewrelease} Octopus will automatically deploy the current successful deployment for a project. That means if you deploy release 1.0.0 and then create release 1.0.1, the version 1.0.0 will continue to be deployed until 1.0.1 has been manually deployed. This is not ideal for immutable infrastructure, because we do not want to deploy 1.0.1 to our old infrastructure, so we have no way to indicate to Octopus that it should start deploying release 1.0.1. Enter auto deploy overrides. By creating both a new release and an auto deploy override when our infrastructure is provisioned, we can indicate to Octopus that the new release should be deployed to the new infrastructure. diff --git a/src/pages/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/index.mdx b/src/pages/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/index.mdx index 0a023d42f7..8241b148dc 100644 --- a/src/pages/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/index.mdx +++ b/src/pages/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Rollback .NET Application on Windows Server description: A guide on how to rollback a .NET application hosted on Windows Servers. navOrder: 5 @@ -19,7 +19,7 @@ This guide will walk through rolling back .NET Windows Services and .NET Web App Rolling back a database is out of the scope of this guide. As stated in this [article](https://octopus.com/blog/database-rollbacks-pitfalls), rolling back a database schema change could result in wrong or deleted data. This guide focuses on scenarios where there were no database changes or the database changes are backward compatible. Because the database changes are out of scope for rollbacks, the database packages will be "skipped" during the rollback process. -## Existing Deployment Process +## Existing deployment process For this guide, we will start with the following deployment process for the OctoFX application: @@ -38,11 +38,11 @@ For this guide, we will start with the following deployment process for the Octo View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/01-octofx-original/deployments/process). Please login as a guest. ::: -## Zero Configuration Rollback +## Zero configuration rollback -## Simple Rollback Process +## Simple rollback process The typical rollback strategy is to skip specific steps and run additional ones during a rollback. In this example, the database steps will be skipped with another step to [prevent that release from progressing](/docs/releases/prevent-release-progression) will run during a rollback. @@ -65,11 +65,11 @@ The updated deployment process will be: View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/02-octofx-simple-rollback/deployments/process). Please login as a guest. ::: -### Calculate Deployment Mode +### Calculate deployment mode -### Skip Database Deployment Steps +### Skip database deployment steps The two steps related to database deployments, Run Database Creation Runbook and Deploy OctoFX Database, should be skipped during a rollback. Unlike code, databases cannot easily be rolled back without risking data loss. For most rollbacks, you won't have database changes. However, a rollback could accidentally be triggered with a database change. For example, rolling back a change in **Test** to unblock the QA team. Skipping these steps during the rollback reduces the chance of accidental data loss. @@ -85,11 +85,11 @@ We also recommend adding or updating the notes field to indicate it will only ru ![windows updating notes field](/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/images/windows-updating-notes-field.png) ::: -### Prevent Release Progression +### Prevent release progression -## Complex Rollback Process +## Complex rollback process As mentioned earlier, re-deploying the website and windows service involves re-extracting the package, running configuration transforms, and any embedded scripts. Generally, those steps will finish within 60 seconds. However, re-deploying those packages carries a small amount of risk because variable snapshots can be updated. Or, the embedded scripts are complex and take time to finish. @@ -123,7 +123,7 @@ The resulting process will be: View that deployment process on [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/03-octofx-complex-rollback/deployments/process). Please login as a guest. ::: -### Comparison to Simple Rollback Process +### Comparison to simple rollback process The complex rollback process and simple rollback process have some overlap. Please refer to the earlier section on how to configure these steps. @@ -134,7 +134,7 @@ The complex rollback process and simple rollback process have some overlap. Ple The primary difference between the simple and complex rollback process is the complex rollback process reuses the pre-existing extracted application. -### Add System Variable to Skip Package Deployment +### Add system variable to skip package deployment Adding the system variable `Octopus.Action.Package.SkipIfAlreadyInstalled` will skip already installed packages. That makes a lot of sense for rollbacks but less sense for regular deployments. To _only_ skip package installation for rollbacks, set the variable value to be: @@ -146,7 +146,7 @@ Adding the system variable `Octopus.Action.Package.SkipIfAlreadyInstalled` will ![windows skip if already installed](/docs/deployments/patterns/rollbacks/dotnet-windows-rollbacks/images/windows-skip-if-already-installed.png) ::: -### Windows Service Rollback +### Windows Service rollback Updating the existing Windows Service to point to an earlier version of the application involves two steps. @@ -165,7 +165,7 @@ Set the run condition for this step to: #{Octopus.Action[Calculate Deployment Mode].Output.RunOnRollback} ``` -### Website Rollback +### Website rollback In modern versions of IIS, updating the physical path is an instantaneous action. All traffic is routed to that new path. To do that, use the [IIS Website - Update Property](https://library.octopus.com/step-templates/34118a0e-f872-435a-8522-d3c7f8515cb8/actiontemplate-iis-website-update-property) step template. @@ -184,6 +184,6 @@ Set the run condition for this step to: If you are using application pools instead of websites, use [IIS AppPool - Update Property](https://library.octopus.com/step-templates/183c1676-cb8e-44e8-a348-bbcb2b77536e/actiontemplate-iis-apppool-update-property) step template. ::: -## Simple or Complex Rollback Process +## Simple or complex rollback process We recommend starting with the simple rollback process first. That requires the least amount of changes while at the same time gives you the rollback functionality. Only move to the complex rollback process if you determine the simple rollback process isn't meeting a specific need. \ No newline at end of file diff --git a/src/pages/docs/deployments/patterns/rollbacks/index.md b/src/pages/docs/deployments/patterns/rollbacks/index.md index d0328ec00b..3aa5c0705a 100644 --- a/src/pages/docs/deployments/patterns/rollbacks/index.md +++ b/src/pages/docs/deployments/patterns/rollbacks/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Rollbacks description: Rolling back to a previous version of code is entirely possible, but there is quite a bit to consider. This guide will walk you through the patterns and pitfalls for a successful rollback. navOrder: 10 @@ -10,7 +10,7 @@ hideInThisSectionHeader: false Being able to roll back to a known good state of code is often just as important as deploying software. In our experience, rolling back to a previous release is rarely as simple as "re-deploying the last successful deployment." This section will walk you through the patterns and pitfalls you'll encounter when configuring a rollback process. -## Built-In Rollback Support +## Built-in rollback support Octopus Deploy supports rollbacks out of the box. It always keeps the two most successful releases in any given environment, making it easy to roll back to the previous version. In addition, you can configure [retention policies](/docs/administration/retention-policies) to keep more releases on your target machines. @@ -20,7 +20,7 @@ For example, Imagine you just deployed `1.1.21` to your **QA** servers. For wha Doing that will re-run the previous deployment process as it existed at release creation. It will re-extract any packages, re-run all the configuration transforms, re-run any manual intervention steps, etc. If it took an hour before, it would most likely retake an hour on re-deployment. ::: -## Ideal Rollback Scenarios +## Ideal rollback scenarios It would be impossible to list every scenario in which a rollback will be successful, as each application is different. That being said, we have found rollbacks are most likely to succeed when one or more of the following is true. @@ -32,7 +32,7 @@ It would be impossible to list every scenario in which a rollback will be succes Rollbacks are much more complicated (if not impossible) when you have tightly coupled database and code changes, are doing a once-a-quarter release with 100s of changes, or the changes are tightly coupled with other applications. In those scenarios, we recommend **rolling forward**. -## Designing a Rollback Process +## Designing a rollback process Having the ability to roll back, even if rarely used, is a valuable option. What you don't want is to make up your rollback process in the middle of an emergency. If you want to have the ability to roll back, start thinking about what that process should look like now. Below are some questions to help get you started. @@ -62,7 +62,7 @@ Re-running that deployment process as-is for a rollback could lead to data loss 1. Pause deployment for manual verification of application. 1. Notify stakeholders of deployment. -### Calculating Deployment Mode +### Calculating deployment mode When a release is deployed to an environment, there are three possible "Deployment Mode" scenarios. @@ -78,7 +78,7 @@ Calculating deployment mode is done by comparing the system variable `Octopus.Re We have created the step template [Calculate Deployment Mode](https://library.octopus.com/step-templates/d166457a-1421-4731-b143-dd6766fb95d5/actiontemplate-calculate-deployment-mode) to do that for you. -### Enabling and Disabling Steps based on Deployment Mode +### Enabling and disabling steps based on deployment mode Once you know the deployment mode, you can enable or disable steps using [output variables](/docs/projects/variables/output-variables) and [variable run conditions](/docs/projects/steps/conditions/#variable-expressions). You can have steps run only on **Rollback**, only on **Deploy**, only on **Deploy** or **Redeployment**, or any other combination. @@ -108,13 +108,13 @@ The usage will be: #{Octopus.Action[Calculate Deployment Mode].Output.RunOnRollback} ``` -## Automatic Trigger of Rollbacks +## Automatic trigger of rollbacks Using the [Octopus CLI](/docs/octopus-rest-api/octopus-cli/deploy-release), or [one of our step templates](https://library.octopus.com/step-templates/0dac2fe6-91d5-4c05-bdfb-1b97adf1e12e/actiontemplate-deploy-child-octopus-deploy-project) it is possible to automatically trigger a rollback process. While it is possible to automatically trigger a rollback, this is not something we recommend unless you have a robust testing suite and you've tested your rollback process multiple times. We recommend first manually triggering the rollback. Once you are confident in your rollback process, look into updating your process to be automatically triggered. -## Rollback Considerations +## Rollback considerations Once a rollback process is in place, you'll need to decide when to use it. Specifically, when an issue occurs, you must decide to roll forward or rollback. When making that decision, here are a few questions to ask. @@ -123,13 +123,13 @@ Once a rollback process is in place, you'll need to decide when to use it. Spec - Are there any external components/applications depending on this deployment? - How long have the changes "been live" for users to use? Will they notice if a rollback were to occur? -### Large Changeset +### Large changeset Rolling back a large changeset is much, much harder than rolling back a small changeset. When you roll back, you cannot pick a specific change in a specific application's binaries to roll back. Everything goes, or none of it goes. If you have made dozens and dozens of changes, attempting to untangle the web of what to roll back could take just as long as rolling forward. If it has been a month or more since the last release to **Production**, we recommend **rolling forward**. If it has been a few hours since the last release, for example, deploying to a **Test** or **QA** environment, then a **rollback** is suitable. -### Database Rollbacks +### Database rollbacks Rolling back code is much easier than rolling back a database **without data loss**. It becomes nearly impossible to roll back a database schema change once users start manipulating data. @@ -144,7 +144,7 @@ Restoring a backup will also result in data loss; any data changed by users sinc In the event you have a schema change in your database, we recommend **rolling forward**. -### Dependent Applications +### Dependent applications In a perfect world, every service and project would be loosely coupled. While great in theory, the real world is often messy, and coupling exists. Services and their clients have an implied or explicit data contract and can be tightly coupled together. If either the service or the client violates that contract, a failure will occur. @@ -160,7 +160,7 @@ That is due to user perception. If a release with a new feature and several bug Generally, unless a showstopping bug is found, limit rollbacks to outage windows. Once the userbase starts using the new release, we recommend **rolling forward**. -## Staging Your Deployments +## Staging your deployments In our experience, deployments (and rollbacks) have the highest chance of success when deployed to the target environment in a "staging" area on your production servers. The deployment is then verified, and assuming verification passes, the "staging" area becomes live. If there is a problem, the deployment is aborted, and all the pre-existing configuration remains untouched. diff --git a/src/pages/docs/deployments/patterns/rollbacks/kubernetes/index.mdx b/src/pages/docs/deployments/patterns/rollbacks/kubernetes/index.mdx index 3b2937a201..b6ed44af73 100644 --- a/src/pages/docs/deployments/patterns/rollbacks/kubernetes/index.mdx +++ b/src/pages/docs/deployments/patterns/rollbacks/kubernetes/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Rollback Kubernetes deployment description: A guide on how to rollback a Kubernetes deployment navOrder: 5 @@ -37,11 +37,11 @@ For this guide, we'll start with an existing deployment process for deploying Pe View that deployment process on [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/01-kubernetes-original/deployments/process). Please login as a guest. ::: -## Zero Configuration Rollback +## Zero-configuration Rollback -## Simple Rollback Process +## Simple rollback process The most common reason for a rollback is something is wrong with the release. In these cases, you'll want to block the bad release from [moving forward](/docs/releases/prevent-release-progression). @@ -63,7 +63,7 @@ The updated deployment process for a simple rollback would look like this: View that deployment process on [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/02-kubernetes-simple-rollback/deployments/process). Please login as a guest. ::: -### Calculate Deployment Mode +### Calculate deployment mode @@ -81,11 +81,11 @@ To ensure that both of those steps are not run during a rollback, use the follow When viewing the deployment process at a glance, it is not readily apparent that a step has a run condition associated with it. Octopus Deploy provides a `Notes` field for each step where you can add information such as in which conditions the step will run as a way of self-documentation. ::: -### Block Release Progression +### Block release Progression -## Complex Rollback Process +## Complex rollback process A feature of Kubernetes is the revision history of the cluster components. The command `kubectl rollout history deployment.v1.apps/` lists all deployment revisions. @@ -188,7 +188,7 @@ else Write-Error "Version $rollbackVersion not found in the cluster revision history." } ``` -### Block Release Progression +### Block release progression The `Rollback Reason` step captures the reason for the rollback. We can pass the text entered in this step to the `Reason` field of this step by using the following output variable. diff --git a/src/pages/docs/deployments/patterns/rollbacks/nginx/index.mdx b/src/pages/docs/deployments/patterns/rollbacks/nginx/index.mdx index 9b03c92284..e5e94e04d3 100644 --- a/src/pages/docs/deployments/patterns/rollbacks/nginx/index.mdx +++ b/src/pages/docs/deployments/patterns/rollbacks/nginx/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Rolling back an NGINX deployment description: A guide on how to rollback a Node.js application hosted on NGINX navOrder: 15 @@ -22,7 +22,7 @@ Rolling back the database is out of scope for this guide. This [article](https: While this guide is for Node.js, the same process can be used for any framework, language or platform NGINX supports. ::: -## Existing Deployment Process +## Existing deployment process The existing deployment process is: @@ -39,11 +39,11 @@ The existing deployment process is: View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/01-octofx-original/deployments/process). Please login as a guest. ::: -## Zero Configuration Rollback +## Zero-configuration rollback -## Rollback Process +## Rollback process For most rollbacks, the typical strategy is to skip the database step while re-deploying the Node.js application website. In addition, a rollback indicates something is wrong with a release, so we'd want to [prevent that release from progressing](/docs/releases/prevent-release-progression). @@ -64,11 +64,11 @@ The updated deployment process will be: View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/bestbags-rollback/deployments/process). Please login as a guest. ::: -### Calculate Deployment Mode +### calculate deployment mode -### Skip Database Deployment Step +### Skip database deployment step The database deployment step should be skipped during a rollback. Unlike code, databases cannot easily be rolled back without risking data loss. For most rollbacks, you won't have database changes. However, a rollback could accidentally be triggered with a database change. For example, rolling back a change in **Test** to unblock the QA team. Skipping these steps during the rollback reduces the chance of accidental data loss. @@ -84,6 +84,6 @@ We also recommend adding or updating the notes field to indicate it will only ru ![windows updating notes field](/docs/deployments/patterns/rollbacks/nginx/images/rollback-nginx-notes-field.png) ::: -### Block Release Progression +### Block release progression \ No newline at end of file diff --git a/src/pages/docs/deployments/patterns/rollbacks/tomcat/index.mdx b/src/pages/docs/deployments/patterns/rollbacks/tomcat/index.mdx index 25fe46bf02..18a5c06325 100644 --- a/src/pages/docs/deployments/patterns/rollbacks/tomcat/index.mdx +++ b/src/pages/docs/deployments/patterns/rollbacks/tomcat/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Rolling back a Tomcat deployment description: This guide covers the topic of rolling back an application deployed to a Tomcat Java application server. navOrder: 10 @@ -44,11 +44,11 @@ For this guide, we'll start with an existing deployment process for deploying th View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/01-petclinic-original/deployments/process). Please login as a guest. ::: -## Zero Configuration Rollback +## Zero-configuration rollback -## Simple Rollback Process +## Simple rollback process While doing a rollback can be an operational exercise, the most typical reason for a rollback is something is wrong with the release, and you need to back out the changes. A bad release should also be [prevented from moving forward](/docs/releases/prevent-release-progression). @@ -70,11 +70,11 @@ The updated deployment process for a simple rollback would look like this: View the deployment process on our [samples instance](https://samples.octopus.app/app#/Spaces-762/projects/02-petclinic-simplerollback/deployments/process). Please login as a guest. ::: -### Calculate Deployment Mode +### Calculate deployment mode -### Skipping Database Steps +### Skipping database steps The two database steps, `Create Database If Not Exists` and `Deploy Database Changes` should be skipped for a rollback scenario. Rolling back database changes could result in data loss or interrupt testing operations. To skip these steps, we'll use one of the Variable Run Condition output variables from Calculate Deployment Mode step: @@ -88,11 +88,11 @@ When looking at the deployment process from the Process tab, there isn't a quick ![](/docs/deployments/patterns/rollbacks/tomcat/octopus-step-notes.png) ::: -### Block Release Progression +### Block release progression -## Complex Rollback Process +## Complex rollback process In the simple rollback scenario, the `.war` file is redeployed, extracted, variable replacement is executed, the `.war` is repackaged before finally being sent to the Tomcat server webapps location. In cases where the `.war` is very large, the extraction and repackaging of the `.war` could take quite some time, making the rollback process lengthy. This is where the parallel deployments feature of Tomcat can benefit us as all the processes have already occurred during the initial deployment of that release. @@ -123,7 +123,7 @@ Next, we'll go through the newly added and altered steps: The Rollback Reason is a [Manual Intervention](/docs/projects/built-in-step-templates/manual-intervention-and-approvals) step that prompts the user for the reason they are rolling back. The text entered is stored in an output variable which will be used in the Block Release Progression step further down the process. -### Stop App in Tomcat +### Stop app in Tomcat Before we deploy a new version of our application, we first must stop the existing one. The Advanced Options section of the `Start/Stop App in Tomcat` step is where we specify which version of the application we're going to stop. For this guide, the version is identified as the previous release number, which is represented by the following variable. @@ -163,7 +163,7 @@ For this guide, we only want the Deploy step to occur on a Deployment or a Redep ![](/docs/deployments/patterns/rollbacks/tomcat/octopus-deploy-tomcat-run-condition.png) ::: -### Start App in Tomcat +### Start app in Tomcat When executing the rollback, we'll need to start the previous version. @@ -173,7 +173,7 @@ This step is only required during a rollback scenario, so you'll need to add the #{Octopus.Action[Calculate Deployment Mode].Output.RunOnRollback} ``` -### Block Release Progression +### Block release progression The `Rollback Reason` step captures the reason for the rollback. We can pass the text entered in this step to the `Reason` field of this step by using the following output variable. diff --git a/src/pages/docs/deployments/terraform/preparing-your-terraform-environment/index.md b/src/pages/docs/deployments/terraform/preparing-your-terraform-environment/index.md index 07dd66851e..f6ca5f7e97 100644 --- a/src/pages/docs/deployments/terraform/preparing-your-terraform-environment/index.md +++ b/src/pages/docs/deployments/terraform/preparing-your-terraform-environment/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Preparing your Terraform environment description: Configuring remote state, backends, and cloud accounts using Terraform with Octopus navOrder: 10 @@ -18,7 +18,7 @@ Refer to the [Terraform documentation](https://www.terraform.io/docs/backends/in Neither Octopus nor Terraform will generate errors if a remote backend is not configured, most attempts to update or delete existing resources will not work as expected without a remote backend. We therefore recommend using a remote backend when using terraform with Octopus. You can learn more about storing state remotely [here](/docs/deployments/terraform/preparing-your-terraform-environment/#remote-state-terraform-cloud) and more general information regarding backends in the [Terraform documentation](https://www.terraform.io/docs/backends/index.html). -## Managed Cloud Accounts +## Managed cloud accounts You can optionally prepare the environment that Terraform runs in using the details defined in accounts managed by Octopus. If an account is selected then those credentials do not need to be included in the Terraform template. Using credentials managed by Octopus is optional. These credentials can be saved directly into the Terraform template if that approach is preferable. Credentials defined in the Terraform template take precedence over any credentials defined in the step. The following pages provide instruction on creating cloud accounts: diff --git a/src/pages/docs/getting-started/best-practices/environments-and-deployment-targets-and-roles.md b/src/pages/docs/getting-started/best-practices/environments-and-deployment-targets-and-roles.md index f57467e9c3..e4f1a153de 100644 --- a/src/pages/docs/getting-started/best-practices/environments-and-deployment-targets-and-roles.md +++ b/src/pages/docs/getting-started/best-practices/environments-and-deployment-targets-and-roles.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Environments, Deployment Targets, and Roles description: Guidelines and recommendations for configuring environments, deployment targets, and lifecycles in Octopus Deploy. navOrder: 30 @@ -10,7 +10,7 @@ hideInThisSection: true [Deployment targets](/docs/infrastructure/deployment-targets/) are what Octopus Deploy deploys to. They can be Windows servers, Linux servers, Kubernetes (K8s) clusters, Azure Web Apps, and more. Please refer to the [Deployment targets](/docs/infrastructure/deployment-targets/) for an up to date list on deployment targets. [Environments](/docs/infrastructure/environments) are how you organize your deployment targets into groups that represent different stages of your deployment pipeline. These stages are typically given names such as **development**, **test**, and **production**. Target roles, or tags, are a filter to select specific deployment targets in an environment. -## Deployment Target Environment and Role Relationship +## Deployment Target, Environment, and Role relationship Environments are how you group deployment targets in a stage in your deployment pipeline. Target roles, or tags, are how you identify which deployment targets you wish to deploy to in that specific stage. When you register a deployment target, you must provide at least one environment and one target role. @@ -48,7 +48,7 @@ For the software developers you can rewrite that sentence as: Using the example from above, Octopus would select all three servers. ::: -## Environment and Role Usage Differences +## Environment and Role usage differences Environments are designed as a macro grouping of deployment targets meant for use across multiple projects, library sets, and more. Below is a list of items where environments are used: diff --git a/src/pages/docs/getting-started/best-practices/installation-guidelines.mdx b/src/pages/docs/getting-started/best-practices/installation-guidelines.mdx index 34a20cb937..9039e78193 100644 --- a/src/pages/docs/getting-started/best-practices/installation-guidelines.mdx +++ b/src/pages/docs/getting-started/best-practices/installation-guidelines.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Installation Guidelines description: Guidelines and recommendations for installing Octopus Deploy on your infrastructure. navOrder: 10 @@ -54,7 +54,7 @@ Here are some items to consider when installing Octopus Deploy: - Configuring high availability mode provides multiple benefits, the most important being removing a single point of failure. - It is trivial to add additional high availability nodes after the initial configuration. -## Calculating Concurrent Tasks +## Calculating concurrent Tasks Except in extreme cases, you will be processing between 5-10 concurrent tasks for quite some time. There might be one or two times when you go over that limit, but those tasks will queue for a few minutes before being processed. In our experience, most deployments take between 20-30 minutes. With a task cap of 5 to 10, that enables: @@ -102,7 +102,7 @@ Below is the default configuration for Octopus Cloud. We've found this provides We are currently working with our existing customers on what best practices look like to self-host the Octopus Server Linux Container. If you'd like further recommendations please [contact us](https://octopus.com/support). -## Small-Medium Scale Configuration +## Small-medium scale configuration Our recommendation is to configure Octopus Deploy to run in [high availability mode](/docs/administration/high-availability/configure) from the start, even if you only plan on running one node. @@ -189,7 +189,7 @@ The kind of file storage will depend on where you are hosting Octopus Deploy. You can use the same `/api/octopusservernodes/ping` to monitor service uptime. Any monitoring tool that allows you to make HTTP calls to test health will work. Internally we use the tool [Better Uptime](https://betteruptime.com) to track Octopus Deploy status and alert us when it is down. -## Large-Scale Configuration +## Large-Scale configuration The above recommendation is designed for people working in small to medium-sized companies or people working in large companies getting started with Octopus, perhaps during an initial pilot of 4-7 teams. The recommendation below is for a large Octopus Deploy configuration designed to handle close to 1000 deployments a day. If you follow the advice in the small-medium scale configuration section, it will be easy to scale up to this as all the necessary infrastructure; load balancer, file storage, and SQL Server, will be in place. @@ -274,7 +274,7 @@ If you are hosting Octopus Deploy on a Windows server, you will need to install 3. Restart the server and wait for it to come back online. 4. Remove the drain mode from the node. -## Create a single Production instance +## Create a single production instance One question we get asked a lot is "should we have a single instance to deploy to all environments or have an Octopus Deploy instance per environment?" Unless there is a business requirement, our recommendation is to have a single instance to deploy to all environments and use Octopus Deploy's RBAC controls to manage permissions. We recommend this to avoid the maintenance overhead involved with having an instance per environment. diff --git a/src/pages/docs/getting-started/best-practices/lifecycles-and-environments.md b/src/pages/docs/getting-started/best-practices/lifecycles-and-environments.md index 0111762227..1ff87d5b54 100644 --- a/src/pages/docs/getting-started/best-practices/lifecycles-and-environments.md +++ b/src/pages/docs/getting-started/best-practices/lifecycles-and-environments.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-05-03 +modDate: 2023-10-04 title: Lifecycles and Environments description: Guidelines and recommendations for configuring your lifecycles to control the flow to your environments navOrder: 35 @@ -14,7 +14,7 @@ Octopus Deploy shares Lifecycles across an entire space. A project references l Lifecycles contain 1 to N phases, representing a stage in your deployment lifecycle. A phase can have 0 to N environments; for example, you could have a test phase that contains both **development** and **test** environments. Or, you could have a development phase for your **development** environment and a test phase for your **test** environment. -## Manually set your Phases +## Manually set your phases A lifecycle with no phases will result in Octopus calculating the phases automatically for you containing all environments. The order of the phases is dependent on the order of the environments on the environment page. @@ -45,7 +45,7 @@ We **_never_** recommend having a lifecycle with only **production**. Any deplo A lifecycle with a single phase is an anti-pattern. Typically we see this when users strictly adhere to the [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) branching strategy. If you create a new build, that build should be deployed to at least one environment to ensure it will work in **production**. ::: -## Production Approval +## Production approval Do not use the [manual intervention](/docs/projects/built-in-step-templates/manual-intervention-and-approvals) for business owner approvals, CAB (change approval board) approvals, or other Production approvals unless there is no other option. There are multiple reasons for this. diff --git a/src/pages/docs/getting-started/best-practices/partition-octopus-with-spaces.md b/src/pages/docs/getting-started/best-practices/partition-octopus-with-spaces.md index 2134d47147..bec92e8340 100644 --- a/src/pages/docs/getting-started/best-practices/partition-octopus-with-spaces.md +++ b/src/pages/docs/getting-started/best-practices/partition-octopus-with-spaces.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-05-03 +modDate: 2023-10-04 title: Partition Octopus with Spaces description: Guidelines and recommendations for configuring spaces in Octopus Deploy. navOrder: 20 @@ -34,7 +34,7 @@ Internally we have opted for a space per application suite. - Integrations Space (build servers, issue trackers, etc.) - And so on -## Anti-Patterns +## Anti-patterns We've also found several anti-patterns with the Spaces feature you should avoid. @@ -44,7 +44,7 @@ We've also found several anti-patterns with the Spaces feature you should avoid. - A space per application component. You would need to track a single application across multiple spaces. - Sharing deployment targets across spaces. It is possible to register the same Tentacle, Azure Web App, or K8s cluster across spaces, but that indicates a space is too fine-grained. Sharing deployment targets across spaces only lead to confusion as deployments in one space will appear "locked" because of deployment in another space. -## Prevent Sharing of Deployment Targets +## Prevent sharing of Deployment Targets A tentacle trusts the entire Octopus Server, not a specific space. It is not possible to prevent a tentacle from being shared across multiple spaces. Polling tentacles are harder to configure, but possible. @@ -59,7 +59,7 @@ There are some considerations when sharing workers. - The Tentacle agent could be running on an EC2 instance with a specific IAM role attached. - When workers download packages, they require a mutex; no other task can be running on that worker. 99% of the time, this isn't noticed. However, if a worker runs a 10-hour integration test, you run the risk of getting stuck behind that test waiting for the mutex to be created. Have a separate set of workers to run these long-running tasks. -## Moving Projects Between Spaces +## Moving Projects between Spaces Don't worry if you don't get your space configuration right the first time. It is a high bar to expect perfection the first time. diff --git a/src/pages/docs/getting-started/best-practices/project-and-project-groups.md b/src/pages/docs/getting-started/best-practices/project-and-project-groups.md index 60e5a20682..dc0351ce07 100644 --- a/src/pages/docs/getting-started/best-practices/project-and-project-groups.md +++ b/src/pages/docs/getting-started/best-practices/project-and-project-groups.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-05-03 +modDate: 2023-10-04 title: Projects and Project Groups Structure description: Guidelines and recommendations for configuring projects and project groups in Octopus Deploy. navOrder: 50 @@ -10,7 +10,7 @@ hideInThisSection: true [Projects](/docs/projects) store the deployment configuration for an application. For each project, you can define a deployment process and runbooks to manage your infrastructure, variables, the environments where the software is deployed, and your software releases. Project groups allow you to group like projects together. -## Project Structure +## Project structure We recommend thinking of projects and project groups this way: @@ -40,7 +40,7 @@ A project should deploy all the coupled components of an application (WebUI, Web - A project per application, per environment, such as `OctoPetShop_Dev`, `OctoPetShop_Test`, and so on. That is impossible to maintain and track versions. - A project per customer or physical location, such as `OctoPetShop_AustinEast`, `OctoPetShop_AustinWest`, and so on. This is impossible to maintain, you'd need a syncing process for all projects. Use [multi-tenancy](/docs/tenants) instead. -## Cumulative Changes +## Cumulative changes Octopus Deploy expects any application component it deploys to contain everything that the component needs. If you are deploying a web application, the deployment should include all the JavaScript, CSS, binaries, HTML files, etc., needed to run that web application. It shouldn't just be a delta change of a few HTML files or binaries. Octopus Deploy expects that for a variety of reasons. diff --git a/src/pages/docs/getting-started/best-practices/users-roles-and-teams.md b/src/pages/docs/getting-started/best-practices/users-roles-and-teams.md index 05da510517..38177ea5d6 100644 --- a/src/pages/docs/getting-started/best-practices/users-roles-and-teams.md +++ b/src/pages/docs/getting-started/best-practices/users-roles-and-teams.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Users, Roles, and Teams description: Guidelines and recommendations for managing RBAC in Octopus Deploy. navOrder: 80 @@ -16,11 +16,11 @@ There are two kinds of users in Octopus Deploy: - User Account: allowed to log in to both the Octopus Web Portal and Octopus API. Can be authenticated with external auth providers, username and password, or an Octopus API Key. - [Service Accounts](/docs/security/users-and-teams/service-accounts) are API-only accounts used for automated services that integrate with Octopus Deploy. It can only be authenticated with an Octopus API Key. -## User Accounts +## User accounts Our recommendation is each user has their own account in Octopus Deploy. Every action a person performs is audited. When sharing accounts, the audit log is unusable as it is impossible to know what action each person performed. -## Service Accounts +## Service accounts Our recommendation is only to use service accounts when external tools, such as build servers, JIRA, ServiceNow, etc., need to communicate with Octopus Deploy. This is preferred over user accounts for a few reasons: @@ -29,7 +29,7 @@ Our recommendation is only to use service accounts when external tools, such as We also recommend creating a unique service account per integration. For example, if you had two build servers, such as GitHub Actions and TeamCity, then at the very least, you should have two service accounts. You should also have individual service accounts per space per integration. Going back to the GitHub Actions example, if you had GitHub Actions pushing to three spaces, then you should have three service accounts. Limit the permissions of each service account. If the API key is ever compromised then that user is isolated to a single space for a set of projects. -## API Keys +## API keys [API Keys](/docs/octopus-rest-api/how-to-create-an-api-key/) allow you, or the service account, to access the [Octopus Deploy REST API](/docs/octopus-rest-api). API keys for users should be kept to a minimum, if a key was ever shared, then anyone can impersonate that user. Only use API keys for service accounts for any external integrations. @@ -73,7 +73,7 @@ By default, no one has any permissions outside of members of Octopus Administrat Teams can either be a system team, meaning it can be used across all spaces, or a space team, meaning a specific space can only access it. We recommend creating space-specific teams whenever possible. That will allow you to manage the membership and permissions on a smaller scale. -## Common RBAC Scenarios +## Common RBAC scenarios Here are some of the more common scenarios we get asked about, along with the associated user roles and scope. For this example, our instance has four environments, **development**, **test**, **staging**, and **production**. diff --git a/src/pages/docs/getting-started/best-practices/variables.md b/src/pages/docs/getting-started/best-practices/variables.md index 8a14dcfbc0..2f03df8376 100644 --- a/src/pages/docs/getting-started/best-practices/variables.md +++ b/src/pages/docs/getting-started/best-practices/variables.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-05-03 +modDate: 2023-10-04 title: Variable Recommendations description: Guidelines and recommendations for configuring variables in Octopus Deploy. navOrder: 60 @@ -33,7 +33,7 @@ In addition to having the above levels of variables, there are also two categori 1. Variables used in configuration file replacement (connection strings, version number, etc.) 2. Variables specific to the deployment or runbook run (output variables, messages, accounts, etc.) -## Variable Naming +## Variable naming Without established naming conventions, variable name collisions are possible. A common example is when a project and a library variable set have the same variable name scoped to the same environment. When a name collision occurs, Octopus Deploy will do its best to pick the ["right one" using an algorithm](/docs/projects/variables/#Scopingvariables-Scopespecificity). But sometimes, the variables are scoped equally. If this occurs, Octopus will choose project-defined variables ahead of library-defined ones. @@ -46,7 +46,7 @@ The recommendation is to avoid name collisions in the first place by following t These naming conventions only apply to variables used for a deployment or runbook run. Variables used for configuration file replacement have a specific naming convention to follow. The above naming convention makes it easier to distinguish between the two. -## Configuration File Replacement Variables +## Configuration file replacement variables One of Octopus Deploy's most used features is environmental variable scoping. And with good reason, having the same process, only needing a specific value such as a connection string or domain name changed, ensures consistency during deployment. diff --git a/src/pages/docs/getting-started/best-practices/worker-configuration.md b/src/pages/docs/getting-started/best-practices/worker-configuration.md index b4b4805ee7..b481505066 100644 --- a/src/pages/docs/getting-started/best-practices/worker-configuration.md +++ b/src/pages/docs/getting-started/best-practices/worker-configuration.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Offload Work to Workers description: Guidelines and recommendations for configuring workers in Octopus Deploy. navOrder: 40 @@ -45,7 +45,7 @@ The built-in worker and [dynamic workers](/docs/infrastructure/workers/dynamic-w - Dynamic workers are assigned to an entire instance, not just a space. We have seen cases where a deployment blocks on one space, blocking a deployment on another space because they both used the same dynamic worker. - There is only one dynamic worker per pool. Workers have some blocking tasks (install Calamari and downloading a package). If a process needs to acquire a mutex for that blocking task, it has to wait until other tasks are done. -## Workers for Octopus at Scale +## Workers for Octopus at scale If you plan on using Octopus Deploy at scale, [disable the built-in worker](/docs/infrastructure/workers/built-in-worker/#switching-off-the-built-in-worker) for self-hosted or stop using the dynamic workers and host your own workers and worker pools. @@ -56,7 +56,7 @@ If you plan on using Octopus Deploy at scale, [disable the built-in worker](/doc - For redundancy, have at least two workers per pool. - Whenever possible, leverage [execution container for workers](/docs/projects/steps/execution-containers-for-workers) to limit the amount of software to install and maintain on the workers. -## Compute Resources Required +## Compute resources required Workers don't need a lot of compute resources. Our recommendations are: diff --git a/src/pages/docs/getting-started/glossary.md b/src/pages/docs/getting-started/glossary.md index 0767847521..edeccf0edf 100644 --- a/src/pages/docs/getting-started/glossary.md +++ b/src/pages/docs/getting-started/glossary.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Glossary description: A page containing the definitions of terms used in Octopus Deploy. navOrder: 60 @@ -17,7 +17,7 @@ We do our best to make Octopus Deploy as user friendly as possible. However, it As you proceed through each phase you will need to learn new terms and concepts. This page breaks down those terms and concepts into each phase we think it is useful to learn. -## POC Phase Terms +## POC phase terms When first setting up a POC or Hello World project you will become familiar with the following terms and concepts. @@ -44,7 +44,7 @@ When first setting up a POC or Hello World project you will become familiar with - **Task Log**: The raw log formatted so it is easier to read on a web page. - **Task History**: The audit history of the deployment. Includes who and when a deployment was triggered, who and when a manual intervention was approved, and more. -## Pilot Phase Terms +## Pilot phase terms As you move on from the POC phase to the Pilot phase you should familiarize yourself with these terms and concepts. @@ -67,7 +67,7 @@ As you move on from the POC phase to the Pilot phase you should familiarize your - [**Deployment Notes**](/docs/releases/deployment-notes): The summarization of all the releases rolled up and included since the previous deployment to the deployment environment. - [**Artifacts**](/docs/projects/deployment-process/artifacts): Files collected from remote machines during the deployment which can be downloaded from the Octopus Web Portal for review. -## General Adoption Phase Terms +## General adoption phase terms After the pilot phase is successful it is time to start bringing other projects on board. As you do that you should familiarize yourself with these terms and concepts. diff --git a/src/pages/docs/getting-started/index.md b/src/pages/docs/getting-started/index.md index 5acc44bb3d..aec607f719 100644 --- a/src/pages/docs/getting-started/index.md +++ b/src/pages/docs/getting-started/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Getting started subtitle: An overview of Octopus Deploy concepts navTitle: Overview @@ -15,7 +15,7 @@ This section provides an overview of Octopus Deploy concepts and links to the re Start a Trial -## Consistent Releases +## Consistent releases Octopus Deploy simplifies complex deployments. @@ -59,7 +59,7 @@ Organizing your infrastructure into environments lets you define your deployment Learn more about managing your [infrastructure](/docs/infrastructure). -## Packaging Applications +## Packaging applications Before you can deploy software with Octopus Deploy, you need to bundle all the files required for the software to run in a supported package. The package must be versioned and stored in a repository. Octopus Deploy includes a built-in repository. You can configure your build server to push packages automatically to Octopus's built-in repository or to your existing [package repository](/docs/packaging-applications/package-repositories). @@ -75,7 +75,7 @@ For each project, you can define a deployment process, runbooks to manage your i Learn more about [projects](/docs/projects). -## Deploying Applications +## Deploying applications Octopus Deploy is designed to work with teams following modern DevOps methodologies, that is, continuously deploying software, getting feedback, making changes, and redeploying. diff --git a/src/pages/docs/infrastructure/accounts/username-and-password.md b/src/pages/docs/infrastructure/accounts/username-and-password.md index dcadfa1754..46f0931e9a 100644 --- a/src/pages/docs/infrastructure/accounts/username-and-password.md +++ b/src/pages/docs/infrastructure/accounts/username-and-password.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Username and password accounts description: Username and Password Accounts allow you securely authenticate with different services. navOrder: 60 @@ -9,7 +9,7 @@ navOrder: 60 A username/password account can be used to connect [SSH deployment targets](/docs/infrastructure/deployment-targets/linux/ssh-target/) and services like Google Cloud Platform if you are using the [Kubernetes](/docs/deployments/kubernetes) functionality in Octopus. -## Enabling username & password authentication on Linux {#UsernameandPassword-EnablingUsername&PasswordAuthentication} +## Enabling username and password authentication on Linux {#UsernameandPassword-EnablingUsername&PasswordAuthentication} Depending on your SSH target machine's distribution you may need to enable password authentication. diff --git a/src/pages/docs/infrastructure/deployment-targets/amazon-ecs-cluster-target.md b/src/pages/docs/infrastructure/deployment-targets/amazon-ecs-cluster-target.md index 6672902921..51b13d3e81 100644 --- a/src/pages/docs/infrastructure/deployment-targets/amazon-ecs-cluster-target.md +++ b/src/pages/docs/infrastructure/deployment-targets/amazon-ecs-cluster-target.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Amazon ECS cluster description: How to configure an Amazon ECS cluster target in Octopus Deploy navOrder: 30 @@ -56,7 +56,7 @@ See [cloud target discovery](/docs/infrastructure/deployment-targets/cloud-targe There are multiple authentication options supported for ECS clusters. -#### Worker Credentials +#### Worker credentials Authentication can be configured to use credentials from the worker on which a deployment or cluster health check runs. AWS supports sourcing these credentials in several different ways, including environment variables and EC2 instance roles. See [Setting credentials in node.js](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html) for more information on the different ways credentials can be provided. diff --git a/src/pages/docs/infrastructure/deployment-targets/kubernetes-target/openshift/index.md b/src/pages/docs/infrastructure/deployment-targets/kubernetes-target/openshift/index.md index 1f39146423..45dbd46470 100644 --- a/src/pages/docs/infrastructure/deployment-targets/kubernetes-target/openshift/index.md +++ b/src/pages/docs/infrastructure/deployment-targets/kubernetes-target/openshift/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: OpenShift Kubernetes cluster description: How to configure an OpenShift Kubernetes cluster as a deployment target in Octopus. navOrder: 40 @@ -17,15 +17,15 @@ To connect your OpenShift K8s cluster to Octopus Deploy, you must first create a Service Accounts in OpenShift are project specific. You will need to create a Service Account per project (namespace) for Octopus Deploy in OpenShift. ::: -### Create Service Account +### Create service account -Each project within OpenShift has a section where you can define Service Accounts. After your project has been created: +Each project within OpenShift has a section where you can define service accounts. After your project has been created: - Expand **User Management**. - Click **Service Accounts**. - Click **Create Service Account**. -### Create Role Binding +### Create role binding The Service Account will need to have a role so it can create resources on the cluster. diff --git a/src/pages/docs/infrastructure/deployment-targets/machine-policies.mdx b/src/pages/docs/infrastructure/deployment-targets/machine-policies.mdx index adb0342b72..b335e2dc4d 100644 --- a/src/pages/docs/infrastructure/deployment-targets/machine-policies.mdx +++ b/src/pages/docs/infrastructure/deployment-targets/machine-policies.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Machine policies description: Machine Policies allow you to customize the behavior of Tentacle and SSH endpoints like health check settings, machine connectivity, updates and more. navOrder: 110 @@ -168,7 +168,7 @@ Using this setting with a Tentacle that runs on ephemeral storage (e.g., running It is recommended to run Tentacle on a persistent file system. ::: -### Retry Durations +### Retry durations There are two configurable durations for setting the maximum amount of time allowed to re-attempt failed communication with a Tentacle: - **Deployment or Runbook Run** @@ -178,7 +178,7 @@ There are two configurable durations for setting the maximum amount of time allo ![](/docs/infrastructure/deployment-targets/images/recover-from-communication-errors-with-tentacle-durations.png "width=500") ::: -### Step Retries and Execution Timeouts +### Step Retries and execution timeouts If you would like to retry a particular step within the deployment process for other types of temporary or transient errors, that can be [configured separately](/docs/projects/steps/conditions/#retries-and-execution-timeouts). ## Automatically delete machines \{#MachinePolicies-Automaticallydeletemachines} diff --git a/src/pages/docs/infrastructure/deployment-targets/tentacle/windows/azure-virtual-machines/diagnosing-issues.mdx b/src/pages/docs/infrastructure/deployment-targets/tentacle/windows/azure-virtual-machines/diagnosing-issues.mdx index cc139c7a98..a8af411668 100644 --- a/src/pages/docs/infrastructure/deployment-targets/tentacle/windows/azure-virtual-machines/diagnosing-issues.mdx +++ b/src/pages/docs/infrastructure/deployment-targets/tentacle/windows/azure-virtual-machines/diagnosing-issues.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Diagnosing Tentacle VM extension issues description: How to diagnose and resolve installation issues with the Tentacle VM Extension navOrder: 8 @@ -10,7 +10,7 @@ import AzureVMExtensionDeprecated from 'src/shared-content/deprecated-items/azur -## Diagnosing Issues \{#AzureVirtualMachines-Diagnosingissues} +## Diagnosing issues \{#AzureVirtualMachines-Diagnosingissues} If, for some reason, the machine fails to register after 20 minutes, you can access logs on the VM to determine what went wrong. diff --git a/src/pages/docs/infrastructure/index.mdx b/src/pages/docs/infrastructure/index.mdx index dd1ca419dd..1961ac90bc 100644 --- a/src/pages/docs/infrastructure/index.mdx +++ b/src/pages/docs/infrastructure/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Infrastructure navTitle: Overview navSection: Infrastructure @@ -17,7 +17,7 @@ With Octopus Deploy the machines and services you deploy your software to are ma ![The infrastructure tab of Octopus Deploy](/docs/infrastructure/images/infrastructure.png "width=500") ::: -## Deployment targets +## Deployment Targets diff --git a/src/pages/docs/insights/api.md b/src/pages/docs/insights/api.md index 83ceb769b0..6bd15f8d8a 100644 --- a/src/pages/docs/insights/api.md +++ b/src/pages/docs/insights/api.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: API description: The Insights API navOrder: 160 @@ -304,7 +304,7 @@ The request body is in JSON format. | EnvironmentGroups | Optional | An array of the environment groups to be included in this report. | | TimeZone | Optional | The timezone to be used in the report. Must be either a Windows or IANA (Tzdb) timezone. | -### Delete an Insights report +### Delete an insights report DELETE: `/api/{spaceId}/insights/reports/{reportId}` Deletes an existing Insights report. diff --git a/src/pages/docs/insights/index.md b/src/pages/docs/insights/index.md index b4091cb9ee..60dc6bef54 100644 --- a/src/pages/docs/insights/index.md +++ b/src/pages/docs/insights/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Insights navTitle: Overview navSection: Insights @@ -22,11 +22,11 @@ Two levels are available for DevOps Insights: ## What are DORA metrics? -[DORA](https://www.devops-research.com/) (DevOps Research and Assessment) is the team behind the Accelerate State of DevOps Report 2, a survey of more than 32,000 professionals from around the world. Their research has linked the technical and cultural capabilities that drive software delivery and organizational performance. +[DORA](https://dora.dev/) (DevOps Research and Assessment) is the team behind the Accelerate State of DevOps Report 2, a survey of more than 32,000 professionals from around the world. Their research has linked the technical and cultural capabilities that drive software delivery and organizational performance. DORA recommends an approach to measuring software delivery that relies on five metrics: -_Tempo_ +_Throughput_ - Lead time for changes (LT) - Deployment frequency (DF) @@ -36,13 +36,13 @@ _Stability_ - Change failure rate (CFR) - Mean time to recovery (MTTR) -_Operation_ +_Operations_ - Reliability Throughput metrics measure the health of your deployment pipeline, while the stability indicators help you understand the quality of your software and delivery pipeline. In addition to the four classic DORA metrics that measure software delivery performance, DORA added a new measure in 2021 for operational performance. -## Octopus built-in DORA metrics with DevOps Insights +## Octopus built-in DORA metrics with Insights Octopus **2022.3** adds out-of-the-box support for the following DevOps metrics: @@ -74,7 +74,7 @@ Together these metrics help you qualify the results of your DevOps performance, - Help introduce change with data and collaboration to make a business case - Share successes and learn from failures to continuously improve -## Understand performance of your projects with Project level Insights +## Understand performance of your projects with project-level Insights Project level insights are available as a new tab in every project so you can understand the performance of your projects across Channels, Environments, and Tenants. Each metric can be seen at a summary level, and insights can also be filtered to time frames, including last month, quarter, year, channels, and environments, as well as being exported into CSV. diff --git a/src/pages/docs/insights/space-level-insights.md b/src/pages/docs/insights/space-level-insights.md index af481d55ff..b92cef764d 100644 --- a/src/pages/docs/insights/space-level-insights.md +++ b/src/pages/docs/insights/space-level-insights.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Space Level Insights description: Space level insights navOrder: 140 @@ -24,12 +24,12 @@ If there are many unrelated projects and environments in a report, it will be ha ## Settings -### Time Zone +### Time zone The time zone of a report affects which day's data is counted when aggregating. The time zone should be chosen to reflect the most common understanding of what constitutes "midnight" for the team. -### Release Selection +### Release selection The releases that contribute to the report are determined via the channel that they belong to. The channel is used instead of the project itself to avoid pre-release and prior-version channels from skewing the data for the main release. diff --git a/src/pages/docs/installation/octopus-server-linux-container/index.mdx b/src/pages/docs/installation/octopus-server-linux-container/index.mdx index 797b7eb19e..a8da641f2f 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/index.mdx +++ b/src/pages/docs/installation/octopus-server-linux-container/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Octopus Server Linux Container description: Running the Octopus Server in the official Docker Linux container navOrder: 8 @@ -68,7 +68,7 @@ Master keys must be a 128 bit string that is then base 64 encoded. You can gener openssl rand 16 | base64 ``` -### Environment Variables +### Environment variables Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file) about setting environment variables. @@ -82,7 +82,7 @@ Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/ |**ADMIN_EMAIL**|The email associated with the admin user account| |**DISABLE_DIND**|The Linux image will by default attempt to run Docker-in-Docker to support [execution containers for workers](/docs/projects/steps/execution-containers-for-workers). This requires the image be launched with [privileged permissions](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities). Setting `DISABLE_DIND` to `Y` prevents Docker-in-Docker from being run when the container is booted.| -### Exposed Container Ports +### Exposed container ports Read Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose) about exposing ports. @@ -93,7 +93,7 @@ Read Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#pub |**10943**|Port for Polling Tentacles to contact the server| -### Volume Mounts +### Volume mounts Read the Docker [docs](https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only) about mounting volumes. diff --git a/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx b/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx index 83e285528f..2ee09149a0 100644 --- a/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx +++ b/src/pages/docs/installation/octopus-server-linux-container/octopus-in-kubernetes.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Octopus Server in Kubernetes description: Octopus can be installed into a Kubernetes cluster running the Octopus Server Linux container, optionally leveraging High Availability (HA). navOrder: 40 @@ -637,7 +637,7 @@ You can then mount the folder for the server logs, with each Octopus Server Node The `preStop` hook is used to drain an Octopus Server node before it is stopped. This gives the node time to complete any running tasks and prevents it from starting new tasks. The `postStart` start hook does the reverse and disables drain mode when the Octopus Server node is up and running. -### Readiness, Start up and Liveness probes \{#container-probes} +### Readiness, start up, and liveness probes \{#container-probes} The `readinessProbe` is used to ensure the Octopus Server node is responding to network traffic before the pod is marked as ready. The `startupProbe` is used to delay the livenessProbe until such time as the node is started, and the `livenessProbe` runs continuously to ensure the Octopus Server node is functioning correctly. diff --git a/src/pages/docs/octopus-cloud/disaster-recovery.md b/src/pages/docs/octopus-cloud/disaster-recovery.md index defd480f31..4ed88cdc1a 100644 --- a/src/pages/docs/octopus-cloud/disaster-recovery.md +++ b/src/pages/docs/octopus-cloud/disaster-recovery.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Disaster recovery navOrder: 40 description: How to work with your data and disaster recovery in an Octopus Cloud instance. @@ -39,7 +39,7 @@ Note: The portal is hosted in a separate Azure region from customer instances an For further information, customers should refer to [Microsoft's disaster recovery](https://docs.microsoft.com/en-us/azure/azure-sql/database/business-continuity-high-availability-disaster-recover-hadr-overview?view=azuresql#recover-a-database-to-the-existing-server) documentation. -### Azure Region Failure +### Azure region failure In the case of an Azure region wide disaster the time to restore services will vary depending on the nature of the disaster. For short duration outages the best strategy may be to wait for Microsoft to restore services within the region. In the case of region wide disasters affecting customer instances, for longer duration disasters restoration of services will entail provisioning a new customer instance in a new Azure region (in the same PII jurisdiction) and restoring the customer's database from the geo-redundant backup. For customer instances and the Octopus Cloud portal the time to restore operations is estimated to be 24 hrs once a new region is made available by Microsoft. The RPO in is 1 hr or to the customer specified restore point, as applicable. Note that there is not a geo-redundant copy of the Octopus Cloud File store, and the customer will need to re-build, upload, and/or regenerate any required packages and artifacts, as required by their deployments. diff --git a/src/pages/docs/octopus-cloud/migrations.md b/src/pages/docs/octopus-cloud/migrations.md index cd31d006dd..ce72b6e213 100644 --- a/src/pages/docs/octopus-cloud/migrations.md +++ b/src/pages/docs/octopus-cloud/migrations.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Migrating from Octopus Server to Octopus Cloud navOrder: 30 description: Migrating from Octopus Server to Octopus Cloud. @@ -113,7 +113,7 @@ If you use an external package repository, such as a self-hosted Artifactory ins Set up a couple of sample projects to deploy to your servers. That will be a final "plugs-out" test to ensure you are ready to start your migration. -### User Migration +### User migration The project export/import feature does not include users. All users must be created from scratch. If you are using an external authentication provider, such as Azure AD, or Okta, you can turn on "auto-create users" feature. @@ -140,7 +140,7 @@ We recommend choosing an "off-cycle" or "slow time" whenever possible to keep an Following this approach, you will have a time period with both an Octopus Server instance and an Octopus Cloud instance. ::: -### Export / Import the project +### Export / import the project Follow the instructions on [exporting and importing page](/docs/projects/export-import) to export and import a project. Make a note of what is _not_ exported. Releases and deployments are exported, but only "shells" (not the full deployment) to ensure any pre-existing releases can be promoted. @@ -201,7 +201,7 @@ At this point, we recommend deleting all the tentacle instances still pointing t In our experience, most people turn off their Octopus Server in about three to six months. When you decide to turn off your Octopus server, first take a full backup of the database and delete all the appropriate resources. -## No Longer Offered or Supported +## No longer offered or supported Before the **Export/Import Projects** feature, we offered a manual migration process. With the release of that feature, we no longer offer manual migrations from a self-hosted Octopus Server to Octopus Cloud and vice-versa. diff --git a/src/pages/docs/octopus-rest-api/index.mdx b/src/pages/docs/octopus-rest-api/index.mdx index 489428be2c..fdd2d33cb4 100644 --- a/src/pages/docs/octopus-rest-api/index.mdx +++ b/src/pages/docs/octopus-rest-api/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Octopus REST API navTitle: Overview navSection: Octopus REST API @@ -19,7 +19,7 @@ The Octopus REST API is designed: 3. To be comprehensive - 100% of the actions that you perform via the Octopus UI can be performed via the API. 4. To provide a great developer experience through [API clients](#api-clients) and [detailed examples](/docs/octopus-rest-api/examples). -## API Clients +## API clients Octopus provides API clients for popular programming languages and runtime environments. The source code for these clients is hosted on GitHub: @@ -30,7 +30,7 @@ Octopus provides API clients for popular programming languages and runtime envir Code snippets using these clients for various operations in the Octopus REST API are available in our [API examples](/docs/octopus-rest-api/examples) documentation. -## REST API Authentication \{#authentication} +## REST API authentication \{#authentication} The Octopus Deploy API is available at: @@ -51,7 +51,7 @@ Once you have a key, you can provide it to the API in the following ways: Learn more about [how to create an API key](/docs/octopus-rest-api/how-to-create-an-api-key). ::: -## REST API Swagger Documentation \{#api-swagger-docs} +## REST API Swagger documentation \{#api-swagger-docs} Octopus includes the default Swagger UI for displaying the API documentation in a nice human readable way. To browse that UI just open your browser and go to `https:///swaggerui/`. The original Non-Swagger API page is still available and can always be accessed via `https:///api/`. @@ -61,7 +61,7 @@ Octopus includes the default Swagger UI for displaying the API documentation in You can view the API through the Octopus Demo server at [demo.octopus.app/swaggerui/index.html](https://demo.octopus.app/swaggerui/index.html). -## REST API Links \{#api-links} +## REST API links \{#api-links} All resources returned by the REST API contain links to other resources. The idea is that instead of memorizing or hard-coding URL's when using the API, you should start with the root API resource and use links to navigate. @@ -99,7 +99,7 @@ You can follow the links in the result to navigate around the API; for example, Since the format and structure of links may change, it's essential that clients avoid hardcoding URL's to resources, and instead rely on starting at `/api` and navigating from there. -### URI Templates +### URI templates Some links (mainly to collections) use URI templates as defined in [RFC 6570](http://tools.ietf.org/html/rfc6570). If in doubt, a client should assume that any link is a URI template. diff --git a/src/pages/docs/octopus-rest-api/octopus-cli/create-release.md b/src/pages/docs/octopus-rest-api/octopus-cli/create-release.md index 97d7096053..85944f7f05 100644 --- a/src/pages/docs/octopus-rest-api/octopus-cli/create-release.md +++ b/src/pages/docs/octopus-rest-api/octopus-cli/create-release.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Create release description: Using the Octopus CLI to create releases. navOrder: 100 @@ -264,7 +264,7 @@ This creates a release for a project with multiple packages, by taking the versi octo create-release --project HelloWorld --version 1.0.3 --packagesFolder packages --server http://octopus/ --apiKey API-ABCDEF123456 ``` -## Deploying a Release After Creating It {#Creatingreleases-Deployingareleaseaftercreatingit} +## Deploying a release after creating it {#Creatingreleases-Deployingareleaseaftercreatingit} To create a release **and** deploy it to an environment named Production: @@ -277,7 +277,7 @@ octo create-release --project HelloWorld --deployto Production --server http://o If the `--deployTo` parameter is specified and the [lifecycle](/docs/releases/lifecycles) of the project you are deploying to is set to *Deploy automatically* when a release is created, it's possible multiple deployments to the same environment will be triggered. ::: -## Release Notes Supported Syntax +## Release notes supported syntax We use [showdownjs](https://github.com/showdownjs/showdown) to render release notes on the dashboard. Showdownjs supports the common markdown syntax as well as a rich set of extras such as tables and task lists. For the full list see https://github.com/showdownjs/showdown/wiki/Showdown's-Markdown-syntax. diff --git a/src/pages/docs/octopus-rest-api/octopus-cli/index.mdx b/src/pages/docs/octopus-rest-api/octopus-cli/index.mdx index 17680ae2f9..ddc5916f15 100644 --- a/src/pages/docs/octopus-rest-api/octopus-cli/index.mdx +++ b/src/pages/docs/octopus-rest-api/octopus-cli/index.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-07-16 +modDate: 2023-10-04 title: The Octopus Command Line (CLI) description: The Octopus CLI (octo) is the Octopus command line tool that builds on top of the Octopus REST API. navOrder: 30 @@ -54,7 +54,7 @@ import OctoAutocompleteTabCompletion from 'src/shared-content/octopus-cli/octo-a - **[run-runbook](/docs/octopus-rest-api/octopus-cli/run-runbook)**: Runs a Runbook. - **[version](/docs/octopus-rest-api/octopus-cli/version)**: Outputs Octopus CLI version. -## General Usage \{#OctopusCLI-GeneralUsage} +## General usage \{#OctopusCLI-GeneralUsage} All commands take the form of: diff --git a/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/index.md b/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/index.md index 40c70b9789..9b02e2256f 100644 --- a/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/index.md +++ b/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Tentacle.exe command line description: Tentacle.exe is the command line executable that runs the Octopus Tentacle instance. navOrder: 60 @@ -38,7 +38,7 @@ hideInThisSection: true - **[version](/docs/octopus-rest-api/tentacle.exe-command-line/version)**: Show the Tentacle version information. - **[watchdog](/docs/octopus-rest-api/tentacle.exe-command-line/watchdog)**: Configure a scheduled task to monitor the Tentacle service(s). -## General Usage {#Tentacle.exeCommandLine-Generalusage} +## General usage {#Tentacle.exeCommandLine-Generalusage} All commands take the form of: diff --git a/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/update-trust.md b/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/update-trust.md index 4ffd0fa67f..c3f750fcb8 100644 --- a/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/update-trust.md +++ b/src/pages/docs/octopus-rest-api/tentacle.exe-command-line/update-trust.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Update trust description: Replaces the trusted Octopus Server thumbprint of any matching polling or listening registrations with a new thumbprint to trust --- @@ -34,7 +34,7 @@ This example replaces the trusted thumbprint value `3FAFA8E1EE6A1133701190306E2C Tentacle update-trust --oldThumbprint="3FAFA8E1EE6A1133701190306E2CBAFA39C30C8D" --newThumbprint="5FAEA8E1EE6A4535701190536E2CBAFA39C30C8F" ``` -## Automated Update Of Trust +## Automated update of trust This example will query the Octopus Server endpoint and pull the certificate. If the endpoint's certificate thumbprint is different than the Tentacle it will find the matching Tentacles installed and update them. diff --git a/src/pages/docs/projects/variables/worker-pool-variables.md b/src/pages/docs/projects/variables/worker-pool-variables.md index a9d8804c2d..f9a789304b 100644 --- a/src/pages/docs/projects/variables/worker-pool-variables.md +++ b/src/pages/docs/projects/variables/worker-pool-variables.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Worker Pool variables description: Create a worker pool variable and use it in deployment steps navOrder: 60 @@ -66,7 +66,7 @@ The most common would be to use environment-specific worker pools to separate th ![addworkerpoolvariable](/docs/projects/variables/images/workerpoolvariable-environments.png) ::: -### Performance & Role separation +### Performance and role separation Worker pool variables enable different worker pools for different steps, for example, you could use a separate worker pool for application deployments and a different worker pool for database deployments. @@ -86,7 +86,7 @@ Licensing requirements of software installed on workers may mean that the softwa ![Worker pool variable network isolation](/docs/projects/variables/images/workerpoolvariable-networkisolation.png) ::: -### Multi-Cloud and Multi-Region workers +### Multi-cloud and multi-region workers [Multi-cloud](https://en.wikipedia.org/wiki/Multicloud) and Multi-Region strategies are commonplace. It's common to have workloads spread over multiple clouds and locations such as: diff --git a/src/pages/docs/projects/version-control/config-as-code-reference.md b/src/pages/docs/projects/version-control/config-as-code-reference.md index 924c8655e7..3b847c856f 100644 --- a/src/pages/docs/projects/version-control/config-as-code-reference.md +++ b/src/pages/docs/projects/version-control/config-as-code-reference.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Configuration as Code reference description: Details about the configuration as code feature. navOrder: 20 @@ -52,7 +52,7 @@ Currently, the Project level resources saved to SQL Server when version control Runbooks and Sensitive Variables are planned for future releases of config-as-code. ::: -### Resources NOT version controlled by config-as-code +### Resources **not** version controlled by config-as-code The config-as-code feature manages project-level resources. However, it is worth explicitly mentioning some things that are **not included**: @@ -92,11 +92,11 @@ Currently, there are no plans to include these resources in the config-as-code f Resources managed by the Octopus Terraform Provider will have their state managed by Terraform. Resources managed by the Octopus config-as-code feature will have the state managed by Octopus Deploy. The two are not the same and shouldn't be treated as such. ::: -## Git Configuration Options +## Git configuration options Project version control settings can be accessed by clicking on the **Settings ➜ Version Control** link on the project navigation menu. -### Git Repository +### Git repository The _Git Repository_ field should contain the URL for the repository you wish the Octopus configuration to be persisted to. e.g. `https://github.com/OctopusSamples/OctoFX.git` @@ -125,14 +125,14 @@ Git providers allow you to create an access token in different ways. The recomme Some VCS providers require that you use only a username and personal access token for authentication, not an email address (i.e. BitBucket). ::: -#### BitBucket Repository Access Tokens +#### BitBucket repository access tokens BitBucket's repository access tokens allow you to create repository-specific access tokens. For these to work with your Git repositories in Octopus, you must set the username to `x-token-auth`, and the password to the token. :::figure ![Screenshot of Octopus Version Control Settings page with Authentication section expanded. Username/password auth method is selected, the Username input field is highlighted with a bold red box, and contains the value x-token-auth](/docs/projects/version-control/octopus-bitbucket-repository-access-tokens.png) ::: -### File Storage +### File storage _Git File Storage Directory_ specifies the path within the repository where the Octopus configuration will be stored. The default directory is `.octopus`, but that can be changed. If only a single Octopus project will be stored in the repo, we recommend putting the configuration directly under the `.octopus` directory. @@ -142,9 +142,9 @@ If multiple projects will be persisted to the repository, adding the project nam We recommend storing projects alongside the application code. While it is possible to store all your deployment projects in a single central repository with folders for each project, it will be challenging to manage as you add more projects. For example, if you have multiple component projects, one for Web UI, another for Web API, etc., but the source code is in one repository, then store all the component projects in that repository. If you move the application code later, you can also [move the deployment configuration](/docs/projects/version-control/moving-version-control) to keep it with the application. -### Branch Settings +### Branch settings -#### Default Branch Name +#### Default branch name The _Default Branch Name_ is the branch on which the Octopus configuration will be written. It is also the default branch that will be used in various situations, for example: @@ -158,19 +158,19 @@ For existing initialized repositories, the default branch must exist. If the rep When snapshotting a Runbook in a Git project, the variables will always be taken from the default branch. ::: -#### Initial Commit Branch +#### Initial commit branch If the default branch is protected in your repository, select the *Is the default branch protected?* checkbox. This will allow you to use a different _Initial Commit Branch_. If this branch does not exist, Octopus will create the branch automatically. The Octopus configurations will be written to the initial commit branch instead of the default branch. You will need to merge the changes from this branch into the default branch outside of Octopus. -#### Protected Branches Pattern +#### Protected branches pattern You can also nominate protected branches for your Project. This will prevent users from making direct commits to the nominated branches from the Octopus UI and encourage them to create a new branch instead. To nominate protected branches, type in the name or a wildcard pattern in the Protected Branches Pattern field under Branch Settings. This will apply to all existing and future branches. -## OCL Files +## OCL files After successfully configuring a project to be version controlled, the specified Git repository will be populated with a set of Octopus Configuration Language (OCL) files. These files are created in the directory you define during setup. E.g. `./octopus/acme` diff --git a/src/pages/docs/projects/version-control/creating-and-deploying-releases-version-controlled-project.mdx b/src/pages/docs/projects/version-control/creating-and-deploying-releases-version-controlled-project.mdx index 6fad4e49b3..d8a8c94425 100644 --- a/src/pages/docs/projects/version-control/creating-and-deploying-releases-version-controlled-project.mdx +++ b/src/pages/docs/projects/version-control/creating-and-deploying-releases-version-controlled-project.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Creating and deploying releases on a version-controlled project description: What to expect when creating and deploying releases on a version-controlled project using the Configuration as Code feature in Octopus Deploy. navOrder: 40 @@ -10,7 +10,7 @@ import BuildServerPluginVersionControlFields from 'src/shared-content/projects/v There are slight differences when creating and deploying a release with a version-controlled project using the Configuration as Code feature in Octopus Deploy. This page will walk through those differences. -## Creating a Release +## Creating a release When you create a release with a version-controlled Octopus Project, you will have the ability to select the branch and specify a release number and package versions. Like before, a snapshot will be created using the deployment process, variables, and packages. diff --git a/src/pages/docs/projects/version-control/creating-release-from-a-build-server-plug-in.mdx b/src/pages/docs/projects/version-control/creating-release-from-a-build-server-plug-in.mdx index 251edbdade..f91141d7a7 100644 --- a/src/pages/docs/projects/version-control/creating-release-from-a-build-server-plug-in.mdx +++ b/src/pages/docs/projects/version-control/creating-release-from-a-build-server-plug-in.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Creating releases from a build server plugin on a version-controlled project description: Examples of how to ensure that the right branch is used to create the release when using a build server plugin. navOrder: 45 @@ -50,7 +50,7 @@ ${{ github.event.push.after || github.event.pull_request.head.sha }} TeamCity provides different data based on if the build is triggered by a branch push versus via a Pull Request (PR). There is no easy way to automate selecting the right one. Based on your process, we suggest using one of the following options. -### Git Reference +### Git reference If the build is triggered by a branch push, use ``` @@ -62,7 +62,7 @@ If the build is triggered via a PR, use ``` -### Git Commit +### Git commit This is the same for both scenarios. ``` diff --git a/src/pages/docs/projects/version-control/editing-a-project-with-version-control-enabled.md b/src/pages/docs/projects/version-control/editing-a-project-with-version-control-enabled.md index e7d7b1af03..1942054e32 100644 --- a/src/pages/docs/projects/version-control/editing-a-project-with-version-control-enabled.md +++ b/src/pages/docs/projects/version-control/editing-a-project-with-version-control-enabled.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Editing a project with version control enabled description: What to expect when using the Configuration as Code feature in Octopus Deploy navOrder: 30 @@ -13,7 +13,7 @@ Once an Octopus Project is configured to be version-controlled, your experience Editing via the Octopus Deploy UI works the same whether you are saving to a git repository or to SQL Server. You can add steps, update processes, remove steps, just like before. When you enable version control on a project, you get additional functionality. -### Branch Switcher +### Branch switcher The first difference is the addition of a branch-switcher. When editing the deployment process via the Octopus UI, the branch is selected in the branch-switcher in the left-hand navigation. @@ -37,7 +37,7 @@ Before enabling version control on the project, clicking save updated a record i ![committing a change to version control](/docs/projects/version-control/commit-process.png) ::: -### Commits to Protected branches +### Commits to protected branches If you are making changes on a protected branch, the quick save option will be disabled. When you click the **Commit** button, you will always be asked to Commit to a new branch. The option to commit to this branch will be disabled. @@ -45,7 +45,7 @@ If you are making changes on a protected branch, the quick save option will be d ![committing a change on a protected branch](/docs/projects/version-control/commit-process-protected.png) ::: -### Viewing and Editing OCL +### Viewing and editing OCL Enabling version control also enables you to edit the OCL (Octopus Configuration Language) file directly. We suggest using your favorite text editor or IDE to make changes, commit and push them just as you would any other code change. @@ -64,11 +64,11 @@ Octopus will periodically fetch from the remote, so you might have to wait a sho The Octopus Deploy Web Portal will only add non-default properties to the OCL files. For example, if a step isn't scoped to run for a specific environment(s), that property will not show up when you view the deployment process there. ::: -### OCL vs. Octopus Terraform Provider +### OCL versus Octopus Terraform Provider While OCL is similar to HCL, it is not the exact same. In addition, there is not a 1:1 match between the resources generated for OCL and the resources for the [Octopus Terraform Provider](https://registry.terraform.io/providers/OctopusDeployLabs/octopusdeploy/latest/docs). That means you cannot copy resources between OCL files and TF files. -## Version Control features +## Version control features Storing the deployment process in the same repository as your source code has many benefits. But don't forget to take advantage of all the version control features, including: diff --git a/src/pages/docs/projects/version-control/unsupported-config-as-code-scenarios.md b/src/pages/docs/projects/version-control/unsupported-config-as-code-scenarios.md index 2dbae4d69f..8b45e610b6 100644 --- a/src/pages/docs/projects/version-control/unsupported-config-as-code-scenarios.md +++ b/src/pages/docs/projects/version-control/unsupported-config-as-code-scenarios.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Unsupported Configuration as Code Scenarios description: Unsupported scenarios for the Configuration as Code feature in Octopus Deploy. navOrder: 50 @@ -9,7 +9,7 @@ navOrder: 50 The Configuration as Code feature is designed to give you the benefits of source control, branching, reverting, and pull requests while being able to use your tool of choice to manage your processes (and eventually) variables. While it has many benefits, there are some unsuitable use cases and scenarios. This document will describe each one as well as provide alternatives. -## Core Design Decision +## Core design decision The core design decision is each project in each space has a unique folder in a git repository. A git repository can store several projects across several spaces or store a single project in a single space. But, each project must have a unique folder in a git repository because of all the scaffolding data referenced by a project. @@ -28,7 +28,7 @@ That data is not stored in source control because it is shared across multiple p An error will occur when Octopus Deploy attempts to load a process from source control with one or more of those items missing. You'll be unable to create releases until those errors are resolved. ::: -## Syncing Multiple Instances +## Syncing multiple instances The configuration as code feature is not designed to allow two or more projects on different instances to point to the same folder. We've seen our users attempt to use Configuration as Code to keep the deployment processes in sync across multiple instances. That scenario is unsupported. @@ -50,7 +50,7 @@ You will still need a process to keep step templates in sync. The downside to this approach is you'll be unable to use the Octopus Deploy UI to manage your deployment processes. In addition, you'll need to convert your existing deployment process into Terraform manually. The files generated by Configuration as Code has a similar syntax as the Terraform provider, but it is not a 1:1 match. -### Separate Folders for each instance +### Separate folders for each instance Another alternative is each instance points to a unique folder in the same GitHub repo. For example, if you had a Developer instance and a Production instance. @@ -65,7 +65,7 @@ You will still need a process to keep step templates in sync. The downside to this approach is it is a manual process and prone to error. -## Project Templating +## Project templating The configuration as code feature is not designed to allow two or more projects on the same space to point to the same folder. We've seen our users attempt to use Configuration as Code as project templating. This scenario is unsupported. diff --git a/src/pages/docs/releases/issue-tracking/azure-devops.md b/src/pages/docs/releases/issue-tracking/azure-devops.md index 528f657648..906fb58236 100644 --- a/src/pages/docs/releases/issue-tracking/azure-devops.md +++ b/src/pages/docs/releases/issue-tracking/azure-devops.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Azure DevOps work item tracking integration description: Configure Azure DevOps work item tracking with Octopus. navOrder: 40 @@ -52,7 +52,7 @@ The ability to push the build information to Octopus, which is required for Azur The Azure DevOps integration does **not support** the ability to have Octopus release and deployment information displayed within Azure DevOps work items. -## Configuring Azure DevOps Integration +## Configuring Azure DevOps integration The following steps explain how to integrate Octopus with Azure DevOps: diff --git a/src/pages/docs/releases/issue-tracking/jira.md b/src/pages/docs/releases/issue-tracking/jira.md index c3bcd21919..bc633de500 100644 --- a/src/pages/docs/releases/issue-tracking/jira.md +++ b/src/pages/docs/releases/issue-tracking/jira.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Jira issue tracking description: Configure Jira Cloud and Jira Server issue tracking with Octopus. navOrder: 20 @@ -209,7 +209,7 @@ If your deployments aren't being displayed in Jira, this likely means you will n Navigate to **Infrastructure ➜ Environments**, and next to each environment click on the overflow menu (`...`) and click **Edit**. From here, you can map each Octopus environment to your corresponding Jira environment. -### Ensure casing on Issue/Work Item IDs match {#troubleshooting-check-case-on-ids} +### Ensure casing on issue/work item IDs match {#troubleshooting-check-case-on-ids} The commits that are pushed to Octopus as build information need to have the exact same case as the issue/work item found in Jira. For example, if the work item in Jira is `OBJ-123`, but your commit message includes the work item as `obj-123` (notice the lower-case value) you will need to remediate the case in your commits. This will allow the deployment status update to appear in Jira successfully. diff --git a/src/pages/docs/releases/release-versioning.md b/src/pages/docs/releases/release-versioning.md index a4a46330b8..e16f594091 100644 --- a/src/pages/docs/releases/release-versioning.md +++ b/src/pages/docs/releases/release-versioning.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Release versioning description: Select how the next release number is generated when creating a release. navOrder: 125 @@ -63,7 +63,7 @@ Octopus.Date.(Day|Month|Year|DayOfYear) Octopus.Time.(Hour|Minute|Second) ``` -## Complex Expressions +## Complex expressions The full power of the [Octopus variable syntax](/docs/projects/variables/variable-substitutions/#complex-syntax) (powered by [Octostache](https://github.com/OctopusDeploy/Octostache)) is available in version templates. In particular, [conditional expressions](/docs/projects/variables/variable-substitutions/#VariableSubstitutionSyntax-Conditionalsconditionals) can be used to model some complex scenarios. diff --git a/src/pages/docs/runbooks/runbook-examples/databases/backup-mssql-database.md b/src/pages/docs/runbooks/runbook-examples/databases/backup-mssql-database.md index 2c36c3738f..b3141f05b1 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/backup-mssql-database.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/backup-mssql-database.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Backup SQL database description: With Octopus Deploy you can backup a MSSQL database with a Runbook. navOrder: 10 @@ -17,7 +17,7 @@ In this example, you will be backing up a Microsoft SQL Server database using a In this example, we'll use SQL Authentication and provide both a SQL username and password. It's important to check that you have the correct permissions to perform the backup. You can find more information on this [here](/docs/deployments/databases/sql-server/permissions). -## Create the Runbook +## Create the runbook 1. To create a runbook, navigate to **Project ➜ Operations ➜ Runbooks ➜ Add Runbook**. 2. Give the Runbook a name and click **SAVE**. diff --git a/src/pages/docs/runbooks/runbook-examples/databases/backup-rds-mssql-s3-database.md b/src/pages/docs/runbooks/runbook-examples/databases/backup-rds-mssql-s3-database.md index 0265f8d316..ccc59559f3 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/backup-rds-mssql-s3-database.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/backup-rds-mssql-s3-database.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Backup RDS SQL database to S3 description: This section shows you how to perform a native SQL backup for an RDS SQL database and store in an S3 bucket. navOrder: 90 @@ -11,7 +11,7 @@ You can perform native backups of Amazon Relational Database instances running S In the following example, we'll use the [AWS RDS SQL Server - Backup to S3 Bucket](https://library.octopus.com/step-templates/3dd60fea-b98a-4760-8867-cbd049f7aa31/actiontemplate-aws-rds-sql-server-backup-to-s3-bucket) community step template. -## AWS Prerequisites +## AWS prerequisites * An AWS RDS SQL Server instance. * An Amazon S3 Bucket. diff --git a/src/pages/docs/runbooks/runbook-examples/databases/create-mysql-database.md b/src/pages/docs/runbooks/runbook-examples/databases/create-mysql-database.md index 6d15f77f7a..2b0b677e4d 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/create-mysql-database.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/create-mysql-database.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Create MySQL database description: With Octopus Deploy you can create a MySQL database with a Runbook. navOrder: 40 @@ -11,7 +11,7 @@ The ability to create a database in MySQL requires that the user account have el In the following example, we'll use the [MySQL - Create Database If Not Exists](https://library.octopus.com/step-templates/4a222ac3-ff4b-4328-8778-1c44eebdedde/actiontemplate-mysql-create-database-if-not-exists) community step template. -## Create the Runbook +## Create the runbook 1. To create a runbook, navigate to **Project ➜ Operations ➜ Runbooks ➜ Add Runbook**. 2. Give the Runbook a name and click **SAVE**. diff --git a/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database-to-environment.md b/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database-to-environment.md index 36bfb9a4ac..b624c1354c 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database-to-environment.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database-to-environment.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Restore SQL database to another environment description: With Octopus Deploy you can restore a MSSQL database to another environment with a runbook. navOrder: 30 @@ -13,7 +13,7 @@ This section shows you how to restore a database to a different environment, for Using the runbook means developers don't need any extra permissions to the database server itself, eliminating the time normal spent filling out a support ticket or tracking down a DBA to perform the restore. -## Create the Runbook +## Create the runbook 1. To create a runbook, navigate to **Project ➜ Operations ➜ Runbooks ➜ Add Runbook**. 2. Give the runbook a name and click **SAVE**. @@ -53,7 +53,7 @@ You can also add additional steps to add security to your runbooks, such as a [m We have a [Target - Windows](https://oc.to/TargetWindowsSamplesSpace) Space on our Samples instance of Octopus. You can sign in as `Guest` to take a look at this example and more runbooks in the `OctoFX` project. -## Learn More +## Learn more - [SQL Backup - Community Step template](https://library.octopus.com/step-templates/34b4fa10-329f-4c50-ab7c-d6b047264b83/actiontemplate-sql-backup-database) - [SQL Fix Orphaned User - Community Step Template](https://library.octopus.com/step-templates/e56e9b28-1cf2-4646-af70-93e31bcdb86b/actiontemplate-sql-fix-orphaned-user) diff --git a/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database.md b/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database.md index 2584d80694..151f155a1e 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/restore-mssql-database.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Restore SQL database description: With Octopus Deploy you can restore a MSSQL database with a runbook. navOrder: 20 @@ -17,7 +17,7 @@ In this example, you will restore a Microsoft SQL Server database using a step t In this example, we'll use SQL authentication and provide both a SQL username and password. It's important to check that you have the correct permissions to perform the backup. You can find more information about this in the [permissions documentation](/docs/deployments/databases/sql-server/permissions). -## Create the Runbook +## Create the runbook 1. To create a runbook, navigate to **Project ➜ Operations ➜ Runbooks ➜ Add Runbook**. 2. Give the Runbook a name and click **SAVE**. @@ -48,6 +48,6 @@ After adding all of the required parameters, click **Save**, and you have a basi We have a [Target - Windows](https://oc.to/TargetWindowsSamplesSpace) Space on our Samples instance of Octopus. You can sign in as `Guest` to take a look at this example and more runbooks in the `OctoFX` project. -## Learn More +## Learn more - [SQL Backup - Community Step template](https://library.octopus.com/step-templates/34b4fa10-329f-4c50-ab7c-d6b047264b83/actiontemplate-sql-backup-database) diff --git a/src/pages/docs/runbooks/runbook-examples/databases/restore-rds-mssql-s3-database.md b/src/pages/docs/runbooks/runbook-examples/databases/restore-rds-mssql-s3-database.md index 9968cbc829..4ee4129122 100644 --- a/src/pages/docs/runbooks/runbook-examples/databases/restore-rds-mssql-s3-database.md +++ b/src/pages/docs/runbooks/runbook-examples/databases/restore-rds-mssql-s3-database.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Restore RDS SQL database from S3 description: An example that demonstrates restoring a database backup file from an S3 bucket. navOrder: 100 @@ -11,7 +11,7 @@ You can perform native restores of Amazon Relational Database instances running In the following example, we'll use the [AWS RDS SQL Server - Restore from S3 Bucket](https://library.octopus.com/step-templates/55848421-44b9-403c-b1f0-ba8a84b1f177/actiontemplate-aws-rds-sql-server-restore-from-s3-bucket) community step template. -## AWS Prerequisites +## AWS prerequisites * An AWS RDS SQL Server instance. * A SQL backup stored in an S3 bucket. diff --git a/src/pages/docs/runbooks/runbooks-vs-deployments/index.md b/src/pages/docs/runbooks/runbooks-vs-deployments/index.md index d32578a94b..0abc9037c0 100644 --- a/src/pages/docs/runbooks/runbooks-vs-deployments/index.md +++ b/src/pages/docs/runbooks/runbooks-vs-deployments/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Runbooks vs Deployments description: Describing the differences between a deployment and a runbook. navOrder: 10 @@ -65,7 +65,7 @@ The retention policy is applied **per environment**. For example, if you had thr In Octopus 2020.2 and earlier, the runbook retention policy could not be set. Instead, Octopus would keep the last 1000 runs. ::: -## Snapshots vs Releases +## Snapshots versus Releases Runbooks are similar to deployments in that they also take a copy of the process to be used with execution. For a runbook this is referred to as a [snapshot](/docs/runbooks/runbook-publishing/#snapshots) versus a [release](/docs/releases) for a deployment. Runbooks can have two different types of snapshots: - Draft diff --git a/src/pages/docs/security/authentication/active-directory/index.md b/src/pages/docs/security/authentication/active-directory/index.md index 697cce39bb..00d3911289 100644 --- a/src/pages/docs/security/authentication/active-directory/index.md +++ b/src/pages/docs/security/authentication/active-directory/index.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Active Directory authentication description: Octopus Deploy can use Windows credentials to identify users. navOrder: 5 @@ -17,13 +17,13 @@ Octopus Deploy can authenticate users using Windows credentials. Windows AD auth **Domain user required during setup** When setting AD Authentication, either via the Octopus setup wizard or running the commands outlined below to switch to AD authentication mode, make sure you are signed in to Windows as a domain user. If you are signed in as a local user account on the machine (a non-domain user) you won't be able to query Active Directory, so setup will fail. -## Active Directory Sign-In options {#ActiveDirectoryauthentication-ActiveDirectorysigninoptions} +## Active Directory sign-in options {#ActiveDirectoryauthentication-ActiveDirectorysigninoptions} If you are using Active Directory Authentication with Octopus, there are two ways to sign in. 1. Integrated authentication 2. Forms-based -## Authentication Schemes +## Authentication schemes By default, Active Directory Authentication will use NTLM as the Authentication Scheme. In many circumstances, you can also configure Octopus to use Kerberos for authentication. If you would like to use Kerberos for authentication, you should consider if you require User Mode authentication. User Mode is required for Kerberos authentication when Octopus is in a [High Availability](/docs/administration/high-availability) configuration. By default, Kerberos authentication for Octopus Deploy runs in Kernel Mode. The mode is dictated by the web server running Octopus Deploy, which can be configured using the `configure` command. Select HTTP.sys for Kernel Mode, or Kestrel for User Mode: @@ -71,7 +71,7 @@ When the link is clicked, it redirects to a page which is configured to tell HTT ::: -### Kerberos vs NTLM security for AD Authentication {#ActiveDirectoryAuthentication-NTLMvKerberos} +### Kerberos vs NTLM security for AD authentication {#ActiveDirectoryAuthentication-NTLMvKerberos} It is possible to use explicitly select either `NTLM`, `Negotiate` or `IntegratedWindowsAuthentication` authentication for Active Directory authentication. Using `Negotiate` or `IntegratedWindowsAuthentication` will use Kerberos authentication. In some cases this may result in `NTLM` connections based on the nature of the connecting client. @@ -85,9 +85,9 @@ This table describes the options you can choose in Octopus, and the protocols th Without some additional configuration, AD authentication, whether forms-based or integrated, will usually fail to negotiate the use of `kerberos` authentication and instead choose `NTLM`. -### Supported Setups for Active Directory Authentication {#ActiveDirectoryAuthentication-SupportedAuthentication} +### Supported setups for Active Directory authentication {#ActiveDirectoryAuthentication-SupportedAuthentication} -Octopus Deploy supports various options for Active Directory Authentication. +Octopus Deploy supports various options for Active Directory authentication. :::div{.hint} Not all high availability and Active Directory configurations are supported. There are limitations on the use of Kerberos in high availability scenarios. This is due to a requirement to [use a machine level SPN in order to allow Kerberos to work](#ActiveDirectoryAuthentication-ConfiguringKerberos) with our web server. @@ -104,7 +104,7 @@ Not all high availability and Active Directory configurations are supported. The From Octopus version 2020.1.0 and above, an upgrade to .Net Core 3.1 and usage of the HTTP.sys library, the Octopus Deploy Service running with Domain Service Account credentials, does not have the ability to read the HttpContext.User.Identity.Name property which is used for Kerberos authentication. There is a requirement to run the Octopus Deploy Service as Local System in order to allow for Kerberos to successfully Authenticate. You can read more about this here: https://github.com/OctopusDeploy/Issues/issues/6602 ::: -### Configuring Kerberos Authentication for Active Directory {#ActiveDirectoryAuthentication-ConfiguringKerberos} +### Configuring Kerberos authentication for Active Directory {#ActiveDirectoryAuthentication-ConfiguringKerberos} Here's a simple checklist to help you on your way to allowing Kerberos Authentication. @@ -192,7 +192,7 @@ To set trusted sites via GPO: 1. Click **OK** then **Apply** and **OK**. -### Allowing Auto Logon via Group Policy Object {#ActiveDirectoryAuthentication-AllowingAutoLogon} +### Allowing auto logon via Group Policy Object {#ActiveDirectoryAuthentication-AllowingAutoLogon} 1. Open the **Group Policy Management Editor**. 1. Go to **User Configuration ➜ Policies ➜ Administrative Templates ➜ Windows Components ➜ Internet Explorer ➜ Internet Control Panel ➜ Security Page**. diff --git a/src/pages/docs/security/authentication/active-directory/troubleshooting-active-directory-integration.md b/src/pages/docs/security/authentication/active-directory/troubleshooting-active-directory-integration.md index cfbe3bc437..6af969680b 100644 --- a/src/pages/docs/security/authentication/active-directory/troubleshooting-active-directory-integration.md +++ b/src/pages/docs/security/authentication/active-directory/troubleshooting-active-directory-integration.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Troubleshooting Active Directory integration description: Information on troubleshooting common Active Directory integration issues. navOrder: 30 @@ -29,7 +29,7 @@ Octopus integrates with Active Directory to authenticate users as well as author Whilst you might have a team that you would think maps to a Distribution Group, this does not mean that [subscriptions](/docs/administration/managing-infrastructure/subscriptions) will send emails to the DG email address configured in Active Directory. Teams in Octopus are more synonymous with Security Groups and are used to determine accessibility. To send subscription emails to a Distribution Group, email address will require setting up a user with that email address and assigning them to the appropriate Octopus team. ::: -## How Active Directory Authentication Works +## How Active Directory authentication works Before troubleshooting Active Directory within Octopus Deploy, it is critical to understand how that integration works. @@ -170,7 +170,7 @@ The diagnostic logs can be viewed in the Event Viewer. Remember to reset the registry values once you're finished troubleshooting. ::: -## Read-Only domain controllers are not supported {#TroubleshootingActiveDirectoryintegration-Read-OnlyDomainControllersarenotsupported} +## Read-only domain controllers are not supported {#TroubleshootingActiveDirectoryintegration-Read-OnlyDomainControllersarenotsupported} Read-only Domain Controllers are not currently supported by Octopus. The .NET API we're using ignores read-only DCs. diff --git a/src/pages/docs/security/cve/shattered-and-octopus-deploy.md b/src/pages/docs/security/cve/shattered-and-octopus-deploy.md index 48779c470b..a7d43426fc 100644 --- a/src/pages/docs/security/cve/shattered-and-octopus-deploy.md +++ b/src/pages/docs/security/cve/shattered-and-octopus-deploy.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: SHA1 "Shattered" collision and Octopus Deploy description: How the SHA1 "Shattered" Collision impacts Octopus Deploy navOrder: 1 @@ -37,7 +37,7 @@ You'll want to check whether SHA1 is being used in other places. Common examples - Certificates used for authenticating with third party services, like Azure management certificates. - Certificates used to provide HTTPS for web sites that you deploy. -## Detecting SHA1 Certificates With PowerShell +## Detecting SHA1 certificates with PowerShell Given an `X509Certificate2` object, here's a PowerShell function that checks whether it uses SHA1: diff --git a/src/pages/docs/security/hardening-octopus.mdx b/src/pages/docs/security/hardening-octopus.mdx index 97bb067b9c..c38381f973 100644 --- a/src/pages/docs/security/hardening-octopus.mdx +++ b/src/pages/docs/security/hardening-octopus.mdx @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Hardening Octopus description: If you are hosting Octopus Deploy yourself, this guide will help you harden your network, host operating system, and Octopus Server itself. This includes things such as configuring malware protection (anti-virus), and utilizing allow lists. navOrder: 10 @@ -24,7 +24,7 @@ Reading this guide carefully before you begin will help you prepare all the secu Depending on your scenario you may want to relax or ignore these recommendations. -### Familiarize yourself With Octopus Server +### Familiarize yourself with Octopus Server If you consider networking, the host operating system, Microsoft SQL Server, and Octopus Server: it is very likely Octopus Server is the new kid on the block. You should consider downloading a free trial of Octopus Server and setting it up on your local machine so you are familiar with how it works. This will eliminate some potential surprises as you progress through the security hardening. diff --git a/src/pages/docs/tenants/tenant-deployment-faq.md b/src/pages/docs/tenants/tenant-deployment-faq.md index f75ed3912f..bcd0fe20e4 100644 --- a/src/pages/docs/tenants/tenant-deployment-faq.md +++ b/src/pages/docs/tenants/tenant-deployment-faq.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Multi-tenant deployments FAQ description: Questions we are often asked relating to multi-tenant deployments. navOrder: 90 @@ -76,11 +76,11 @@ Yes! Each project can control its interaction with tenants. By default the multi ![](/docs/tenants/images/multi-tenant-project-settings.png) ::: -## What is an "Untenanted Deployment"? Don't I Have to Choose a Tenant When Deploying my Project? {#Multi-tenantdeploymentsFAQ-Whatisanun-tenanteddeploymentDontIhavetochooseatenantwhendeployingmyproject?} +## What is an "untenanted deployment"? Don't I have to choose a Tenant when deploying my project? {#Multi-tenantdeploymentsFAQ-Whatisanun-tenanteddeploymentDontIhavetochooseatenantwhendeployingmyproject?} When you first enable multi-tenant deployments you won't have any tenants, and we don't want that to stop you from deploying your existing projects. Perhaps you are using an environment-per-tenant model and will migrate to tenants over a period of time, so some deployments will start to have a tenant whilst others do not. Essentially an "untenanted deployment" is the same kind of deployment Octopus always performed: *there is no tenant for this deployment*. When you deploy using a tenant Octopus includes variables from the tenant, and the selected tenant can impact which steps are run, which variable values are used, and which deployment targets are included, at your discretion. For more information refer to our [tenated deployments](/docs/tenants/tenant-creation/tenanted-deployments) section. -## Can I prevent "Untenanted Deployments" of a project? {#Multi-tenantdeploymentsFAQ-CanIpreventun-tenanteddeploymentsofaproject?} +## Can I prevent "untenanted deployments" of a project? {#Multi-tenantdeploymentsFAQ-CanIpreventun-tenanteddeploymentsofaproject?} Yes. Choose the **Require a tenant for all deployments** option in the Project settings. For more information refer to our [tenated deployments](/docs/tenants/tenant-creation/tenanted-deployments) section. diff --git a/src/pages/docs/tenants/tenant-infrastructure.md b/src/pages/docs/tenants/tenant-infrastructure.md index 1069784a3d..c75f161b4b 100644 --- a/src/pages/docs/tenants/tenant-infrastructure.md +++ b/src/pages/docs/tenants/tenant-infrastructure.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-04 title: Tenant Infrastructure description: Tenant infrastructure can be modeled in both a dedicated or shared way in Octopus using environments, deployment targets, and tenant tags. navOrder: 50 @@ -79,7 +79,7 @@ Shared hosting allows you to host the applications of multiple tenants on the sa This is very similar to the dedicated hosting scenario. Instead of choosing a single-tenant, you use a tenant tag to indicate these servers will be hosting applications for multiple tenants. -### Step 1: Create a Hosting tag set {#shared-hosting-create-tagset} +### Step 1: Create a hosting tag set {#shared-hosting-create-tagset} Firstly let's create a tag set to identify which tenants should be hosted on which shared server farms: diff --git a/src/shared-content/installation/migrate-from-windows-to-linux-container.include.md b/src/shared-content/installation/migrate-from-windows-to-linux-container.include.md index 9596937b35..8ce1c488a5 100644 --- a/src/shared-content/installation/migrate-from-windows-to-linux-container.include.md +++ b/src/shared-content/installation/migrate-from-windows-to-linux-container.include.md @@ -135,7 +135,7 @@ Linux: /opt/octopus/tentacle/Tentacle poll-server --server=httpa://your.octopus.server --apikey=API-MyApiKey --server-comms-port=10943 ``` -## Folder Paths +## Folder paths The Dockerfile runs the Octopus Server installer each time the Octopus Server Windows Container or Octopus Server Linux Container starts up. The installer runs a series of commands to configure Octopus Deploy. The installer will run the [path](/docs/octopus-rest-api/octopus.server.exe-command-line/path) command to update the paths to leverage the different folder structure. @@ -163,15 +163,15 @@ If you are running Octopus Server on Kubernetes, you will want to configure [per Due to how paths are stored, you cannot run an Octopus Server Windows Container and Octopus Server Linux Container simultaneously. It has to be all Windows or all Linux. ::: -## Database Connection String and Master Key +## Database connection string and master key Just as it is with Octopus Server running on Windows (VM or Container), you will need to provide the database connection string and master key to the Octopus Server Linux Container. The underlying database technology Octopus Deploy relies upon, SQL Server, has not changed. The connection string format is the same, so you shouldn't need to change anything. -## Server Thumbprint +## Server thumbprint The certificate backing the server thumbprint is stored in the database. Any tentacles that trust your existing server thumbprint will continue to work as-is when you move to the Octopus Server Linux Container. -## Outage Window +## Outage window Migrating to the Octopus Server Linux Container will require an outage window. The steps to perform during the outage window are: diff --git a/src/shared-content/octopus-recommendations/configure-project/project-configure.include.md b/src/shared-content/octopus-recommendations/configure-project/project-configure.include.md index 7bdc700d28..cfcf1932d1 100644 --- a/src/shared-content/octopus-recommendations/configure-project/project-configure.include.md +++ b/src/shared-content/octopus-recommendations/configure-project/project-configure.include.md @@ -1,5 +1,5 @@ -## Setting Up the Project +## Setting Up the project Let's configure a project using our recommended principles. We are going to be deploying a sample application called **OctoFX**. It's a small ASP.NET application with a database and a user interface. When we've completed this setup, we will have three projects: @@ -27,7 +27,7 @@ That group looks a little empty. Let's add in the three projects we discussed e Adding an image to your project is a useful way to set them apart from other projects visually. In addition to supporting .jpg and .png files, we also support .gif files; this means you can have an animated icon to add a little flair to your Octopus Deploy instance! ::: -### Sharing Variables Between Projects +### Sharing variables between projects We have the three projects set up, but we need to share some common variables between them. The SQL Server that we are deploying to, the database name and the application name are variables that come to mind. To accomplish this, we are going to create a library set for this specific application. @@ -45,7 +45,7 @@ It's also good to have a couple of other library variable sets to handle some no ![]/docs/shared-content/octopus-recommendations/configure-project/images/projectconfiguration-globalvariables.png) ::: -### OctoFX-Database Project +### OctoFX-Database project The first project we are going to configure is the **OctoFX-Database** project. If we follow the recommendations from earlier in this guide, we will assume that the SQL Server is running, but this database and the required user do not exist. We will add steps to check to see if the database and the user for the environment exist. If they don't, then we'll need to create them. Also, we want to build some trust in the process; we can do this by having a manual intervention for a DBA to approve. @@ -107,7 +107,7 @@ Finally, the database deployment process is complete. The process is relatively Don't spend too much time on the actual steps in the process. The major takeaways from this are that the database project is responsible for everything required to create, configure, and deploy a database. You might be using a different tool (like Redgate or RoundhousE) to do your deployments, which include some additional features. -### OctoFX-WebUI Project +### OctoFX-WebUI project Now it's time to move onto deploying the UI. Unlike the previous section, we won't walk through all the necessary steps you need to configure your project. We will follow the same rules as before; the project will do all the work required to deploy the web application as if it were for the first time. @@ -141,7 +141,7 @@ Take a look at our documentation on how to [configure a rolling deployment](/doc Just like with the database project, don't worry about the individual steps used. This is just an example to show you how we would configure a simple IIS web application deployment. The most important thing to take away from this section is the **WebUI** project is only concerned with deploying the **WebUI**, and it will work if it's being deployed for the first time, or the 100th time. -### OctoFX-TrafficCop Project +### OctoFX-TrafficCop project The traffic cop project is the coordinator. It knows the order to deploy the **OctoFX-Database** and **OctoFX-WebUI** projects. This project is useful for times when the entire **OctoFX** application needs to be deployed. This way, you can still have a single project to schedule and deploy later. diff --git a/src/shared-content/octopus-recommendations/project-recommendations.include.md b/src/shared-content/octopus-recommendations/project-recommendations.include.md index b1cf8f0595..b355fc55a4 100644 --- a/src/shared-content/octopus-recommendations/project-recommendations.include.md +++ b/src/shared-content/octopus-recommendations/project-recommendations.include.md @@ -15,7 +15,7 @@ We previously recommended creating a project for each component. We have found Like any recommendation, we have seen the extreme end of the spectrum, projects with 200+ steps deploying 80+ packages that take over an hour to deploy. That might be a good candidate to split up into smaller projects. However, you should ensure components are decoupled before making changes to the deployment process. Don't change how you deploy the application when components need to be deployed in a specific order, and failure to do so will cause showstopping bugs. First, focus on decoupling the components, then change how you deploy them. -## Leverage the Project Per Component pattern with decoupled components +## Leverage the project per component pattern with decoupled components We recommend the project per component pattern when those components are decoupled from one another. Returning to the previous web application example, adding a column to the database can still require changing the back-end and front-end. However, the back-end and front-end have the appropriate code to continue processing without errors when the column is not present. And the column isn't required to be populated in the database. diff --git a/src/shared-content/structured-configuration-variables.include.md b/src/shared-content/structured-configuration-variables.include.md index 9feef198c8..7d05f6099b 100644 --- a/src/shared-content/structured-configuration-variables.include.md +++ b/src/shared-content/structured-configuration-variables.include.md @@ -1,6 +1,7 @@ :::div{.info} This Configuration Feature was previously called JSON Configuration Variables. In version **2020.4.0**, we added support for YAML, XML, and Properties configuration file replacements and renamed the feature Structured Configuration Variables. + ::: With the **Structured Configuration Variables** feature you can define [variables](/docs/projects/variables) in Octopus for use in JSON, YAML, XML, and Properties configuration files of your applications. This lets you define different values based on the scope of the deployment. Settings are located using a structure-matching syntax, so you can update values nested inside structures such as JSON objects and arrays, YAML mappings and sequences, and XML elements and attributes. XPath is used for XML files, and similar expressions are used for the other formats. @@ -63,7 +64,7 @@ If the file doesn't parse as JSON, Octopus refers to its file extension. If it i If the file extension is not recognized (for example, a file with a `config` file extension), Octopus will try to parse the files using each of the supported formats until a matching format is found. -### Variable Replacement {#StructuredConfigurationVariablesFeature-VariableReplacement} +### Variable replacement {#StructuredConfigurationVariablesFeature-VariableReplacement} Octopus uses variable names to identify the structures that should be replaced within the target files. If a structure within a target file has a hierarchical location that matches a variable name, its content will be replaced with the variable's value. The hierarchical location is identified differently depending on the type of target file: @@ -377,7 +378,7 @@ Another option is to match and replace individual text nodes. A variable named ` just <text>mixed content ``` -### Replacing Attributes +### Replacing attributes Matching and replacing attribute values is supported with XPath. For example, assume the target file contains the following: @@ -434,7 +435,7 @@ CDATA sections can be replaced just like any other node by selecting them with t ``` -### Processing Instructions +### Processing instructions Processing instructions can be replaced using the XPath processing instruction selector like so: `/document/processing-instruction('xml-stylesheet')`. When replacing a processing instruction, it's not possible to replace the individual attributes. The whole processing instruction gets replaced with the supplied value. Take the following example: @@ -479,7 +480,7 @@ Given the following xml: ``` If you wanted to replace the value `localhost`, you could use the XPath expression of: `/*:server/*:properties/*:property[@name='host.name']/@value` -## Java Properties +## Java properties Given this example of a target properties file: diff --git a/src/shared-content/upgrade/upgrade-disable-targets-cloned-instance.include.md b/src/shared-content/upgrade/upgrade-disable-targets-cloned-instance.include.md index 112594db1b..4097dcc619 100644 --- a/src/shared-content/upgrade/upgrade-disable-targets-cloned-instance.include.md +++ b/src/shared-content/upgrade/upgrade-disable-targets-cloned-instance.include.md @@ -1,4 +1,4 @@ -### Disabling All Targets/Workers/Triggers/Subscriptions - Optional +### Disabling all Targets/Workers/Triggers/Subscriptions - optional Cloning an instance includes cloning all certificates. Assuming you are not using polling Tentacles, all the deployments will "just work." That is by design if the VM hosting Octopus Deploy is lost and you have to restore Octopus Deploy from a backup. diff --git a/src/shared-content/upgrade/upgrade-export-import-test-projects.include.md b/src/shared-content/upgrade/upgrade-export-import-test-projects.include.md index a0b5d967b8..de316b5f48 100644 --- a/src/shared-content/upgrade/upgrade-export-import-test-projects.include.md +++ b/src/shared-content/upgrade/upgrade-export-import-test-projects.include.md @@ -1,4 +1,4 @@ -### Export/Import subset of projects using Export/Import Projects feature +### Export/import subset of projects using export/import projects feature The Export/Import Projects feature added in **Octopus Deploy 2021.1** can be used to export/import projects to a test instance. Please see the up to date [documentation](/docs/projects/export-import) to see what is included. diff --git a/src/shared-content/upgrade/upgrade-inplace-upgrade.include.md b/src/shared-content/upgrade/upgrade-inplace-upgrade.include.md index abdcfdc738..8a8470cd9c 100644 --- a/src/shared-content/upgrade/upgrade-inplace-upgrade.include.md +++ b/src/shared-content/upgrade/upgrade-inplace-upgrade.include.md @@ -16,7 +16,7 @@ The Windows Service is split across multiple folders to make upgrading easy and Installing a newer version of Octopus Deploy is as simple as running MSI and following the wizard. The MSI will copy all the binaries to the install location. Once the MSI is complete, it will automatically launch the `Octopus Manager`. -### Validation Checks +### Validation checks Octopus Deploy will perform validation checks before upgrading the database. These validation checks include (but are not limited to): @@ -25,6 +25,6 @@ Octopus Deploy will perform validation checks before upgrading the database. Th If the validation checks fail, don't worry, install the [previously installed version of Octopus Deploy](https://octopus.com/downloads/previous), and you will be back up and running quickly. -### Database Upgrades +### Database upgrades Each release of Octopus Deploy contains 0 to N database scripts to upgrade the database. The scripts are run in a transaction; when an error occurs, the transaction is rolled back. If a rollback does happen, gather the logs and send them to [support@octopus.com](mailto:support@octopus.com) for troubleshooting. You can install the previous version to get your CI/CD pipeline back up and running. \ No newline at end of file diff --git a/src/shared-content/upgrade/upgrade-octopus-backup-database.include.md b/src/shared-content/upgrade/upgrade-octopus-backup-database.include.md index e8e03fdc81..b9905dfa8f 100644 --- a/src/shared-content/upgrade/upgrade-octopus-backup-database.include.md +++ b/src/shared-content/upgrade/upgrade-octopus-backup-database.include.md @@ -1,4 +1,4 @@ -### Maintenance Mode +### Maintenance mode Maintenance mode prevents non-Octopus Administrators from doing deployments or making changes. To enable maintenance mode go to **Configuration ➜ Maintenance** and click the button `Enable Maintenance Mode`. To disable maintenance mode, go back to the same page and click on `Disable Maintenance Mode`. diff --git a/src/shared-content/upgrade/upgrade-restore-backup.include.md b/src/shared-content/upgrade/upgrade-restore-backup.include.md index f96741a2c0..eb313898cd 100644 --- a/src/shared-content/upgrade/upgrade-restore-backup.include.md +++ b/src/shared-content/upgrade/upgrade-restore-backup.include.md @@ -1,3 +1,3 @@ -### Restore Backup of database +### Restore backup of database Use SQL Server Management Studio's (SSMS) built-in restore backup functionality. SSMS provides a wizard to make this process as pain-free as possible. Be sure to consult a DBA or read up on [Microsoft's Documentation](https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-database-to-a-new-location-sql-server?view=sql-server-ver15). \ No newline at end of file diff --git a/src/shared-content/upgrade/upgrade-rollback-folders.include.md b/src/shared-content/upgrade/upgrade-rollback-folders.include.md index 3dc14d7d64..f605109b04 100644 --- a/src/shared-content/upgrade/upgrade-rollback-folders.include.md +++ b/src/shared-content/upgrade/upgrade-rollback-folders.include.md @@ -1,4 +1,4 @@ -### Restore Octopus Folders +### Restore Octopus folders Octopus Deploy expects the artifacts, packages, tasklog, and event export folders to be in a specific format. The best chance of success is to: From 2b9a73785a0998e75b14831aef82f29c26d67f1d Mon Sep 17 00:00:00 2001 From: Samuel Jaeschke Date: Thu, 5 Oct 2023 13:32:01 +1030 Subject: [PATCH 16/49] Update modified date --- src/pages/docs/infrastructure/workers/dynamic-worker-pools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md index ccdb8dadfa..e01399394b 100644 --- a/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md +++ b/src/pages/docs/infrastructure/workers/dynamic-worker-pools.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-05 title: Dynamic Worker pools description: Dynamic Worker pools are used in our cloud product to dynamically create and assign workers to running tasks. This page describes how dynamic worker pools work. navOrder: 50 From a9b252ba17b483e9c3a522b102fef83032c3cfcb Mon Sep 17 00:00:00 2001 From: Nelson Susanto Date: Wed, 13 Sep 2023 16:17:26 +1000 Subject: [PATCH 17/49] First draft --- .../tenant-creation/connecting-projects.md | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/pages/docs/tenants/tenant-creation/connecting-projects.md b/src/pages/docs/tenants/tenant-creation/connecting-projects.md index 787e8b1a5e..56767c8999 100644 --- a/src/pages/docs/tenants/tenant-creation/connecting-projects.md +++ b/src/pages/docs/tenants/tenant-creation/connecting-projects.md @@ -9,25 +9,31 @@ navOrder: 20 By connecting tenants to projects, you can control which projects will be deployed into which environments for each tenant. +:::div{.info} +The project connection feature was improved to allow bulk selection in Octopus Deploy **2023.4**. If you are running an older version of Octopus you will see a different dialog which will only allow you to select a single project. +::: + 1. Navigate to your tenant. -2. Click on the **CONNECT PROJECT** button. +2. Click on the **CONNECT PROJECTS** button. ![](/docs/tenants/tenant-creation/images/multi-tenant-connect-project.png) -3. Select the project you want to connect to the tenant. If a warning is shown, click the **ENABLE TENANTED DEPLOYMENTS** button, which will enable the multi-tenant deployment features for the project. This will configure the project to allow deployments *with* or *without* a tenant. +3. Choose the projects you want to connect to your tenant, by clicking any project in the left-hand panel of the wizard. Click the - button of a project in the right-hand panel to deselect that project. ![](/docs/tenants/tenant-creation/images/multi-tenant-project.png) -4. Now select the environments to allow tenanted deployments to, and click the **ADD CONNECTION** button. +4. Once you have selected the projects you want to connect, click **NEXT**. +5. Choose the [environments](/docs/infrastructure/environments) you want the tenant to be connected to for each project. You can select just one or two from the drop-down menu, or click **Assign all available environments** to select all available environments. + +:::div{.info} +Not seeing the environment you want? Make sure at least one lifecycle used by your project includes that environment. +::: - ![](/docs/tenants/tenant-creation/images/multi-tenant-connect-environments.png) +6. A preview of the selected projects and environments is shown in the Connection preview panel. The selected environments will be assigned to each project based on whether they are part of any lifecycle in the project. If an environment is not part of any lifecycle in the project, it will not be assigned to the project. +7. Click **CONNECT PROJECTS** You can connect each tenant to any number of projects and for each project, any combination of environments that can be targeted by each project. This gives you the most flexibility when designing your multi-tenant deployments. - You can offer specific projects to some tenants and not to others. - You can also provide most of your tenants with a single environment while offering specific customers extra environments. For example, you could give particular customers with a test/staging/acceptance environment where they can test new releases before upgrading their production environment. -:::div{.info} - -Not seeing the environment you want? Make sure at least one lifecycle used by your project includes that environment. -::: \ No newline at end of file From cf6c30451b51bdceea2b67106a274486c376915f Mon Sep 17 00:00:00 2001 From: Nelson Susanto Date: Thu, 5 Oct 2023 14:58:52 +1100 Subject: [PATCH 18/49] Update docs with new projects bulk connection --- .../images/multi-tenant-connect-project.png | Bin 81371 -> 0 bytes .../multi-tenant-connect-projects-dialog.png | Bin 0 -> 71982 bytes .../images/multi-tenant-connect-projects.png | Bin 0 -> 55780 bytes .../images/multi-tenant-project.png | Bin 26991 -> 0 bytes .../tenant-creation/connecting-projects.md | 6 +++--- .../tenant-creation/tenanted-deployments.md | 6 +----- 6 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 public/docs/tenants/tenant-creation/images/multi-tenant-connect-project.png create mode 100644 public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects-dialog.png create mode 100644 public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects.png delete mode 100644 public/docs/tenants/tenant-creation/images/multi-tenant-project.png diff --git a/public/docs/tenants/tenant-creation/images/multi-tenant-connect-project.png b/public/docs/tenants/tenant-creation/images/multi-tenant-connect-project.png deleted file mode 100644 index 965fafa47c6c28922f79c8379006bf2e657308b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81371 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 JTsiaG{|64c_@e*- diff --git a/public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects-dialog.png b/public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..57dc758c79dfeae1df4d36148859bb302926743e GIT binary patch literal 71982 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

kh*b6_ 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 literal 0 HcmV?d00001 diff --git a/public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects.png b/public/docs/tenants/tenant-creation/images/multi-tenant-connect-projects.png new file mode 100644 index 0000000000000000000000000000000000000000..d7353cf66a73f7c862c002994c729c5f38446c69 GIT binary patch literal 55780 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 literal 0 HcmV?d00001 diff --git a/public/docs/tenants/tenant-creation/images/multi-tenant-project.png b/public/docs/tenants/tenant-creation/images/multi-tenant-project.png deleted file mode 100644 index 1c402460afc13e042a058dd4a62ea7746062fc0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26991 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 diff --git a/src/pages/docs/tenants/tenant-creation/connecting-projects.md b/src/pages/docs/tenants/tenant-creation/connecting-projects.md index 56767c8999..5d3bec3060 100644 --- a/src/pages/docs/tenants/tenant-creation/connecting-projects.md +++ b/src/pages/docs/tenants/tenant-creation/connecting-projects.md @@ -10,17 +10,17 @@ navOrder: 20 By connecting tenants to projects, you can control which projects will be deployed into which environments for each tenant. :::div{.info} -The project connection feature was improved to allow bulk selection in Octopus Deploy **2023.4**. If you are running an older version of Octopus you will see a different dialog which will only allow you to select a single project. +The project connection feature was updated to allow bulk selection in Octopus Deploy **2023.4**. If you are running an older version of Octopus the dialog will only allow selecting a single project at a time. ::: 1. Navigate to your tenant. 2. Click on the **CONNECT PROJECTS** button. - ![](/docs/tenants/tenant-creation/images/multi-tenant-connect-project.png) + ![](/docs/tenants/tenant-creation/images/multi-tenant-connect-projects.png) 3. Choose the projects you want to connect to your tenant, by clicking any project in the left-hand panel of the wizard. Click the - button of a project in the right-hand panel to deselect that project. - ![](/docs/tenants/tenant-creation/images/multi-tenant-project.png) + ![](/docs/tenants/tenant-creation/images/multi-tenant-connect-projects-dialog.png) 4. Once you have selected the projects you want to connect, click **NEXT**. 5. Choose the [environments](/docs/infrastructure/environments) you want the tenant to be connected to for each project. You can select just one or two from the drop-down menu, or click **Assign all available environments** to select all available environments. diff --git a/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md b/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md index 3c7d0599b6..d8edae8118 100644 --- a/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md +++ b/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md @@ -15,11 +15,7 @@ You can change the setting for tenanted deployments for a project by navigating ![](/docs/tenants/tenant-creation/images/multi-tenant-project-settings.png) ::: -It's also possible to enable tenanted deployments when [connecting a tenant to a project](/docs/tenants/tenant-creation/connecting-projects) from the tenant screen: - -:::figure -![](/docs/tenants/tenant-creation/images/multi-tenant-project.png) -::: +Tenanted deployments will be enabled when [connecting tenants to a project](/docs/projects/tenants/bulk-connection). ## Tenanted and Untenanted deployments {#tenanted-and-untenanted-deployments} From 4277de385fcd08261a6c7119f67aea54eefd1999 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Thu, 5 Oct 2023 08:17:57 +0100 Subject: [PATCH 19/49] Update connecting-projects.md --- src/pages/docs/tenants/tenant-creation/connecting-projects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/tenants/tenant-creation/connecting-projects.md b/src/pages/docs/tenants/tenant-creation/connecting-projects.md index 5d3bec3060..75554a57e7 100644 --- a/src/pages/docs/tenants/tenant-creation/connecting-projects.md +++ b/src/pages/docs/tenants/tenant-creation/connecting-projects.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-05 title: Connecting projects description: By connecting tenants to projects, you can control which projects will be deployed into which environments for each tenant. navOrder: 20 From 22fd8d4f791f6610e300525816d453306fe836db Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Thu, 5 Oct 2023 08:18:49 +0100 Subject: [PATCH 20/49] Update tenanted-deployments.md --- src/pages/docs/tenants/tenant-creation/tenanted-deployments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md b/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md index d8edae8118..c1cb2f492e 100644 --- a/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md +++ b/src/pages/docs/tenants/tenant-creation/tenanted-deployments.md @@ -1,7 +1,7 @@ --- layout: src/layouts/Default.astro pubDate: 2023-01-01 -modDate: 2023-01-01 +modDate: 2023-10-05 title: Tenanted deployments description: Control how the multi-tenancy feature in Octopus is used in your Projects. navOrder: 10 From a6f66fb88bcdc81d84a0f39a579471d489467f05 Mon Sep 17 00:00:00 2001 From: Steve Fenton <99181436+steve-fenton-octopus@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:20:55 +0100 Subject: [PATCH 21/49] Update src/pages/docs/deployments/java/index.md --- src/pages/docs/deployments/java/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/deployments/java/index.md b/src/pages/docs/deployments/java/index.md index e8e91b567f..dab9ae9dc3 100644 --- a/src/pages/docs/deployments/java/index.md +++ b/src/pages/docs/deployments/java/index.md @@ -89,7 +89,7 @@ The target machine must have Java 1.8 installed, and the `java` executable must The `Deploy to Tomcat via Manager` step takes advantage of the [Manager application](https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html) shipped with Tomcat to deploy Java applications. The following steps describe the process of deploying a web application (a WAR package) to Tomcat through Octopus Deploy. -### 1. Configure Tomcat{#configure_tomcat} +### 1. Configure Tomcat {#configure_tomcat} Tomcat needs to be configured with a user that Octopus can use to log into the Manager API. From a2448d1494d4b9cb9b5940152f180736724fee99 Mon Sep 17 00:00:00 2001 From: Frank Lin Date: Mon, 9 Oct 2023 15:52:26 +1000 Subject: [PATCH 22/49] Copy Ubuntu EOL --- .../windows-2019-end-of-life.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/pages/docs/infrastructure/workers/dynamic-worker-pools/windows-2019-end-of-life.md diff --git a/src/pages/docs/infrastructure/workers/dynamic-worker-pools/windows-2019-end-of-life.md b/src/pages/docs/infrastructure/workers/dynamic-worker-pools/windows-2019-end-of-life.md new file mode 100644 index 0000000000..bb7d6f8268 --- /dev/null +++ b/src/pages/docs/infrastructure/workers/dynamic-worker-pools/windows-2019-end-of-life.md @@ -0,0 +1,96 @@ +--- +layout: src/layouts/Default.astro +pubDate: 2023-01-01 +modDate: 2023-01-01 +title: Ubuntu 18.04 End-of-life +description: Describing the deprecation process of Ubuntu 18.04 Dynamic Workers. +navOrder: 50 +hideInThisSection: true +hideInThisSectionHeader: true +--- + +:::div{.warning} +Ubuntu 18.04 images are no longer available as of 3 April 2023. The details below are provided for historical reference. +::: + + +Our Ubuntu dynamic workers are being upgraded to use Ubuntu 22.04, this upgrade will result in breaking changes for users of gcloud CLI and users of .NET Core 2.1/3.1 and Ubuntu 18.04 capabilities that are not offered by the updated replacements. + +## What is changing? + +Due to the deprecation of Ubuntu 18.04, we are upgrading our dynamic workers to use Ubuntu 22.04. This change has also required upgrades of: +* gcloud CLI from 339.0.0 to 367.0.0; and +* .NET Core 2.1/3.1 to .NET 6. + + +## Who will be impacted? + +Users of Octopus Cloud utilizing Ubuntu workers and running custom scripts or community steps may be impacted as there are breaking changes between Ubuntu 18.04 and Ubuntu 22.04, and breaking changes between .NET Core 2.1/3.1 and .NET 6. + +Cloud customers impacted by the GCloud CLI update will be those with a deployment process which: + +* Has a `Run gcloud in a Script` step, which runs on the `Hosted Ubuntu` Worker Pool, which does not use an `execution container`, and the script contains calls to `gcloud`; **OR** +* Has a `Run a Script` step, which runs on the `Hosted Ubuntu` Worker Pool, and the script contains calls to `gcloud`. + +### What do I need to do? + +Any impacted custom scripts will need to be updated to use Ubuntu 22.04 and tested to ensure your deployment process has not been impacted by the breaking changes. To mitigate the risk in this process we will be releasing the updated dynamic worker before the deprecation date so users can test against the new workers prior to migration. Please see the timeline below for the details. + +**Note:** All Octopus Deploy steps will work under Ubuntu 22.04 but some community steps may be impacted. + +## Timeline + +**Update 7 February 2023** + +The `Ubuntu 22.04` image can be found within the configuration of a worker pool: + +:::figure +![Ubuntu 22.04 in worker image list](/docs/infrastructure/workers/dynamic-worker-pools/images/ubuntu-2204-worker-image-list.png) +::: + +**Octopus preparation** + +| Date | Details | +|---------------|:--------------------------------------------------------------| +| Q4 2022 | Octopus will produce and test an Ubuntu 22.04 worker image | +| Jan 2023 | Internal testing of existing tooling to confirm compatibility | + + +**Customer action required** + +| Date | Details | +|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1 Feb 2023 | Ubuntu 22.04 dynamic worker will be made available for customers.

  • Customers should test their impacted deployments and runbooks on an Ubuntu 22.04 worker with the aim of completing testing by the 15th of March 2023
| +| 15 Mar 2023 | Octopus will switch over the default "Hosted Ubuntu" worker pool to use the Ubuntu 22.04 worker.