Stylized version of Octopus steps in Codefresh UI

Announcing Codefresh steps for Octopus Deploy

Susan Pan

We're excited to announce the first set of official Codefresh steps for Octopus Deploy. Codefresh is a modern CI/CD platform built on top of Docker. Its CI product, Codefresh Pipelines, comprises customizable workflows made from a series of steps, each performing its own action.

In this post, I walk you through the process of creating a release and deploying it to an Octopus environment through Codefresh Pipelines.

What are Codefresh steps?

Codefresh steps are the building blocks for creating Codefresh pipelines. You can chain them together in any sequence. You execute each step in the context of its own Docker container, with a default workspace that's shared between all steps in the pipeline. The shared volume contains data that's accessible to all steps in the pipeline, so files you use and access in one step can be used in all subsequent steps.

All our Octopus Deploy steps use and execute inside the octopus-cli Docker container. Within each step, we use the Octopus CLI to interact with your Octopus instance to create, push, and deploy.

We're thrilled to introduce the addition of the following steps to the Codefresh steps marketplace:

Step configuration

Each step needs the following details to run:

  • An Octopus instance URL
  • A space name

We recommend using Codefresh variables to set these values, so that each step can use the same variable value. For sensitive values like API keys, remember to encrypt your variable to avoid security vulnerabilities.

Example workflow

The following example Codefresh workflow is a common scenario that customers of Octopus Deploy may be familiar with. For this example, we'll configure the following steps:

  • Clone a Git repository
  • Create a zip of the repository
  • Push the package to the Octopus Deploy built-in feed
  • Create a new release in project Example Project with the pushed package
  • Deploy the created release to environment Development

Since each Codefresh step calls the Octopus CLI, each step's required and optional arguments should follow the CLI's required and optional parameters quite closely. You can find documentation on each individual step by searching for the step in Codefresh's step marketplace.

In the following example, we split the steps into 2 stages:

  • Build and push
  • Deploy

These stages help with the pipeline's visualization, but have no effect on the order of execution of the steps. By default, the steps should flow sequentially from the first defined in the YAML file to the last.

version: "1.0"

stages:
  - "build and push"
  - "deploy"

steps:
  clone:
    title: "Cloning repository"
    type: "git-clone"
    stage: "build and push"
    repo: "https://github.com/repoName/exampleRepository"
    revision: "main"
    working_directory: "/codefresh/volume"
    credentials:
    username: ${{GITHUB_USERNAME}}
    password: ${{GITHUB_PASSWORD}}

create-package:
    title: "Create package"
    type: octopusdeploy-create-package
    stage: "build and push"
    arguments:
    ID: "Hello"
    VERSION: "1.0.0-${{CF_BUILD_ID}}"
    BASE_PATH: "/codefresh/volume"
    OUT_FOLDER: "/codefresh/volume"

push-package:
    title: "Push package"
    type: octopusdeploy-push-package
    stage: "build and push"
    arguments:
    OCTOPUS_API_KEY: ${{OCTOPUS_API_KEY}}
    OCTOPUS_URL: ${{OCTOPUS_URL}}
    OCTOPUS_SPACE: "Spaces-42"
    PACKAGES:
        - "/codefresh/volume/Hello.1.0.0-${{CF_BUILD_ID}}.zip"
    OVERWRITE_MODE: 'overwrite'

  create-release:
    type: octopusdeploy-create-release
    title: "Create release"
    stage: "deploy"
    arguments:
    OCTOPUS_API_KEY: ${{OCTOPUS_API_KEY}}
    OCTOPUS_URL: ${{OCTOPUS_URL}}
    OCTOPUS_SPACE: "Spaces-42"
    PROJECT: "Demo Project"
    RELEASE_NUMBER: "1.0.0-${{CF_BUILD_ID}}"
    PACKAGES:
    - "Hello:1.0.0-${{CF_BUILD_ID}}"
    RELEASE_NOTES: This is a release note

  deploy:
    type: octopusdeploy-deploy-release
    title: "Deploy release"
    stage: "deploy"
    arguments:
    OCTOPUS_API_KEY: ${{OCTOPUS_API_KEY}}
    OCTOPUS_URL: ${{OCTOPUS_URL}}
    OCTOPUS_SPACE: "Spaces-42"
    PROJECT: "Demo Project"
    RELEASE_NUMBER: "1.0.0-${{CF_BUILD_ID}}"
    ENVIRONMENTS:
        - "Development"

For the last step in the workflow, we defined a step with the name deploy. This step uses one of our Codefresh Octopus Deploy steps - the octopusdeploy-deploy-release step.

We defined an Octopus instance URL and API key using Codefresh variables, and are passing them in as arguments using the Codefresh variable substitution syntax.

The output of the pipeline build running in Codefresh looks something like this:

Example pipeline workflow with Octopus Deploy steps
Example pipeline workflow with Octopus Deploy steps

Step output values

Along with sharing files between steps using the shared volume, each step also produces outputs. Any subsequent step in the pipeline can then access these output values.

Step Output Description
octopusdeploy-login
octopusdeploy-create-package FILE JSON object with property ‘path' for the path to the created zip file
octopusdeploy-push-package - This step has no output.
octopusdeploy-create-release RELEASE JSON object with channel and version for the created release
octopusdeploy-deploy-release DEPLOYMENTS JSON array of objects with deploymentId and serverTaskId for created deployments
octopusdeploy-deploy-release-tenanted DEPLOYMENTS JSON array of objects with deploymentId and serverTaskId for created deployments
octopusdeploy-run-runbook DEPLOYMENTS JSON array of objects with runbookId and serverTaskId for created runbooks
octopusdeploy-push-build-information - This step has no output.

Conclusion

Codefresh steps for Octopus Deploy are yet another way to streamline your processes. Customize your build pipeline through Codefresh and watch your Octopus deployments fly through the door.

Happy deployments!

Loading...