Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Octopus Deploy release and deploy workflow #2651

Merged
merged 8 commits into from
Dec 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions deployments/octopusdeploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by separate terms of service,
# privacy policy, and support documentation.
#
# This workflow will build and publish a Docker container which is then deployed through Octopus Deploy.
#
# The build job in this workflow currently assumes that there is a Dockerfile that generates the relevant application image.
# If required, this job can be modified to generate whatever alternative build artifact is required for your deployment.
#
# This workflow assumes you have already created a Project in Octopus Deploy.
# For instructions see https://octopus.com/docs/projects/setting-up-projects
#
# To configure this workflow:
#
# 1. Decide where you are going to host your image.
# This template uses the GitHub Registry for simplicity but if required you can update the relevant DOCKER_REGISTRY variables below.
#
# 2. Create and configure an OIDC credential for a service account in Octopus.
# This allows for passwordless authentication to your Octopus instance through a trust relationship configured between Octopus, GitHub and your GitHub Repository.
# https://octopus.com/docs/octopus-rest-api/openid-connect/github-actions
#
# 3. Configure your Octopus project details below:
# OCTOPUS_URL: update to your Octopus Instance Url
# OCTOPUS_SERVICE_ACCOUNT: update to your service account Id
# OCTOPUS_SPACE: update to the name of the space your project is configured in
# OCTOPUS_PROJECT: update to the name of your Octopus project
# OCTOPUS_ENVIRONMENT: update to the name of the environment to recieve the first deployment


name: 'Build and Deploy to Octopus Deploy'

on:
push:
branches:
- '$default-branch'

jobs:
build:
name: Build
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
env:
DOCKER_REGISTRY: ghcr.io # TODO: Update to your docker registry uri
DOCKER_REGISTRY_USERNAME: ${{ github.actor }} # TODO: Update to your docker registry username
DOCKER_REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }} # TODO: Update to your docker registry password
outputs:
image_tag: ${{ steps.meta.outputs.version }}
steps:
- uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0

- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ env.DOCKER_REGISTRY_USERNAME }}
password: ${{ env.DOCKER_REGISTRY_PASSWORD }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository }}
tags: type=semver,pattern={{version}},value=v1.0.0-{{sha}}

- name: Build and push Docker image
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
deploy:
name: Deploy
permissions:
id-token: write
runs-on: ubuntu-latest
needs: [ build ]
env:
OCTOPUS_URL: 'https://your-octopus-url' # TODO: update to your Octopus Instance url
OCTOPUS_SERVICE_ACCOUNT: 'your-service-account-id' # TODO: update to your service account Id
OCTOPUS_SPACE: 'your-space' # TODO: update to the name of the space your project is configured in
OCTOPUS_PROJECT: 'your-project' # TODO: update to the name of your Octopus project
OCTOPUS_ENVIRONMENT: 'your-environment' # TODO: update to the name of the environment to recieve the first deployment

steps:
- name: Login to Octopus Deploy
uses: OctopusDeploy/login@34b6dcc1e86fa373c14e6a28c5507d221e4de629 #v1.0.2
with:
server: '${{ env.OCTOPUS_URL }}'
service_account_id: '${{ env.OCTOPUS_SERVICE_ACCOUNT }}'

- name: Create Release
id: create_release
uses: OctopusDeploy/create-release-action@fea7e7b45c38c021b6bc5a14bd7eaa2ed5269214 #v3.2.2
with:
project: '${{ env.OCTOPUS_PROJECT }}'
space: '${{ env.OCTOPUS_SPACE }}'
packages: '*:${{ needs.build.outputs.image_tag }}'

- name: Deploy Release
uses: OctopusDeploy/deploy-release-action@b10a606c903b0a5bce24102af9d066638ab429ac #v3.2.1
with:
project: '${{ env.OCTOPUS_PROJECT }}'
space: '${{ env.OCTOPUS_SPACE }}'
release_number: '${{ steps.create_release.outputs.release_number }}'
environments: ${{ env.OCTOPUS_ENVIRONMENT }}
7 changes: 7 additions & 0 deletions deployments/properties/octopusdeploy.properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Build and Deploy with Octopus Deploy",
"description": "Build a docker container, create a release in Octopus Deploy and deploy it to your environment.",
"creator": "Octopus Deploy",
"iconName": "octopusdeploy",
"categories": ["Deployment", "Containers", "Dockerfile"]
}
11 changes: 11 additions & 0 deletions icons/octopusdeploy.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading