Use GitHub and Octopus together to manage your most complex deployment scenarios

  • Deploy to the cloud, data centers, and on-premises servers
  • Visualize your deployments at a glance
  • Deliver multiple instances of your software without extra effort
  • Manage secrets and shared variables

Integrate seamlessly

Octopus Deploy and GitHub can be connected easily and securely, with no shared credentials needed.

  • OpenID Connect allows your GitHub Actions workflows to communicate with Octopus Deploy without needing to share GitHub credentials with Octopus.
  • The Octopus Deploy GitHub app enables deep integration without managing Octopus API keys in GitHub. (Due for release in early 2024.)
GitHub logo and Octopus Deploy logo with connecting arrows

Deploy to the cloud, data centers, and on-premises servers

Octopus makes deployments simple and consistent wherever you deliver software.

  • Define your process once and deploy routinely to any cloud, service, on-premises, or hybrid platforms.
  • Spend less time debugging environmental differences and more time building and delivering software.

Visualize your deployments at a glance

The Octopus dashboard provides a visual summary of your releases.

  • See the stage, environment, and state of each deployment across multiple repositories in one place.
  • Dive into the details of your projects and releases from the bird's-eye view of your dashboard.
Screenshot of Octopus Deploy release dashboard
Multi Tenancy deployments UI example

Deliver multiple instances of your software without extra effort

Octopus Deploy’s built-in Tenants feature makes intricate deployments easier to scale.

  • Build out from and use the same process for all your projects’ deployments.
  • Manage your tenanted deployments however it suits your teams, projects, and customers.

Manage secrets and shared variables

Securely manage your deployment process and eliminate hard-coded configuration settings

  • Apply the same deployment process across your environments using variables.
  • Secure your passwords and other secrets in Octopus or a third-party vault, and reference them in your processes.

Add Octopus to your GitHub Workflow

name: Install Octopus CLI 🐙

uses: OctopusDeploy/install-octopus-cli-action@v3

with:

version: '*'

name: Install Octopus CLI 🐙

uses: OctopusDeploy/install-octopus-cli-action@v3

with:

version: '*'

name: Push a package to Octopus Deploy 🐙

uses: OctopusDeploy/push-package-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

packages: |

package1.tar.gz

package2.zip

packages/**/*.zip

name: Run a runbook in Octopus Deploy 🐙

uses: OctopusDeploy/run-runbook-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'Test Project'

runbook: 'Test Runbook'

environments: [ |

'Dev'

'Test']

name:Create a release in Octopus Deploy 🐙

uses: OctopusDeploy/create-release-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

name: Push build information to Octopus Deploy 🐙

uses: OctopusDeploy/push-build-information-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

packages: | ''

version: ''

name: Await task in Octopus Deploy 🐙

uses: OctopusDeploy/await-task-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

server_task_id: {{ steps.some_previous_deployment_step.outputs.server_tasks[0].server_task_id }}

name: Create a NuGet package 🐙

uses: OctopusDeploy/create-nuget-package-action@v3

with:

package_id: 'DemoPackage'

version: '1.0.0'

output_folder: 'packaging'

base_path: reports

files: |

**/*.*

nuspec_description: package description

nuspec_authors: |

author 1

author 2

nuspec_release_notes: |

This is a multiline

release note

name: Create a Zip package 🐙

uses: OctopusDeploy/create-zip-package-action@v3

with:

package_id: 'DemoPackage'

version: '1.0.0'

output_folder: './packaging'

base_path: reports

files: |

**/*.*

name: Deploy a release in Octopus Deploy 🐙

uses: OctopusDeploy/deploy-release-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

release_version: '1.0.0'

environments: [ |

'Dev'

'Test']

variables:

'Foo: Bar'

'Fizz: Buzz']

name: Deploy a release in Octopus Deploy 🐙

uses: OctopusDeploy/deploy-release-tenanted-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

release_version: '1.0.0'

environment: 'Dev'

tenants: [ |

'Some Tenant A'

'Some Tenant B']

tenant_tags: [ |

'setA/someTagB'

'setC/someTagD']

variables: [ |

'Foo: Bar'

'Fizz: Buzz']

Install Octopus CLI

name: Install Octopus CLI 🐙

uses: OctopusDeploy/install-octopus-cli-action@v3

with:

version: '*'

Install Octopus CLI
Push Package

name: Push a package to Octopus Deploy 🐙

uses: OctopusDeploy/push-package-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

packages: |

package1.tar.gz

package2.zip

packages/**/*.zip

Go to Action: Push Package
Run Runbook

name: Run a runbook in Octopus Deploy 🐙

uses: OctopusDeploy/run-runbook-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'Test Project'

runbook: 'Test Runbook'

environments: [ |

'Dev'

'Test']

Go to Action in the Marketplace
Create Release

name:Create a release in Octopus Deploy 🐙

uses: OctopusDeploy/create-release-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

Go to Action: Create Release
Push Build Information

name: Push build information to Octopus Deploy 🐙

uses: OctopusDeploy/push-build-information-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

packages: | ''

version: ''

Go to Action: Push Build Information
Await Task

name: Await task in Octopus Deploy 🐙

uses: OctopusDeploy/await-task-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

server_task_id: {{ steps.some_previous_deployment_step.outputs.server_tasks[0].server_task_id }}

Go to Action: Await Task
Create NuGet Package

name: Create a NuGet package 🐙

uses: OctopusDeploy/create-nuget-package-action@v3

with:

package_id: 'DemoPackage'

version: '1.0.0'

output_folder: 'packaging'

base_path: reports

files: |

**/*.*

nuspec_description: package description

nuspec_authors: |

author 1

author 2

nuspec_release_notes: |

This is a multiline

release note

Create NuGet Package
Create Zip Package

name: Create a Zip package 🐙

uses: OctopusDeploy/create-zip-package-action@v3

with:

package_id: 'DemoPackage'

version: '1.0.0'

output_folder: './packaging'

base_path: reports

files: |

**/*.*

Go to Action: Create Zip Package

Deploy Release

name: Deploy a release in Octopus Deploy 🐙

uses: OctopusDeploy/deploy-release-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

release_version: '1.0.0'

environments: [ |

'Dev'

'Test']

variables:

'Foo: Bar'

'Fizz: Buzz'] Go to Action: Deploy Release

Deploy Tenanted Release

name: Deploy a release in Octopus Deploy 🐙

uses: OctopusDeploy/deploy-release-tenanted-action@v3

env:

OCTOPUS_API_KEY: ${{ secrets.API_KEY }}

OCTOPUS_SPACE: 'Default Space'

OCTOPUS_URL: ${{ secrets.SERVER }}

with:

project: 'MyProject'

release_version: '1.0.0'

environment: 'Dev'

tenants: [ |

'Some Tenant A'

'Some Tenant B']

tenant_tags: [ |

'setA/someTagB'

'setC/someTagD']

variables: [ |

'Foo: Bar'

'Fizz: Buzz']

Go to Action: Deploy Tenanted Release

See how our actions work