Jaws Deploy is your go-to platform for streamlining continuous deployments, making it easy to orchestrate releases across environments without the hassle of complex setups. Whether you're handling on-prem servers or cloud targets, Jaws focuses on the essentials: reliable automation, reusable logic, and seamless CI/CD integration—all at a fraction of the cost of heavier tools.
If you're coming from a CI tool like TeamCity or Jenkins, Jaws picks up where they leave off, handling the "deploy" part with features like variable scoping and lifecycle progression. Let's get you up and running quickly.
Head to https://app.jawsdeploy.net/signup to sign up—it's free to start with the Starter plan. Once logged in, you'll land in your default "Main" workspace. This is your isolated space for grouping projects, machines, and variables. If you need more workspaces (e.g., for different teams), create them under Settings.
This shows the main dashboard with projects listed, recent deployments, and activity trends. Use the search bar to filter projects quickly.

Environments represent your deployment stages, like "Staging" and "Production." From the left menu, go to Environments and add them. Assign machines or cloud targets to these later for targeted deploys.
Tip: Start simple with two environments to test progression rules via lifecycles.
Here, you'll see active machines with connection status, OS, agent version, environments, and tags. Check for updates or delete unused ones from this view.

From the Projects page, click "Add new project." Name it (e.g., "Demo App"), add a description, and define steps—like "Run Script" for a PowerShell hello world or "Deploy Package" for uploading a .zip.
Upload a sample package to the Package Store (e.g., a demo .zip) and reference it in your step.
This displays all projects with IDs, descriptions, and quick links to steps, variables, releases, and deployments.

Add a project variable (e.g., "AppPath") scoped to environments for custom paths. Create a release (SemVer versioned), then deploy to "Staging." Monitor live logs and status on the Deployments tab.
View version info, creation time, lifecycle, and deployment history with statuses, durations, and triggers.

Success! Your first deployment is live. For troubleshooting, check the logs. Next, explore integrations to automate from your CI tool.
In the world of software delivery, deployment tools have evolved from rudimentary scripts and manual processes to sophisticated platforms that automate and orchestrate releases. Traditional tools—like CI servers (e.g., Jenkins, TeamCity), custom Bash or PowerShell scripts, or even basic file transfer methods (FTP, SCP)—have served teams well for years. However, as applications grow in complexity with multi-environment setups, cloud integrations, and compliance needs, these legacy methods often fall short.
Jaws Deploy emerges as a modern continuous deployment (CD) solution, bridging the gap between simple CI outputs and reliable, scalable deliveries. In this guide, we'll compare Jaws Deploy to traditional tools, highlighting key differences, advantages, and when it makes sense to switch. We'll draw on real-world scenarios to show how Jaws simplifies what used to be painstaking work, all while keeping costs low and usability high.
Traditional deployment tools typically refer to:
These methods are free or low-cost to start but scale poorly. They lack built-in features for environment management, auditing, or rollback, leading to brittle processes prone to human error.
While traditional tools get the job done for small projects, they introduce challenges as teams grow:
These issues can lead to longer release cycles, higher downtime, and frustrated teams.
Jaws Deploy is built for modern CD, focusing on automation, visibility, and reuse without the overhead of enterprise bloat. Unlike traditional tools, it provides a unified UI and API for managing the full deployment lifecycle. Here's a side-by-side comparison:
Jaws shines in scenarios where traditional tools falter, like deploying a .NET app to Azure Web Apps. Instead of scripting Azure CLI commands, define a project step, upload a package to the store, and deploy with one click or API call. Manage versions securely without external feeds if needed.

These examples highlight Jaws' focus on developer-friendly features, like expression-based variables (#{VAR.myVar}) and agent auto-updates, which reduce toil compared to maintaining traditional setups.
When to Choose Jaws Deploy Over Traditional Tools
Stick with traditional tools for ultra-simple, one-off deploys or if you're already deeply invested in a CI ecosystem without CD needs. But if you're dealing with:
Jaws Deploy is a no-brainer upgrade. It's especially appealing for small-to-medium teams seeking Octopus-like power without the price tag—our migration guide from tools like Octopus shows how seamless the switch can be.
Traditional deployment tools laid the foundation for automation, but in 2025, with hybrid clouds and rapid iterations, you need more. Jaws Deploy modernizes CD by combining intuitive UI, robust APIs, and cost-efficiency, letting you focus on shipping features, not fighting tools.
Ready to try? Sign up at jawsdeploy.net and deploy your first project today. For questions, hit our Contact Us page or dive into guides for hands-on tips. If you're migrating, check How Jaws Compares to Octopus Deploy for tailored advice.
In today's fast-paced software world, getting your code from development to production reliably and quickly is crucial. That's where Jaws Deploy comes in—a powerful, user-friendly continuous deployment (CD) platform designed for agile DevOps teams. Whether you're managing on-prem servers, cloud services, or hybrid setups, Jaws Deploy simplifies the complexities of deployment automation, letting you focus on building great software rather than wrestling with pipelines.
Founded in 2023 by a team of experienced software and DevOps engineers, Jaws Deploy was created as an accessible alternative to tools like Octopus Deploy. As long-time users of Octopus, the founders appreciated its capabilities but found its pricing and complexity challenging. Jaws Deploy aims to deliver similar power with greater simplicity, affordability, and focus on real-world needs—handling about 80% of common deployment scenarios without unnecessary bloat.
In this article, we'll break down what Jaws Deploy is, its key features, how it works, and why it might be the right fit for your team. Let's dive in.
At its heart, Jaws Deploy is an automated deployment platform that orchestrates releases across multiple environments. It wraps up the intricacies of continuous delivery (CD), providing a clear path from your CI tools (like TeamCity or Jenkins) to live production systems. As described on the Jaws homepage: "Use Jaws Deploy to orchestrate multi-environment deployments with configuration management, reusable workflows and seamless integration into your CI/CD pipelines."
It's built for teams of all sizes— from solo developers to enterprise groups—handling everything from simple web apps to complex microservices. By modeling your infrastructure, defining reusable steps, and integrating with your existing toolchain, Jaws ensures deployments are consistent, auditable, and scalable.
Key benefits include:
Jaws Deploy packs a robust set of features tailored for modern CD workflows. Here's a breakdown of the standout ones, categorized for clarity:
This view shows version info, creation times, statuses, and running durations, helping you diagnose issues quickly.

See active machines with connection status, OS details, agent versions, assigned environments, and tags for easy management.

#{VAR.myVar}, and use them for config transforms (JSON/XML), step properties, or script logic.Manage text, secret, or structured variables with scoping options, values, and history tracking.

View package IDs, versions, sizes, and upload dates, with options to add new versions or inspect details.

List all projects with IDs, descriptions, and links to steps, variables, releases, and deployments.

Jaws Deploy shares many similarities with Octopus Deploy, such as workspaces, projects, environments, variables, lifecycles, and step templates. Both handle multi-environment deploys, tagging, and config transforms effectively.
However, Jaws stands out with:
If you're migrating from Octopus or traditional tools, Jaws offers guides to ease the transition, emphasizing its clarity and control.
Jaws Deploy keeps things straightforward:
No credit card needed to start. Sign up at https://app.jawsdeploy.net/signup, and check the Getting Started guide for your first deploy.
If you're tired of brittle scripts, siloed CI tools, or overpriced platforms, Jaws Deploy offers a balanced, modern alternative. It's built by DevOps pros for real teams, with ongoing improvements based on user feedback. Whether deploying .NET apps to Azure or custom services to VMs, Jaws makes CD approachable and efficient.
Have questions? Visit Contact Us or explore features and guides for more. Ready to simplify your deployments? Give Jaws a try today!
Continuous Integration and Continuous Deployment (CI/CD) have become the backbone of modern software development, enabling teams to build, test, and release code faster and more reliably. While CI focuses on automating builds and tests (often handled by tools like Jenkins, GitHub Actions, or TeamCity), CD takes over to orchestrate deployments to various environments. This is where Jaws Deploy shines—as a dedicated CD platform that bridges the gap between your CI outputs and production reality.
Jaws Deploy acts as the deployment orchestrator in your CI/CD pipeline, handling complex topologies, configuration management, and automated releases with ease. It's designed to integrate seamlessly with existing CI tools, providing a centralized hub for deployment logic that's reusable, auditable, and scalable. Whether you're deploying to on-prem machines, Azure Web Apps, or hybrid setups, Jaws ensures consistency without forcing you to reinvent the wheel in scripts or pipelines.
In this guide, we'll explore Jaws Deploy's role in CI/CD workflows, how it integrates, typical setups, and the value it adds to your DevOps processes.
A standard CI/CD workflow looks like this:
Traditional setups often overload CI tools with deployment duties, leading to brittle scripts and limited visibility. Jaws Deploy specializes in the CD part, taking artifacts from CI and managing their rollout. It models your infrastructure (environments, machines, tags) and automates progression via lifecycles, making it ideal for multi-stage pipelines.
Unlike all-in-one tools, Jaws focuses on simplicity: Use your favorite CI for builds, then hand off to Jaws for deployments. This separation keeps pipelines lean and leverages Jaws' strengths in variable scoping, step reusability, and live previews.
Jaws Deploy integrates via its REST API and PowerShell SDK, allowing automation from any CI platform. No native plugins needed— just API calls or scripts post-build.
Invoke-ReleaseAndDeployProject.While Jaws works with any tool supporting HTTP calls or PowerShell, common integrations include:
Setup is straightforward: Create a service account in Jaws, store credentials securely (e.g., as CI secrets), and invoke from your pipeline.
Store API keys as secrets here, scoped to your CI environment for added security.

Here's how Jaws fits into a end-to-end workflow:
Example with PowerShell SDK in a CI script:
# Set credentials
$env:JAWS_API_LOGIN = "your_service_account_id"
$env:JAWS_API_PASSWORD = "your_api_key"
# Import SDK
Import-Module -Name JawsDeploySdk.psm1
# Trigger release and deploy
$response = Invoke-ReleaseAndDeployProject -projectId "abc123" -version "1.2.3" -environmentName "Staging"
Write-Output $response
This deploys to Staging instantly after CI success.
For advanced setups, use variables for dynamic configs (e.g., #{VAR.connectionString}) and tags to target specific machine groups.
Track the workflow here, with statuses, triggers, and durations from CI-initiated deploys.

Incorporating Jaws Deploy elevates your workflows:
Teams report faster releases and fewer incidents by offloading CD to Jaws.
See how CI-triggered deploys appear in activity graphs for quick insights.

With 2025 updates like expanded scripting (bash/Python) and a Step Template Library for AWS/Docker, Jaws is poised to handle even more diverse workflows. Future enhancements will deepen integrations, making Jaws an even stronger CD partner.
Jaws Deploy plays a pivotal role in CI/CD by owning the deployment orchestration, freeing your CI tools to do what they do best. Its API-driven approach, reusable components, and intuitive UI make it a natural fit for teams seeking reliable, low-maintenance CD.
To integrate Jaws into your pipeline, start with the CI/CD Integration Guide or try a free account at jawsdeploy.net. If you're migrating, check our comparison to Octopus Deploy for tips. Simplify your deployments—get started today!
GitHub Actions is a popular CI/CD platform built right into GitHub, allowing you to automate workflows for building, testing, and deploying code. While it's great for the "CI" part—handling builds and tests—it can get cumbersome for complex deployments involving multiple environments, configurations, and targets. That's where Jaws Deploy comes in: it takes over the "CD" orchestration, providing reusable steps, variable scoping, and live monitoring.
By integrating Jaws Deploy with GitHub Actions, you can automate release creation and deployments post-build, ensuring consistent rollouts to staging, production, or custom environments. This guide walks you through the process using Jaws' REST API or the lightweight PowerShell SDK. No native GitHub Action exists yet, but the API-driven approach is flexible and easy to set up.
We'll cover prerequisites, setup steps, an example workflow, and tips for success. Let's get your pipeline flowing smoothly.
This integration is ideal for .NET, web apps, or any project where you build artifacts (e.g., .zip packages) in Actions and deploy them via Jaws.
Before starting:
Ensure your Jaws project is ready here, with defined steps and variables.

Service accounts provide secure, API-only access without tying to a user login. They're perfect for CI/CD automation.
Store the service account ID and API key as GitHub Secrets:
JAWS_API_LOGIN = service account IDJAWS_API_PASSWORD = API keyThis keeps credentials secure and out of your workflow YAML.
For more on service accounts, see our Service Accounts and Automation Guide.
Jaws supports two main ways to integrate:
curl or similar in your Actions workflow. Great for non-PowerShell environments.We'll use the PowerShell SDK in our example for simplicity, but REST alternatives are noted.
Create a .github/workflows/deploy.yml file in your repo. This example assumes a .NET app build that produces a .zip package.
name: Build and Deploy to Jaws
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Build
run: dotnet build --configuration Release
- name: Package
run: dotnet publish -c Release -o out
- name: Zip Artifact
run: zip -r app.zip out/
- name: Upload to Jaws Package Store
run: |
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $(echo -n ${{ secrets.JAWS_API_LOGIN }}:${{ secrets.JAWS_API_PASSWORD }} | base64)" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=${{ github.run_number }}.0.0" # Use run number or git tag for versioning
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Deploy via PowerShell SDK
uses: actions/setup-powershell@v1 # If needed for PowerShell support
with:
shell: pwsh
- name: Download and Import SDK
run: |
Invoke-WebRequest -Uri "<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>" -OutFile "JawsDeploySdk.psm1"
Import-Module ./JawsDeploySdk.psm1
- name: Create Release and Deploy
env:
JAWS_API_LOGIN: ${{ secrets.JAWS_API_LOGIN }}
JAWS_API_PASSWORD: ${{ secrets.JAWS_API_PASSWORD }}
run: |
$projectId = "your-project-id" # From Jaws Projects page
$version = "${{ github.run_number }}.0.0"
$resp = Invoke-ReleaseAndDeployProject -projectId $projectId -version $version -environmentName "Staging"
Write-Output $resp
Invoke-ReleaseAndDeployProject to create a release and deploy to Staging.${{ github.run_number }}.0.0 or git tags for traceability.For pure REST (no SDK):Replace the deploy step with curl calls:
/api/release to create a release./api/release/deploy to trigger deployment.Example curl for release creation:
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)" \\
-H "Content-Type: application/json" \\
-d '{"projectId": "your-project-id", "version": "1.2.3", "packageVersions": {"my-app": "1.2.3"}}'
Monitor the GitHub-triggered deploy here, with creation time, status, and errors.

If issues arise, enable debug mode in Jaws by setting a __debug variable to true in your project.
if conditions in steps, e.g., deploy to Production only on tags (if: startsWith(github.ref, 'refs/tags/')).For advanced scripting (now including bash/Python support as of 2025), extend with custom steps.
If stuck, visit our API Reference or Contact Us.
Integrating Jaws Deploy with GitHub Actions supercharges your CD process, combining Actions' flexibility with Jaws' deployment smarts. This setup reduces manual work, boosts reliability, and scales with your team.
For more integrations, see our CI/CD Integration Guide. Ready to automate? Update your workflow and deploy with confidence! If you're new, start with Getting Started.
Jenkins is a widely used open-source automation server for continuous integration (CI), excelling at building, testing, and packaging code. However, when it comes to orchestrating complex deployments across multiple environments, configurations, and targets, it can become unwieldy with custom scripts and plugins. Jaws Deploy complements Jenkins by handling the continuous deployment (CD) side, managing releases, lifecycles, variables, and monitoring in a dedicated platform.
In this integration, Jenkins focuses on the build process (e.g., compiling code and creating artifacts like .zip packages), while Jaws Deploy takes over for release creation and deployment. We'll use Jaws' REST API or the PowerShell SDK for seamless handover. No dedicated Jenkins plugin is required—leverage built-in shell or PowerShell steps in your pipelines.
This guide covers prerequisites, setup, an example Jenkins pipeline, and best practices to automate your workflow.
This setup is perfect for .NET apps, web services, or any project where Jenkins builds artifacts and Jaws deploys them to machines or cloud targets like Azure Web Apps.
Verify your Jaws project setup here, including steps and variables.

For secure API access from Jenkins:
Store these in Jenkins as credentials:
See the Service Accounts and Automation Guide for details.
curl in shell steps for direct HTTP calls. Simple for Linux agents.Invoke-ReleaseAndDeployProject. Ideal for Windows agents or cross-platform with PowerShell Core.We'll demonstrate both in the example, focusing on the SDK for its simplicity.
Create a new Pipeline project in Jenkins and define a Jenkinsfile in your repo (or inline). This example assumes a .NET build producing a .zip artifact.
pipeline {
agent any
environment {
JAWS_CREDS = credentials('jaws-api-creds') // References your stored creds
}
stages {
stage('Build') {
steps {
// Build your app (e.g., .NET example)
sh 'dotnet build --configuration Release'
sh 'dotnet publish -c Release -o out'
sh 'zip -r app.zip out/'
// Upload package to Jaws via REST API (using curl)
sh """
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic \\$(echo -n \\$JAWS_CREDS_USR:\\$JAWS_CREDS_PSW | base64)" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=${BUILD_NUMBER}.0.0" // Use Jenkins build number for versioning
"""
}
}
stage('Deploy via Jaws SDK') {
steps {
// Use PowerShell step (requires PowerShell Plugin)
powershell '''
# Download and import SDK (one-time or cache it)
Invoke-WebRequest -Uri "<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>" -OutFile "JawsDeploySdk.psm1"
Import-Module ./JawsDeploySdk.psm1
# Set credentials from env (passed via Jenkins creds)
$env:JAWS_API_LOGIN = $env:JAWS_CREDS_USR
$env:JAWS_API_PASSWORD = $env:JAWS_CREDS_PSW
# Create release and deploy
$projectId = "your-project-id" # From Jaws Projects page
$version = "${env:BUILD_NUMBER}.0.0"
$response = Invoke-ReleaseAndDeployProject -projectId $projectId -version $version -environmentName "Staging"
Write-Output $response
'''
}
}
}
post {
always {
cleanWs() // Clean up workspace
}
}
}
curl with Basic Auth from credentials.powershell step to run a script that imports the SDK, sets creds, and calls Invoke-ReleaseAndDeployProject for release creation and deployment to Staging.credentials() binding—avoids hardcoding.BUILD_NUMBER for SemVer traceability.For pure REST (no SDK), replace the PowerShell step with a sh or bat step using curl:
sh """
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic \\$(echo -n \\$JAWS_CREDS_USR:\\$JAWS_CREDS_PSW | base64)" \\
-H "Content-Type: application/json" \\
-d '{"projectId": "your-project-id", "version": "${BUILD_NUMBER}.0.0", "packageVersions": {"my-app": "${BUILD_NUMBER}.0.0"}}'
"""
// Follow with another curl for /api/release/deploy
Adapt endpoints from the API Reference.
View Jenkins-triggered deploys here, including triggers and durations.

Enable Jaws debug mode with a __debug variable if needed.
catchError.agent { label 'windows' }) for PowerShell on Windows nodes.For multi-project setups, parameterize the pipeline.
pwsh on Linux agents.exit 1 on failure) to propagate errors.Refer to Jenkins docs or API Reference for more.
Integrating Jenkins with Jaws Deploy streamlines your CI/CD pipeline, letting each tool play to its strengths. This API-driven approach minimizes custom code while maximizing automation and visibility.
For broader CI/CD tips, see the CI/CD Integration Guide. Start building—configure your pipeline today! If new to Jaws, try the Getting Started guide.
GitLab CI/CD is a robust, built-in pipeline tool for continuous integration and delivery, integrated directly with your GitLab repositories. It excels at automating builds, tests, and artifact creation but can become complex when managing multi-environment deployments, configurations, and orchestrations. Jaws Deploy steps in as the dedicated CD platform, handling releases, lifecycles, variable scoping, and monitoring to ensure reliable rollouts.
In this integration, GitLab focuses on the CI phase (building and packaging), while Jaws Deploy manages the CD phase (release creation and deployment). Leverage Jaws' REST API or PowerShell SDK for automation—no native GitLab plugin is needed; use script stages in your pipelines.
This guide outlines prerequisites, setup, an example GitLab CI/CD pipeline, and tips for a smooth workflow.
This setup suits projects like web apps or microservices where GitLab builds artifacts (e.g., .zip or Docker images) and Jaws deploys them to on-prem machines or cloud targets like Azure Web Apps.
Confirm your Jaws project is configured here, with steps, variables, and environments.

For secure, automated access:
In GitLab:
JAWS_API_LOGIN = service account IDJAWS_API_PASSWORD = API keyThis ensures credentials are secure and only available in protected branches/pipelines.
Refer to the Service Accounts and Automation Guide for more.
curl in script stages. Straightforward for any Runner.Invoke-ReleaseAndDeployProject. Requires PowerShell on the Runner (install via apt install powershell on Ubuntu-based images if needed).We'll use the SDK in the example, with REST alternatives provided.
Create a .gitlab-ci.yml file in your repo root. This example builds a .NET app, packages it, uploads to Jaws, and deploys.
image: mcr.microsoft.com/dotnet/sdk:8.0 # Or your preferred image with dotnet and curl
variables:
PACKAGE_ID: "my-app"
PROJECT_ID: "your-project-id" # From Jaws Projects page
stages:
- build
- deploy
build:
stage: build
script:
- dotnet build --configuration Release
- dotnet publish -c Release -o out
- zip -r app.zip out/
# Upload package to Jaws via REST API
- |
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)" \\
-F "file=@app.zip" \\
-F "packageId=$PACKAGE_ID" \\
-F "version=$CI_PIPELINE_ID.0.0" # Use pipeline ID or git tag for versioning
artifacts:
paths:
- app.zip # Optional, for archiving
deploy_to_staging:
stage: deploy
script:
# Download and import PowerShell SDK
- pwsh -Command "Invoke-WebRequest -Uri '<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>' -OutFile 'JawsDeploySdk.psm1'"
- pwsh -Command "Import-Module ./JawsDeploySdk.psm1"
# Create release and deploy
- |
pwsh -Command "
\\$env:JAWS_API_LOGIN = '$JAWS_API_LOGIN'
\\$env:JAWS_API_PASSWORD = '$JAWS_API_PASSWORD'
\\$version = '$CI_PIPELINE_ID.0.0'
\\$response = Invoke-ReleaseAndDeployProject -projectId '$PROJECT_ID' -version \\$version -environmentName 'Staging'
Write-Output \\$response
"
when: on_success # Run only if build succeeds
environment: Staging # GitLab environment tracking
curl with Basic Auth from variables.pwsh (PowerShell Core) to download/import the SDK, set creds, and invoke Invoke-ReleaseAndDeployProject for release and deployment to Staging.$CI_PIPELINE_ID for SemVer consistency.dotnet, curl, and pwsh (pre-install if necessary).For pure REST (no SDK), replace the deploy script with curl calls:
script:
- |
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"$PROJECT_ID\\", \\"version\\": \\"$CI_PIPELINE_ID.0.0\\", \\"packageVersions\\": {\\"$PACKAGE_ID\\": \\"$CI_PIPELINE_ID.0.0\\"}}"
# Then curl to /api/release/deploy with the release ID from response
Check the API Reference for exact endpoints.
.gitlab-ci.yml and push to trigger the pipeline.Inspect GitLab-initiated deploys here, with statuses, triggers, and running times.

If debugging, set a __debug variable to true in your Jaws project for detailed logs.
rules or only/except to deploy to Production only on tags or merges (e.g., rules: - if: '$CI_COMMIT_TAG').when: manual).For larger setups, use GitLab's include/templates for reusable configs.
apt update && apt install -y powershell) or switch to a custom Docker image.set -e in shells for error propagation; check Jaws logs for deployment-specific errors.Consult GitLab docs or our API Reference.
Integrating GitLab with Jaws Deploy enhances your CI/CD pipeline by delegating deployment orchestration to a specialized tool, improving efficiency and reliability.
For more on integrations, explore the CI/CD Integration Guide. Configure your pipeline now and automate away! New to Jaws? Begin with the Getting Started guide.
Azure Pipelines, part of Azure DevOps, is a versatile CI/CD service for building, testing, and deploying code across platforms. It's excellent for the continuous integration (CI) phase but can become script-heavy for intricate deployments involving multiple environments, configurations, and targets. Jaws Deploy enhances this by specializing in continuous deployment (CD), managing releases, lifecycles, variable scoping, and real-time monitoring.
In this integration, Azure Pipelines handles builds and artifact creation (e.g., .zip packages), while Jaws Deploy orchestrates the release and deployment. Use Jaws' REST API or PowerShell SDK for automation—no native Azure extension is required; incorporate script tasks in your pipelines.
This guide details prerequisites, setup, an example pipeline, and tips for effective integration.
This combination is ideal for .NET, cloud-native apps, or hybrid setups where Azure builds artifacts and Jaws deploys them reliably.
Ensure your Jaws project is ready here, including steps, variables, and environments.

Service accounts enable secure API access from pipelines.
In Azure DevOps:
JAWS_API_LOGIN = service account ID (secret).JAWS_API_PASSWORD = API key (secret).Link this group to your pipeline for secure access.
For details, see the Service Accounts and Automation Guide.
curl in bash or PowerShell tasks. Versatile for any agent.Invoke-ReleaseAndDeployProject. Suited for Windows agents or cross-platform with PowerShell Core.The example uses the SDK, with REST notes provided.
Create a YAML pipeline in Azure DevOps (e.g., azure-pipelines.yml in your repo). This example builds a .NET app, packages it, uploads to Jaws, and deploys.
trigger:
- main
pool:
vmImage: 'windows-latest' # Or ubuntu-latest for Linux
variables:
- group: JawsCreds # Your variable group with creds
stages:
- stage: Build
jobs:
- job: BuildJob
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration Release'
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/*.csproj'
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)/out'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/out'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip'
# Upload package to Jaws via REST (PowerShell task with curl)
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$env:JAWS_API_LOGIN:$env:JAWS_API_PASSWORD"))
curl.exe -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" `
-H "Authorization: Basic $auth" `
-F "file=@$(Build.ArtifactStagingDirectory)/app.zip" `
-F "packageId=my-app" `
-F "version=$(Build.BuildNumber).0.0" # Use build number for SemVer
- stage: Deploy
dependsOn: Build
jobs:
- job: DeployJob
steps:
# Deploy via PowerShell SDK
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Download and import SDK
Invoke-WebRequest -Uri "<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>" -OutFile "JawsDeploySdk.psm1"
Import-Module ./JawsDeploySdk.psm1
# Set credentials
$env:JAWS_API_LOGIN = $env:JAWS_API_LOGIN
$env:JAWS_API_PASSWORD = $env:JAWS_API_PASSWORD
# Create release and deploy
$projectId = "your-project-id" # From Jaws Projects page
$version = "$(Build.BuildNumber).0.0"
$response = Invoke-ReleaseAndDeployProject -projectId $projectId -version $version -environmentName "Staging"
Write-Output $response
curl in a PowerShell task with Basic Auth from variables.Invoke-ReleaseAndDeployProject to create a release and deploy to Staging.$(Build.BuildNumber) for traceable SemVer.For pure REST, replace the deploy script with curl commands:
$auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$env:JAWS_API_LOGIN:$env:JAWS_API_PASSWORD"))
curl.exe -X POST "<https://app.jawsdeploy.net/api/release>" `
-H "Authorization: Basic $auth" `
-H "Content-Type: application/json" `
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$(Build.BuildNumber).0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$(Build.BuildNumber).0.0\\"}}"
# Follow with curl for /api/release/deploy
Reference the API Reference for endpoints.
Monitor Azure-triggered deploys here, with creation times, statuses, and durations.

For debugging, add a __debug variable set to true in your Jaws project to expand logs with full context.
errorActionPreference: 'Stop' in PowerShell for better handling.Check Azure docs or our API Reference.
Integrating Azure Pipelines with Jaws Deploy creates a powerful, Azure-centric CI/CD flow, where builds transition seamlessly to orchestrated deployments.
For additional integrations, see the CI/CD Integration Guide. Set up your pipeline today! If you're starting out, explore the Getting Started guide.
BuildKite is a flexible CI/CD platform that allows teams to run pipelines on their own infrastructure, offering scalable agents and easy YAML-based configuration. It's strong for continuous integration (CI) tasks like building and testing but can require custom scripting for advanced deployment orchestration. Jaws Deploy fills this gap by handling continuous deployment (CD), including release management, environment progression via lifecycles, variable scoping, and detailed monitoring.
In this integration, BuildKite manages the build process (e.g., compiling code and creating artifacts like .zip packages), while Jaws Deploy takes care of release creation and deployment. Use Jaws' REST API or PowerShell SDK for the handover—no native BuildKite plugin is needed; incorporate commands or scripts in your pipeline steps.
This guide covers prerequisites, setup, an example pipeline, and tips for optimization.
This setup works well for .NET apps, containerized services, or any workflow where BuildKite builds artifacts and Jaws deploys to on-prem or cloud targets like Azure Web Apps.
Verify your Jaws project configuration here, including steps and variables.

For secure API interactions:
In BuildKite:
JAWS_API_LOGIN = service account ID.JAWS_API_PASSWORD = API key (mark as secret).This keeps credentials secure and accessible in steps.
See the Service Accounts and Automation Guide for more.
curl commands in bash steps for HTTP calls. Suitable for any agent.Invoke-ReleaseAndDeployProject. Requires PowerShell on the agent (common on Windows; install pwsh on Linux).The example uses the SDK, with REST alternatives.
Define your pipeline in BuildKite's YAML editor or use an in-repo pipeline.yml (uploaded via buildkite-agent pipeline upload). This example assumes a .NET build, with build and deploy steps.
steps:
- label: ":hammer: Build"
command:
- dotnet build --configuration Release
- dotnet publish -c Release -o out
- zip -r app.zip out/
# Upload package to Jaws via REST API (using curl)
- |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $auth" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=$BUILDKITE_BUILD_NUMBER.0.0" # Use build number for SemVer
env:
JAWS_API_LOGIN: $JAWS_API_LOGIN
JAWS_API_PASSWORD: $JAWS_API_PASSWORD
artifact_paths: "app.zip" # Archive for reference
- wait
- label: ":cloud: Deploy to Staging"
command:
# Download and import PowerShell SDK (using pwsh)
- pwsh -Command "Invoke-WebRequest -Uri '<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>' -OutFile 'JawsDeploySdk.psm1'"
- pwsh -Command "Import-Module ./JawsDeploySdk.psm1"
# Create release and deploy
- |
pwsh -Command "
\\$env:JAWS_API_LOGIN = '$JAWS_API_LOGIN'
\\$env:JAWS_API_PASSWORD = '$JAWS_API_PASSWORD'
\\$projectId = 'your-project-id' # From Jaws Projects page
\\$version = '$BUILDKITE_BUILD_NUMBER.0.0'
\\$response = Invoke-ReleaseAndDeployProject -projectId \\$projectId -version \\$version -environmentName 'Staging'
Write-Output \\$response
"
env:
JAWS_API_LOGIN: $JAWS_API_LOGIN
JAWS_API_PASSWORD: $JAWS_API_PASSWORD
agents:
queue: deploy # Target deploy-specific agents
branches: "main"
curl with Basic Auth from env vars.Invoke-ReleaseAndDeployProject for release and deployment to Staging.$BUILDKITE_BUILD_NUMBER for traceable versions.For pure REST, replace the deploy command with curl:
- |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$BUILDKITE_BUILD_NUMBER.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$BUILDKITE_BUILD_NUMBER.0.0\\"}}"
# Add another curl for /api/release/deploy
Refer to the API Reference for details.
View BuildKite-triggered deploys here, with statuses, triggers, and timings.

Enable debug in Jaws by setting __debug to true for expanded logs.
branches or if conditions for Production deploys (e.g., on tags).Consult BuildKite docs or our API Reference.
Integrating BuildKite with Jaws Deploy creates a scalable CI/CD pipeline, combining BuildKite's agent flexibility with Jaws' deployment expertise.
For more integrations, check the CI/CD Integration Guide. Configure your pipeline now! New users: Start with the Getting Started guide.
TeamCity is a powerful continuous integration (CI) server from JetBrains, known for its flexibility in building, testing, and artifact management. While it can handle basic deployments via plugins or scripts, complex multi-environment orchestration often requires a dedicated tool. Jaws Deploy integrates natively with TeamCity to manage the continuous deployment (CD) phase, handling releases, promotions, variable scoping, and monitoring.
This integration lets TeamCity focus on builds (e.g., compiling code and creating packages), while Jaws Deploy orchestrates deployments. Jaws provides a first-class TeamCity plugin, PowerShell SDK, or REST API options. A dedicated guide exists for this setup, making it straightforward for .NET teams or those with Windows/Linux agents.
Ideal for scenarios like deploying .NET apps to Azure or on-prem servers after TeamCity builds.
Set up your Jaws project here before integrating.

For secure automation:
In TeamCity:
%JawsDeployLogin% for ID, %JawsDeployApiKey% for key) stored securely via configuration parameters or encrypted values.We'll cover the plugin and SDK primarily, as they're recommended.
https://app.jawsdeploy.net (or your instance).%JawsDeployLogin% (Service Account ID).%JawsDeployApiKey%.%build.number%); auto-generates if blank.Example configuration for "Create & Deploy":
Run the build; logs show deployment progress.
+:JawsDeploySdk.psm1 => ./_teamcity to place it neatly.# Set env vars (or use parameters)
$env:JAWS_API_BASE_URL = "%JawsDeployApiUrl%"
$env:JAWS_API_LOGIN = "%JawsDeployLogin%"
$env:JAWS_API_PASSWORD = "%JawsDeployApiKey%"
# Import SDK
Import-Module -Name (Join-Path "." _teamcity JawsDeploySdk.psm1)
# Create and deploy release
$projectId = "%MyApp_ProjectId%"
$jawsEnv = "%DeploymentEnvironment%"
$resp = Invoke-ReleaseAndDeployProject -projectId $projectId -version "%build.number%" -environmentName $jawsEnv
Write-Host $resp
# Or promote latest release
$resp = Invoke-PromoteRelease -projectId $projectId -environmentName $jawsEnv
Write-Host $resp
# Promote specific version
$resp = Invoke-PromoteRelease -projectId $projectId -environmentName $jawsEnv -version "%build.number%"
Write-Host $resp
Adapt for your build (e.g., after artifact creation and upload via API).
In a Command Line or PowerShell step, use curl or Invoke-WebRequest for endpoints like /api/release and /api/release/deploy. Base auth with encoded credentials.
Track TeamCity-initiated deploys here, with triggers like "TeamCity."

Set __debug to true in Jaws variables for verbose logs.
Integrating Jaws Deploy with TeamCity creates a robust CI/CD pipeline, leveraging TeamCity's build power and Jaws' deployment orchestration.
For details, see the official Integrate Jaws Deploy with TeamCity guide. Explore more in the CI/CD Integration Guide. Set it up and automate your releases! New to Jaws? Try Getting Started.
CircleCI is a cloud-based CI/CD platform that automates building, testing, and deploying code with YAML-configured pipelines. It's efficient for continuous integration (CI) but can benefit from a dedicated tool for handling complex deployments. Jaws Deploy integrates with CircleCI to manage the continuous deployment (CD) phase, overseeing releases, environment progressions via lifecycles, variable management, and deployment monitoring.
In this setup, CircleCI handles builds and artifact creation (e.g., .zip packages), while Jaws Deploy manages release creation and deployment. Use Jaws' REST API or PowerShell SDK for automation—no native CircleCI orb exists; incorporate scripts in your config.yml.
This guide covers prerequisites, setup, an example pipeline, and tips for success.
This integration suits web apps, .NET projects, or containerized services where CircleCI builds artifacts and Jaws deploys to on-prem or cloud targets like Azure Web Apps.
Configure your Jaws project here before starting.

For secure pipeline access:
In CircleCI:
JAWS_API_LOGIN = service account ID.JAWS_API_PASSWORD = API key (as secure env vars).Reference this context in your config.yml.
See the Service Accounts and Automation Guide for details.
curl in bash commands for HTTP calls. Simple for Linux executors.Invoke-ReleaseAndDeployProject. Requires PowerShell on the executor (pre-installed on Windows; add setup on others).The example uses the SDK, with REST notes.
Create a .circleci/config.yml in your repo. This example builds a .NET app, packages it, uploads to Jaws, and deploys.
version: 2.1
orbs:
win: circleci/windows@5.0.0 # For PowerShell on Windows executor
jobs:
build:
executor: win/default # Or linux for bash/curl
steps:
- checkout
- run:
name: Build and Package
command: |
dotnet build --configuration Release
dotnet publish -c Release -o out
Compress-Archive -Path out/* -DestinationPath app.zip
- run:
name: Upload Package to Jaws (REST)
command: |
$auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$env:JAWS_API_LOGIN:$env:JAWS_API_PASSWORD"))
curl.exe -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" `
-H "Authorization: Basic $auth" `
-F "file=@app.zip" `
-F "packageId=my-app" `
-F "version=$CIRCLE_BUILD_NUM.0.0" # Use build number for SemVer
- persist_to_workspace:
root: .
paths:
- app.zip # Optional for archiving
deploy:
executor: win/default
steps:
- attach_workspace:
at: .
- run:
name: Deploy via PowerShell SDK
command: |
Invoke-WebRequest -Uri "<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>" -OutFile "JawsDeploySdk.psm1"
Import-Module ./JawsDeploySdk.psm1
$env:JAWS_API_LOGIN = $env:JAWS_API_LOGIN
$env:JAWS_API_PASSWORD = $env:JAWS_API_PASSWORD
$projectId = "your-project-id" # From Jaws Projects page
$version = "$env:CIRCLE_BUILD_NUM.0.0"
$response = Invoke-ReleaseAndDeployProject -projectId $projectId -version $version -environmentName "Staging"
Write-Output $response
workflows:
build-deploy:
jobs:
- build
- deploy:
requires:
- build
context:
- jaws-deploy # Your context with creds
Invoke-ReleaseAndDeployProject for release and deployment to Staging.$CIRCLE_BUILD_NUM for SemVer.apt install powershell).For pure REST on Linux:Replace deploy command with bash curl:
run:
name: Create Release (REST)
shell: bash
command: |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$CIRCLE_BUILD_NUM.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$CIRCLE_BUILD_NUM.0.0\\"}}"
# Add curl for /api/release/deploy
Check the API Reference for endpoints.
Monitor CircleCI-triggered deploys here, with statuses and durations.

For debugging, set a __debug variable to true in your Jaws project for detailed logs.
filters: branches: only: main) for Production.set -e in bash or try-catch in PowerShell.Refer to CircleCI docs or our API Reference.
Integrating Jaws Deploy with CircleCI streamlines your CI/CD, letting CircleCI build efficiently while Jaws deploys reliably.
For more, see the CI/CD Integration Guide. Set up your config now! New to Jaws? Start with Getting Started.
Travis CI is a popular continuous integration (CI) platform, especially for open-source projects on GitHub, automating builds, tests, and artifact generation. While it supports basic deployments through scripts, managing intricate multi-environment rollouts can lead to maintenance overhead. Jaws Deploy complements Travis CI by taking on the continuous deployment (CD) responsibilities, including release orchestration, lifecycle progression, variable scoping, and comprehensive monitoring.
In this integration, Travis CI handles the build phase (e.g., compiling code and creating .zip packages), while Jaws Deploy manages release creation and deployment. Use Jaws' REST API or PowerShell SDK for the connection—no native Travis plugin is required; embed scripts in your .travis.yml.
Note: As of April 1, 2025, Travis CI has discontinued macOS builds due to VMWare EOL, so focus on Linux or Windows executors for new setups.
This guide outlines prerequisites, setup, an example configuration, and best practices.
This pairing is great for .NET apps or web services where Travis builds artifacts and Jaws deploys to machines or cloud targets like Azure Web Apps.
Prepare your Jaws project here, defining steps and variables.

For secure, scripted access:
In Travis CI:
JAWS_API_LOGIN = service account ID (not encrypted if public).JAWS_API_PASSWORD = API key (use encrypted variables for security via travis encrypt CLI).For encrypted vars: Run travis encrypt JAWS_API_PASSWORD=your_key --add env in your local CLI.
Refer to the Service Accounts and Automation Guide.
curl commands in bash scripts. Ideal for Linux executors.Invoke-ReleaseAndDeployProject. Use Windows executors or install pwsh on Linux (via sudo apt install -y powershell).We'll demonstrate REST with curl for simplicity, common in Travis setups.
Create a .travis.yml in your repo root. This example builds a .NET app (using dotnet), packages it, uploads to Jaws, and deploys via REST.
language: csharp # Or node_js, python, etc., for your stack
dist: focal # Ubuntu 20.04; use windows for PowerShell-native
env:
global:
secure: "your_encrypted_JAWS_API_PASSWORD" # From travis encrypt
script:
- dotnet build --configuration Release
- dotnet publish -c Release -o out
- zip -r app.zip out/
after_success:
# Upload package to Jaws via REST (curl)
- |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $auth" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=$TRAVIS_BUILD_NUMBER.0.0" # Use build number for SemVer
deploy:
provider: script
script: bash -c "
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST \\"<https://app.jawsdeploy.net/api/release\\>" \\
-H \\"Authorization: Basic $auth\\" \\
-H \\"Content-Type: application/json\\" \\
-d '{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$TRAVIS_BUILD_NUMBER.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$TRAVIS_BUILD_NUMBER.0.0\\"}}'
# Extract releaseId from response if needed, then:
curl -X POST \\"<https://app.jawsdeploy.net/api/release/deploy\\>" \\
-H \\"Authorization: Basic $auth\\" \\
-H \\"Content-Type: application/json\\" \\
-d '{\\"releaseId\\": \\"extracted-release-id\\", \\"environments\\": [\\"Staging\\"]}'
"
on:
branch: main
$TRAVIS_BUILD_NUMBER for traceability.$JAWS_API_PASSWORD.For PowerShell SDK (on Windows executor):Add os: windows to yml, and use a PowerShell script step:
script:
- pwsh -Command "Invoke-WebRequest -Uri '<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>' -OutFile 'JawsDeploySdk.psm1'"
- pwsh -Command "Import-Module ./JawsDeploySdk.psm1; Invoke-ReleaseAndDeployProject -projectId 'your-project-id' -version '$TRAVIS_BUILD_NUMBER.0.0' -environmentName 'Staging'"
Adapt endpoints from the API Reference.
View Travis-triggered deploys here, with creation times, statuses, and errors.

Enable debug mode in Jaws by setting __debug to true for detailed variable and step context.
travis encrypt to prevent exposure in public repos.on: branch: main for Production deploys; add conditions for tags.set -e in bash) to fail on issues.os: windows for PowerShell-heavy setups; install dependencies as needed.travis lint and simulate builds.apt update && apt install -y powershell).Consult Travis docs or our API Reference.
Integrating Jaws Deploy with Travis CI enhances your CI/CD pipeline, combining Travis' GitHub-friendly builds with Jaws' robust deployments.
For broader integrations, see the CI/CD Integration Guide. Configure your .travis.yml today! If new to Jaws, begin with the Getting Started guide.
Bitbucket Pipelines is Atlassian's integrated CI/CD solution for Bitbucket repositories, enabling automated builds, tests, and deployments through YAML-defined pipelines. It's effective for continuous integration (CI) but can require additional scripting for sophisticated deployment orchestration. Jaws Deploy pairs with Bitbucket Pipelines to handle the continuous deployment (CD) aspect, managing releases, lifecycle progressions, variable scoping, and detailed monitoring.
In this integration, Bitbucket Pipelines focuses on builds (e.g., compiling code and generating .zip packages), while Jaws Deploy oversees release creation and deployment. Leverage Jaws' REST API or PowerShell SDK—no native Bitbucket step exists; use script commands in your pipelines.
This guide details prerequisites, setup, an example pipeline, and tips for a seamless workflow.
This combination suits .NET apps, web services, or containerized workflows where Bitbucket builds artifacts and Jaws deploys to on-prem machines or cloud targets like Azure Web Apps.
Set up your Jaws project here, including steps and variables.

For secure API calls:
In Bitbucket:
JAWS_API_LOGIN = service account ID.JAWS_API_PASSWORD = API key (mark as secured to hide in logs).See the Service Accounts and Automation Guide for more.
curl in bash scripts for HTTP requests. Straightforward for standard Bitbucket images.Invoke-ReleaseAndDeployProject. Install PowerShell if needed (e.g., on atlassian/default-image:3).The example uses REST for broad compatibility.
Create a bitbucket-pipelines.yml in your repo root. This example builds a .NET app, packages it, uploads to Jaws, and deploys via REST.
image: mcr.microsoft.com/dotnet/sdk:8.0 # Or your base image
pipelines:
default:
- step:
name: Build and Upload Package
script:
- dotnet build --configuration Release
- dotnet publish -c Release -o out
- zip -r app.zip out/
# Upload to Jaws via REST (curl)
- |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $auth" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=$BITBUCKET_BUILD_NUMBER.0.0" # Use build number for SemVer
artifacts:
- app.zip # Optional for archiving
- step:
name: Create Release and Deploy
script:
# Create release via REST
- |
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
response=$(curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$BITBUCKET_BUILD_NUMBER.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$BITBUCKET_BUILD_NUMBER.0.0\\"}}" \\
--write-out "%{http_code}" --silent --output /dev/null)
# Parse response for releaseId if needed (use jq if installed: apt install jq)
# For simplicity, assume success and proceed to deploy (use actual releaseId extraction)
curl -X POST "<https://app.jawsdeploy.net/api/release/deploy>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"releaseId\\": \\"extracted-release-id\\", \\"environments\\": [\\"Staging\\"]}"
apt-get update && apt-get install -y jq at step start for parsing).$BITBUCKET_BUILD_NUMBER for consistency.For PowerShell SDK:Add installation: apt-get update && apt-get install -y powershell, then use pwsh commands similar to other guides.
Reference the API Reference for exact endpoints.
Monitor Bitbucket-triggered deploys here, with triggers, statuses, and durations.

For debugging, set __debug to true in your Jaws project variables for expanded logs.
branches: main under pipelines for Production controls.if [ $response -ne 200 ]; then exit 1; fi in scripts.Consult Bitbucket docs or our API Reference.
Integrating Bitbucket Pipelines with Jaws Deploy creates an efficient Atlassian-aligned CI/CD flow, where builds lead seamlessly to orchestrated deployments.
For more integrations, explore the CI/CD Integration Guide. Configure your pipeline today! New to Jaws? Start with the Getting Started guide.
AWS Code Pipeline is Amazon's fully managed CI/CD service, orchestrating workflows for building, testing, and deploying code across AWS resources. It's powerful for AWS-native pipelines but can be extended for hybrid or multi-cloud scenarios. Jaws Deploy integrates with CodePipeline to handle the deployment handover, focusing on CD orchestration like releases, lifecycles, and variable management—especially useful for deploying to non-AWS targets like Azure Web Apps, on-prem servers, or mixed environments.
In this setup, CodePipeline manages the CI phase (e.g., source from CodeCommit/S3, build with CodeBuild), then hands off to Jaws Deploy via API calls for hybrid/multi-cloud deploys. Use Jaws' REST API or PowerShell SDK, invoked through a CodeBuild action or Lambda in your pipeline. This enables seamless multi-cloud strategies, where AWS handles builds and Jaws deploys across providers.
This guide covers prerequisites, setup, an example pipeline, and tips, emphasizing hybrid/multi-cloud benefits.
This integration shines in scenarios like deploying a .NET app built in AWS to Azure Web Apps, or hybrid setups with on-prem validation.
Configure your Jaws project here, scoping variables for multi-cloud targets.

For secure API invocation from AWS:
In AWS:
See the Service Accounts and Automation Guide.
Invoke-ReleaseAndDeployProject.We'll use CodeBuild with REST for the example, ideal for hybrid handoffs.
Create a pipeline in AWS CodePipeline (console or CDK/Terraform). Add a "Deploy" stage after Build that uses CodeBuild to call Jaws API.
version: 0.2
phases:
install:
runtime-versions:
dotnet: 8.0 # Or your runtime
pre_build:
commands:
- echo Fetching credentials from SSM...
- JAWS_API_LOGIN=$(aws ssm get-parameter --name "/jaws/login" --query "Parameter.Value" --output text)
- JAWS_API_PASSWORD=$(aws ssm get-parameter --name "/jaws/password" --with-decryption --query "Parameter.Value" --output text)
build:
commands:
# Assume artifact (app.zip) from previous stage; upload to Jaws package store
- auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
- curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $auth" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=$CODEPIPELINE_BUILD_ID.0.0" # Use pipeline ID for SemVer
# Create release
- release_response=$(curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$CODEPIPELINE_BUILD_ID.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"$CODEPIPELINE_BUILD_ID.0.0\\"}}")
# Extract releaseId (using jq; install if needed: apt install jq)
- release_id=$(echo $release_response | jq -r '.releaseId')
# Deploy to Staging (or multi-cloud env)
- curl -X POST "<https://app.jawsdeploy.net/api/release/deploy>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"releaseId\\": \\"$release_id\\", \\"environments\\": [\\"Staging\\"]}"
post_build:
commands:
- echo Deployment triggered to Jaws for hybrid/multi-cloud rollout.
ssm:GetParameter and internet access.For PowerShell SDK in CodeBuild (Windows runtime):Replace commands with pwsh scripts to import SDK and call Invoke-ReleaseAndDeployProject.
For Lambda: Create a function invoked by CodePipeline, passing artifacts and calling API.
Reference the API Reference for endpoints.
View AWS-handed deploys here, with statuses across hybrid environments.

Set __debug to true in Jaws for detailed logs.
Consult AWS docs or our API Reference.
Integrating AWS CodePipeline with Jaws Deploy enables robust hybrid/multi-cloud deploys, where AWS builds feed into Jaws' orchestration for seamless cross-provider rollouts.
For more, see the CI/CD Integration Guide. Build your pipeline today! New to Jaws? Try the Getting Started guide.
Google Cloud Build (GCB) is Google's serverless platform for automating builds, tests, and artifact creation, particularly excelling in containerized workflows like Docker image builds and pushes to Container Registry or Artifact Registry. While GCB handles CI effectively, extending to complex CD across hybrid environments can involve custom steps. Jaws Deploy integrates with GCB to manage releases and deployments, leveraging API triggers for seamless handoffs—ideal for triggering Jaws releases post-build in containerized setups.
In this integration, GCB focuses on containerized builds (e.g., building and pushing Docker images), while Jaws Deploy orchestrates the CD phase via API triggers, handling multi-environment rollouts, lifecycles, and variable scoping. This enables efficient container deployments to Kubernetes, VMs, or multi-cloud targets.
This guide covers prerequisites, setup, an example workflow, and tips, with emphasis on containerized processes and API-driven triggers.
This setup is suited for microservices or apps where GCB builds containers, and Jaws triggers releases for deployment to diverse targets.
Configure your Jaws project here, adding steps for container pulls/deploys.

For secure API triggers from GCB:
In GCP:
See the Service Accounts and Automation Guide.
Invoke-ReleaseAndDeployProject.Emphasize REST for container workflows, as it's lightweight and integrates easily with Docker-based builds.
Create a cloudbuild.yaml in your repo. This example builds a Docker container, pushes to Artifact Registry, then triggers a Jaws release via API for deployment.
steps:
# Build and push container
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$BUILD_ID', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$BUILD_ID']
# Trigger Jaws release via REST API (fetch secrets and call)
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
# Fetch secrets
JAWS_API_LOGIN=$(gcloud secrets versions access latest --secret="jaws-login")
JAWS_API_PASSWORD=$(gcloud secrets versions access latest --secret="jaws-password")
# Create release (pass container tag as variable or note)
auth=$(echo -n $JAWS_API_LOGIN:$JAWS_API_PASSWORD | base64)
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"$BUILD_ID.0.0\\", \\"notes\\": \\"Container: us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$BUILD_ID\\"}"
# Deploy release (extract releaseId from response; use jq)
apt-get update && apt-get install -y jq
release_response=$(curl ... ) # Repeat create call with --output -
release_id=$(echo $release_response | jq -r '.releaseId')
curl -X POST "<https://app.jawsdeploy.net/api/release/deploy>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"releaseId\\": \\"$release_id\\", \\"environments\\": [\\"Staging\\"]}"
options:
logging: CLOUD_LOGGING_ONLY
docker pull $#{VAR.containerTag}).$BUILD_ID for SemVer.For PowerShell SDK: Use a Windows machine type (machineType: E2_HIGHCPU_8) and pwsh commands to import/call SDK.
Reference the API Reference for endpoints.
Monitor GCB-triggered releases here, verifying container deploys.

Set __debug to true in Jaws for detailed logs.
Consult GCP docs or our API Reference.
Integrating Google Cloud Build with Jaws Deploy leverages GCB's containerized workflows and API triggers for efficient, multi-cloud releases—perfect for hybrid environments.
For more, see the CI/CD Integration Guide. Set up your build today! New to Jaws? Start with Getting Started.
Bamboo is Atlassian's on-premises CI/CD server, renowned for its robust build plans, agent management, and seamless integration with Jira for enterprise-grade workflows. It's a staple in large organizations handling complex builds and tests, but as teams scale, the deployment side can become burdensome with custom scripts and maintenance. Jaws Deploy integrates with Bamboo to offload the continuous deployment (CD) orchestration, managing releases, lifecycles, variables, and multi-environment rollouts—making it an ideal partner for enterprises migrating from heavy on-prem tools to a more agile, cost-effective solution.
This integration allows Bamboo to focus on CI (e.g., building artifacts), while Jaws handles CD via API calls or SDK. For enterprise setups, this is particularly useful during migrations: Jaws' simplicity reduces operational overhead, lowers licensing costs compared to Bamboo's per-agent model, and preserves Jira ties through shared Atlassian ecosystems. Teams can gradually shift deployment logic to Jaws without disrupting existing Bamboo plans, enabling hybrid operations during transition.
This guide covers prerequisites, setup, an example configuration, and migration-focused tips.
This setup benefits large orgs migrating for agility, like moving from monoliths to microservices.
Mirror your Bamboo plans here as Jaws projects for smooth migration.

Service accounts enable secure, non-user API access—crucial for enterprise automation.
In Bamboo:
JAWS_API_LOGIN = ID, JAWS_API_PASSWORD = key (encrypt if sensitive).See the Service Accounts and Automation Guide for enterprise RBAC tips.
Invoke-ReleaseAndDeployProject.Focus on REST for migrations, as it's quick to prototype without dependencies.
In Bamboo, add a script task to your deployment plan's job (or build plan's final stage) to call Jaws API. This example assumes a .NET build producing a .zip, uploaded then deployed via REST.
# Fetch vars (Bamboo injects as env)
auth=$(echo -n ${bamboo_JAWS_API_LOGIN}:${bamboo_JAWS_API_PASSWORD} | base64)
# Upload artifact to Jaws package store (assume artifact shared as app.zip)
curl -X POST "<https://app.jawsdeploy.net/api/packagestore/package>" \\
-H "Authorization: Basic $auth" \\
-F "file=@app.zip" \\
-F "packageId=my-app" \\
-F "version=${bamboo.buildNumber}.0.0" # Use Bamboo build number
# Create release
curl -X POST "<https://app.jawsdeploy.net/api/release>" \\
-H "Authorization: Basic $auth" \\
-H "Content-Type: application/json" \\
-d "{\\"projectId\\": \\"your-project-id\\", \\"version\\": \\"${bamboo.buildNumber}.0.0\\", \\"packageVersions\\": {\\"my-app\\": \\"${bamboo.buildNumber}.0.0\\"}}"
# Deploy (extract releaseId from prior response; use jq if installed)
# For simplicity, chain or parse in script
For PowerShell SDK (on Windows agents):
# Download/import SDK
Invoke-WebRequest -Uri "<https://github.com/JawsDeploy/powershell-sdk/raw/main/JawsDeploySdk.psm1>" -OutFile "JawsDeploySdk.psm1"
Import-Module ./JawsDeploySdk.psm1
$env:JAWS_API_LOGIN = "${bamboo_JAWS_API_LOGIN}"
$env:JAWS_API_PASSWORD = "${bamboo_JAWS_API_PASSWORD}"
Invoke-ReleaseAndDeployProject -projectId "your-project-id" -version "${bamboo.buildNumber}.0.0" -environmentName "Staging"
During migration, start with a parallel Bamboo-Jaws plan: Run legacy deploys in Bamboo while testing new in Jaws.
Reference the API Reference for endpoints.
Track migrated deploys here, comparing to Bamboo history.

For debugging, set __debug to true in Jaws variables during migration testing.
Integrating Bamboo with Jaws Deploy is a strategic move for enterprises migrating to modern CD, offering simplicity, cost savings, and hybrid flexibility while maintaining Atlassian integrations.
For tailored migration advice, see Migrating from Octopus Deploy (adaptable to Bamboo). Explore the CI/CD Integration Guide. Start your migration—contact us for enterprise support! New to Jaws? Begin with Getting Started.
In Jaws Deploy, projects serve as the central hub for defining and managing your deployment workflows. They're designed to encapsulate the logic needed to deploy a specific application, service, or component—whether it's a web app, database schema, or background worker. This keeps things organized, reusable, and scalable, especially as your team grows or your infrastructure evolves.
Think of a project as a blueprint: It outlines the steps to execute, variables to customize behavior, and rules for progressing through environments. Unlike traditional CI tools where deployment logic is scattered in scripts, Jaws centralizes it in an intuitive UI with API support for automation. This article covers how to set up projects, build deployment logic with steps, leverage templates and modules for reuse, and handle configurations—drawing from real-world enterprise needs like migrations from tools like Bamboo or Octopus.
A project in Jaws Deploy represents a deployable unit, such as "Web API" or "Database Migrations." Each project includes:
Projects are grouped within workspaces for team isolation, and you can tag them for quick filtering. This structure is lightweight yet powerful, avoiding the bloat of heavier tools while supporting enterprise-scale operations.
This lists all projects with IDs, descriptions, and quick actions like creating releases or viewing deployments. Use the "Add new project" button to start.

Getting a project up and running is straightforward:
During enterprise migrations, start by replicating a Bamboo plan in Jaws: Map tasks to steps, variables to scoped vars, and use the API to trigger from Bamboo for hybrid testing.
Tip: For large orgs, tag projects (e.g., "app-web", "region-eu") to filter dashboards and target deploys efficiently.
The core of a project is its steps—the ordered actions that run during a deployment. Steps can be parallel or sequential, scoped to specific environments or machines, and customized with conditions.
#{VAR.isProd} is true), and parallelism (e.g., deploy to 5 machines at once).Steps execute on targets (machines or cloud apps), pulling packages from the store or external feeds. For containerized workflows, use "Run Script" to pull/deploy Docker images.
Browse and add reusable templates here, like "Install SSL Certificate" or "Run PowerShell Script."

Step templates promote reuse across projects—perfect for enterprises standardizing processes.
Example: Add a "Deploy Package" step, select your package ID/version from the store, and scope to "Production" for env-specific paths.
For advanced logic, script modules let you share PowerShell functions (.psm1 files) across steps and projects—reducing duplication in enterprises with standardized scripts.
Import-Module MyUtils; Invoke-MyFunction -Param #{VAR.myVar}.Not shown in provided images, but similar to Step Templates—list modules with edit/export options.

Jaws supports transforming configs during deployment, ensuring env-specific settings without manual edits.
#{VAR.connectionString} in appsettings.json).__debug = true) to verify resolutions.Projects and deployment logic in Jaws Deploy empower you to build reliable, reusable workflows with minimal fuss. Whether starting fresh or migrating enterprise setups from tools like Bamboo, the focus on steps, templates, and modules streamlines CD while cutting costs.
Ready to build? Create your first project and explore Variables for deeper customization. For enterprise migrations, check How Jaws Compares to Octopus Deploy or Contact Us for tailored advice.
Project steps in Jaws Deploy are the core building blocks of your deployment workflows, defining the specific actions and logic that get executed when a release is deployed to targets. They encapsulate everything from simple script runs to complex operations like package deployments or service installations, making your projects flexible and powerful. Steps are what turn your high-level plans into actionable tasks, running on machines or cloud targets with support for scoping, conditions, and reusability.
Whether you're building a basic web app deployment or orchestrating enterprise-scale microservices, understanding steps helps you create efficient, maintainable logic. In migrations from tools like Bamboo or Octopus, steps map closely to tasks or stages, allowing you to replicate and optimize existing workflows. As of September 22, 2025, steps now include enhanced support for bash and Python alongside PowerShell, broadening language options.
This article explains what steps are, types available, how to define and order them, reusability via templates and modules, scoping/conditions, and best practices.
Steps are individual, configurable units within a project that contain the deployment logic to be executed. They specify actions like fetching secrets, installing services, or running custom code, and are executed in sequence or parallel during a deployment.
In enterprise contexts, steps reduce script duplication from tools like Bamboo by centralizing reusable actions.
Steps are based on templates, which provide pre-defined logic. Common types include:
All steps are machine-oriented and PowerShell-based by default, but customizable.
For migrations, map Bamboo tasks (e.g., SSH/Command) to "Run Script" steps for quick adaptation.
Example: A web app project might have:
In large setups, define steps to minimize dependencies for faster deploys.
Steps promote reuse to avoid duplication across projects.
For enterprises, build custom templates for standardized processes (e.g., compliance checks), easing migrations by replicating Bamboo task libraries.
This lists templates with names, supported modes (Machine), languages (PowerShell), and actions like Edit/Export/Delete. Use "Add new step template" for customs.

Import-Module MyModule; Invoke-MyFunction -Param #{VAR.value}.During Bamboo migrations, extract common scripts into modules for centralized maintenance.
if #{VAR.isEnabled} eq true). Add in step properties for runtime decisions.This ensures precision, e.g., env-specific transforms or OS-targeted scripts.
__debug = true) to verify logic.Project steps in Jaws Deploy empower you to build tailored, reusable deployment logic, streamlining workflows and easing enterprise migrations from tools like Bamboo.
For more, see Code Reuse with Script Modules or Step Templates. Create your first step—dive into a project now! New to Jaws? Start with Getting Started.
Step templates in Jaws Deploy are reusable blueprints for common deployment actions, allowing you to standardize and share logic across projects without duplication. They turn frequently used tasks—like installing certificates, deploying packages, or running scripts—into plug-and-play components, complete with customizable UI fields for inputs. This "in action" guide shows how to create, apply, and optimize templates, with real-world examples to demonstrate their power in building efficient workflows.
Templates are especially valuable in enterprise settings, where teams need consistency across multiple projects or during migrations from tools like Bamboo. By encapsulating PowerShell-based logic (with bash/Python support coming in late 2025), templates reduce errors and speed up onboarding. Let's put them into action.
Step templates are managed globally in your workspace but applied per-project. They define the "what" (action) and "how" (code), with a JSON schema for the configuration UI.
Built-in templates provide ready-to-use actions; customs extend them for your needs.
This lists templates with names, supported modes, languages, and IDs. Edit or export built-ins as starting points for customs.

Let's create a template for backing up a SQL database—useful in database projects.
param (
[string]$ServerName = "#{VAR.ServerName}",
[string]$DatabaseName = "#{VAR.DatabaseName}",
[string]$BackupPath = "#{VAR.BackupPath}"
)
# Import SQL module if needed
Import-Module SqlServer -ErrorAction Stop
# Backup command
Backup-SqlDatabase -ServerInstance $ServerName -Database $DatabaseName -BackupFile "$BackupPath\\$DatabaseName.bak"
Write-Host "Backup completed to $BackupPath\\$DatabaseName.bak"
{
"fields": [
{"name": "ServerName", "type": "text", "label": "SQL Server Name"},
{"name": "DatabaseName", "type": "text", "label": "Database Name"},
{"name": "BackupPath", "type": "text", "label": "Backup Directory"}
]
}
In action: This template ensures backups are consistent, with vars for env-specific paths (e.g., Prod backups to secure storage).
For migrations, convert Bamboo script tasks to templates—e.g., a "Deploy WAR" Bamboo task becomes a Jaws template for Tomcat installs.
Once created, templates become available when adding steps.
Example Workflow: In a "[070] Database" project:
In action: Deploying a release runs the backup on database machines tagged "db-tier," outputting the file path for auditing.
While adding steps isn't shown, this lists projects like [070] Database where templates are applied.

In enterprise action: Create a "Compliance Check" template with scripts for security scans; share via export during Bamboo migrations to standardize post-deploy validations.
__debug = true to log resolved params and script outputs.Step templates in action transform repetitive tasks into efficient, shareable components, accelerating development and easing enterprise migrations from tools like Bamboo.
For hands-on, try Code Reuse with Script Modules. Create your first template—go to Step Templates! New to Jaws? Start with Getting Started.
Custom script modules in Jaws Deploy are reusable PowerShell files (.psm1) that contain functions, cmdlets, or utilities you can import into project steps for shared logic. They enable code reuse beyond individual steps, allowing you to build libraries of common operations—like logging, config parsing, or API wrappers—that can be referenced anywhere in your workflows. This is a step up from inline scripts, promoting modularity and maintainability without external dependencies.
For enterprise teams, custom modules are invaluable during migrations from tools like Bamboo, where you can extract scattered scripts into centralized modules for easier management and versioning. As of September 23, 2025, modules remain PowerShell-focused, but upcoming bash and Python support will expand options for diverse environments.
This article covers creating, uploading, using, and optimizing custom script modules, with examples to get you started.
Script modules are .psm1 files uploaded to Jaws, containing exportable PowerShell code. Once enabled in a project, they're downloaded to targets during deployment and imported in steps.
Import-Module MyModule to access functions.In migrations, convert Bamboo shared scripts to modules; test in Jaws for seamless integration.
Build modules in PowerShell ISE or VS Code, then upload.
Utils.psm1 for logging:function Write-Log {
param (
[string]$Message,
[string]$Level = "Info"
)
Write-Host "[$Level] $Message"
# Add file logging if needed
}
function Get-ConfigValue {
param (
[string]$Key
)
# Logic to fetch from file or var
return $Jaws.Parameters[$Key].Value
}
Export-ModuleMember -Function Write-Log, Get-ConfigValue
For enterprises, include error handling and params for flexibility.
The page shows "No script modules found" initially; after adding, list with names, descriptions, and edit actions.

For migrations, upload Bamboo-equivalent scripts in batch via API if needed.
Import-Module Utils
$value = Get-ConfigValue -Key "MyKey"
Write-Log -Message "Fetched value: $value" -Level "Debug"
Example Action: In a deployment, use the module to log steps and fetch env-specific configs, ensuring consistency.
In action: A project with multiple steps imports the module, calling functions to handle common tasks—reduces code bloat.
__debug to trace imports.Custom script modules bring reusable PowerShell power to your deployments, enhancing efficiency and aiding enterprise migrations from tools like Bamboo.
Pair with Step Templates in Action. Create your first module—visit Script Modules! New to Jaws? Start with Getting Started.
Environments and targets form the backbone of your deployment topology in Jaws Deploy, allowing you to model real-world infrastructure and control where and how releases are rolled out. Environments represent logical stages in your pipeline (e.g., development, testing, production), while targets are the actual destinations—such as servers, VMs, or cloud services—where the deployment logic executes. This separation ensures precise, secure, and scalable deployments, especially in hybrid or multi-cloud setups.
Whether you're deploying a simple web app or managing enterprise-scale microservices, understanding these concepts helps prevent config leaks, enforce progression rules, and simplify migrations from tools like Bamboo. This article explains how to set them up, manage them, and integrate with deployment logic.
Environments are logical groupings that define stages in your release lifecycle, such as "Dev," "Staging," or "Production." They act as gates, controlling access and configurations without tying directly to physical infrastructure.
Key features:
Environments are shared across projects in a workspace, making them reusable for consistent pipelines.
This shows environments like Staging and Production with last deployments, statuses, durations, and trends. Use it to monitor activity at a glance.



Targets are the execution endpoints for your deployments. Jaws supports two main types:
Targets are assigned to environments (one-to-many) and can be tagged for flexible grouping (e.g., "region-us," "app-tier"). This enables targeted deploys without overcomplicating logic.
View machines with active status, connection, OS, agent version, environments, tags, and actions like checking updates. Tags like "app-web.1.0" help in scoping.

For enterprise migrations (e.g., from Bamboo), map Bamboo stages to Jaws environments: Start with a 1:1 replication, then optimize with lifecycles to reduce manual gates.
Tip: Use channels for variant paths, like fast-tracking hotfixes through a "Beta" environment.
During migrations, install agents on existing Bamboo agents for dual-running; gradually decommission as you shift to Jaws.
While not directly for targets, use variables scoped to machines/cloud for target-specific configs, like Azure keys.

__debug for variable resolution insights.Environments and targets in Jaws Deploy provide a flexible foundation for modeling and executing deployments, making it easy to manage complex infrastructures—especially during enterprise migrations from tools like Bamboo.
Dive deeper with Managing Release Progression with Lifecycles or Installing Jaws Deploy Agent. For migration help, see Migrating from Octopus Deploy (adaptable principles). Ready to configure? Head to your dashboard now!
Machines in Jaws Deploy are physical or virtual servers (on-prem or cloud VMs) that serve as deployment targets, running the lightweight Jaws Deploy Agent to execute steps from your projects. They represent the "where" of your deployments—handling tasks like package extraction, script running, and service installations. Managing machines involves installing the agent, adding them to your workspace, configuring environments/tags, monitoring status, and handling updates—essential for reliable, scalable CD.
Unlike agentless cloud targets (e.g., Azure Web Apps), machines offer full customization via the agent, supporting Windows and Linux. This is particularly useful in enterprise setups migrating from tools like Bamboo, where you can repurpose existing agents for hybrid operations. As of September 22, 2025, agents now include improved auto-update logic and enhanced logging for containerized scripts.
This article covers setup, management, monitoring, and best practices.
Machines are endpoints where deployments occur:
In contrast to cloud targets, machines are ideal for custom or legacy infra. For migrations, install agents on Bamboo-managed servers to test parallel deploys.
The agent is required on every machine:
install_agent script.C:\\\\Program Files\\\\JawsDeploy\\\\Agent as "Jaws Deploy Agent" service./opt/JawsDeploy/Agent as a systemd service.No user interaction during install; agent auto-starts and connects.
For enterprise batch installs, script deployments via tools like Ansible; during Bamboo migrations, install on existing agents for dual-running.
See the Installing Jaws Deploy Agent guide for details.
Once installed:
Machines appear in the list with status indicators.
This displays machines with active/connection status, OS, agent version, environments, tags, and actions like Edit, Check for updates, Delete.

For enterprises, monitor via dashboards; integrate with tools like Jira for alerts on offline machines.
__debug for agent-side var logs.Managing machines in Jaws Deploy provides a robust foundation for agent-based deployments, simplifying enterprise migrations from tools like Bamboo with easy setup and monitoring.
For more, see Installing Jaws Deploy Agent or Tagging in Jaws Deploy. Add your first machine—head to the Machines page! New to Jaws? Start with Getting Started.
Cloud targets in Jaws Deploy represent managed cloud services where your applications or services are hosted, allowing seamless deployments without the need for installing agents on physical machines. Unlike traditional servers or VMs that require the Jaws Deploy Agent, cloud targets leverage provider APIs for direct interaction, making them ideal for serverless or PaaS environments. This reduces overhead, enhances security, and simplifies management in cloud-native setups.
Currently, Jaws Deploy supports Azure Web Apps as a primary cloud target, with plans for expanded support (e.g., AWS App Runner, Google Cloud Run) in future updates. Cloud targets are especially useful for hybrid deployments—combining them with machines for full-stack apps—or during migrations from on-prem to cloud, where you can gradually shift logic without disrupting workflows.
This article covers what cloud targets are, how to set them up, integrate with your projects, and best practices for enterprise use.
Cloud targets are deployment destinations backed by cloud provider APIs, enabling Jaws to push packages, run scripts, or apply configurations directly. Key benefits:
In contrast to machines (which run the agent for custom scripting), cloud targets focus on provider-specific actions like restarting apps or swapping slots.
For enterprises migrating from tools like Bamboo, cloud targets streamline the shift to PaaS: Map Bamboo deployment tasks to Jaws steps, using API triggers for handoffs.
Before adding targets, link your cloud provider credentials:
This account is reusable across targets and workspaces, with secrets stored encrypted.
While not directly for accounts, store related secrets here (e.g., Azure keys) scoped to cloud targets for added security.

Once added, the target appears in the list with status, last activity, and quick actions.
For migrations, add cloud targets mirroring your Bamboo environments—test deploys in parallel to validate.
Future expansions may include AWS/GCP targets—watch for updates if multi-cloud.
Cloud targets integrate like machines:
Example: In a project step, upload a .zip built from your CI tool (e.g., Bamboo), deploy to an Azure staging slot, and use a "Run Script" step to validate before swapping.
For enterprise migrations, trigger Jaws from Bamboo post-build via API, passing artifacts—gradually move full CD to Jaws.
Monitor cloud deploys here, with statuses, durations, and errors per target.

__debug for variable insights; check Azure portal for app logs if issues arise.Cloud targets in Jaws Deploy simplify deploying to managed services like Azure Web Apps, offering agentless efficiency and tight integration with your logic—perfect for modernizing enterprise setups during migrations from tools like Bamboo.
Explore more with Azure Web App Deployment or Environments and Targets. For migration support, see Migrating from Octopus Deploy. Configure your first target today!
Package feeds in Jaws Deploy are sources from which deployment artifacts—such as .zip files, .tar.gz archives, or NuGet packages—are retrieved during a release or deployment. They act as repositories for your build outputs, ensuring that the right versions are pulled securely and consistently across environments. Whether you're using the built-in package store for simplicity or connecting external feeds for integration with existing CI tools, feeds streamline artifact management without exposing them publicly.
This approach is particularly helpful in enterprise setups, where you might migrate from scattered artifact storage in tools like Bamboo to a centralized, versioned system in Jaws. Feeds support SemVer 2.0 for versioning, enabling precise control and rollbacks. As of September 2025, feeds now include enhanced support for container image references in package notes, aiding hybrid workflows.
This article covers how to use package feeds, their role in deployments, and tips for optimization.
Feeds provide a reliable way to store and reference artifacts:
In deployments, targets (machines/cloud apps) download from feeds on-demand, with options to redownload for freshness. This decouples builds from deploys, ideal for CI/CD where Bamboo/GitHub Actions pushes to a feed, and Jaws pulls during release.
For migrations, map Bamboo artifacts to Jaws feeds: Upload via API post-build, then reference in projects for seamless transition.
Jaws offers built-in and external feeds—configure via the Package Store menu.
To use in a deployment:
This lists packages with IDs, versions, sizes, upload dates, and download links. Search and filter to find artifacts quickly.

Using package feeds in Jaws Deploy centralizes artifact management, making deployments reliable and integrated with your CI/CD. Whether built-in for quick starts or external for legacy compatibility, feeds simplify enterprise migrations from tools like Bamboo.
For details, see Built-in Package Store or Connecting External Feeds. Upload your first package—head to the Package Store now! New to Jaws? Try Getting Started.
The built-in package store in Jaws Deploy is a secure, workspace-specific repository for storing deployment artifacts like .zip, .tar.gz, or NuGet packages. It's your go-to feed for managing versions without relying on external services, ensuring artifacts are private and accessible only during deploys. This simplifies workflows by keeping everything in one place—no need for separate artifact servers.
Designed for ease, the store supports manual uploads via UI, automated via API, and versioning with SemVer 2.0. For enterprises migrating from tools like Bamboo, it's a direct replacement for shared artifact repositories, with added benefits like automatic cleanup and integration with project steps. As of September 2025, the store now handles larger files (up to 500MB base) and includes metadata for container references.
This article explains the store's features, setup, usage, and maintenance.
In deployments, targets pull from the store on-demand, with transforms applied post-download. For migrations, bulk-upload Bamboo artifacts via API to seed the store.
This page shows the upload section, preparation instructions, and package list with IDs, latest versions, sizes, upload dates, and actions like "Show all versions."

For enterprise teams, set up service accounts for CI uploads; integrate with Bamboo post-build scripts during migration.
In container workflows, use the store for sidecar artifacts; note image tags separately in releases.
The built-in package store in Jaws Deploy offers a simple, integrated way to manage artifacts, reducing complexity in your CD pipelines—especially during enterprise migrations from tools like Bamboo.
For advanced use, see Connecting External Feeds or Using Package Feeds. Start uploading—visit your Package Store! New to Jaws? Check Getting Started.
External feeds in Jaws Deploy allow you to connect to third-party repositories like NuGet servers, Artifactory, or custom artifact stores, expanding your package sources beyond the built-in store. This is useful for integrating with existing enterprise ecosystems, pulling from CI-generated feeds, or leveraging public registries without duplicating storage.
Jaws supports NuGet-compatible feeds out-of-the-box, with authentication for private ones. For enterprises migrating from tools like Bamboo, connecting external feeds bridges legacy artifact systems, enabling gradual transitions without immediate uploads to Jaws' store. As of September 2025, external feeds now support enhanced credential scoping and proxy handling for corporate networks.
This article covers setup, usage, security, and migration tips.
In migrations, link Bamboo-exported NuGet feeds to Jaws, testing pulls before decommissioning.
Feeds are workspace-shared; scope usage via service accounts for security.
For container workflows, use external feeds for manifests; pull images in "Run Script" steps.
Example API for release with external package:
json
{ "projectId": "abc123", "version": "1.2.3", "packageVersions": {"my-app": "1.2.3@external-feed-name"}}
In Bamboo migrations, script pushes to external feeds, then trigger Jaws releases referencing them.
Connecting external feeds in Jaws Deploy extends your artifact options, facilitating integrations and enterprise migrations from tools like Bamboo while keeping deploys flexible.
Pair with Built-in Package Store or Using Package Feeds. Connect your first feed—go to Package Store! New to Jaws? See Getting Started.
Releases in Jaws Deploy are versioned snapshots of your project's deployment logic, capturing the state of steps, variables, and packages at a specific point in time. They serve as immutable bundles ready for deployment to one or more environments, ensuring consistency and traceability across your pipeline. Creating a release is a key step in the CD process: It packages your build artifacts (from CI tools like Bamboo or GitHub Actions) and applies rules like channels or lifecycles for controlled rollouts.
Whether triggered manually via the UI for quick tests or automated through API integrations for production workflows, releases make deployments repeatable and auditable. This is especially valuable in enterprise migrations (e.g., from Bamboo), where you can replicate build numbers as release versions for seamless continuity. As of September 2025, releases now support enhanced container tagging in notes for better integration with Docker workflows.
This article walks through creating releases, managing versions, adding notes/packages, and automating the process.
A release represents a deployable version of your project:
Releases are tied to channels (optional) for branching logic, like "Stable" vs. "Beta." In migrations, map Bamboo build artifacts to Jaws releases for version parity.
This shows release version, creation time, notes, channel, packages, and deployment history. Use the "Create Release" button here.

For testing or ad-hoc deploys:
Post-creation, the release appears in the list with status and quick deploy actions.
For enterprise teams, use notes to link to Jira for compliance; during Bamboo migrations, script version syncing via API.
For CI/CD integration, automate via REST API or PowerShell SDK—essential for production pipelines.
POST /api/release{
"projectId": "abc123",
"version": "2.1.38",
"channelName": "Stable",
"notes": "Built from commit abcdef; Jira: PROJ-123",
"packageVersions": {"my-app": "2.1.38"}
}
Trigger from CI tools like GitHub Actions or Bamboo post-build.
Invoke-ReleaseAndDeployProject -projectId "abc123" -version "2.1.38" -environmentName "Staging"In migrations, add this to Bamboo scripts for hybrid runs: Build in Bamboo, create/release in Jaws.
Enterprise Tip: In large setups, use channels to separate release streams (e.g., "LTS" for stable enterprise branches).
__debug = true to log resolved vars/packages.Creating releases in Jaws Deploy bridges your builds to deployments, with flexible manual/automated options suited for enterprise migrations from tools like Bamboo.
For more, see Managing Release Progression with Lifecycles or CI/CD Integration. Automate your first release—check the API Reference for details! New to Jaws? Start with Getting Started.
Executing a deployment in Jaws Deploy is the process of applying a release to one or more environments, running the defined steps on targets (machines or cloud apps), and monitoring the outcome. It's where your planning pays off: Releases are pushed live, configurations are transformed, scripts execute, and your app updates seamlessly. Deployments can be manual for controlled rollouts or automated via lifecycles and API triggers for CI/CD efficiency.
This step ensures reliability with features like live previews, parallel execution, and detailed logging—crucial for minimizing downtime in production. For enterprise teams migrating from tools like Bamboo, deployments in Jaws mirror plan executions but with enhanced visibility and fewer custom scripts. As of September 2025, deployments now include improved container handling in logs for better debugging in Kubernetes-like setups.
This article covers how to execute deployments, monitor progress, handle errors, and automate for scale.
Before executing:
__debug = true for previews).In migrations, align Bamboo artifacts with Jaws packages; test a dry-run deployment to validate.
For targeted or testing deploys:
Deployment starts immediately, with live updates in the UI.
This view shows the deploy button, options, and running deployments with statuses, durations, and triggers (e.g., "TeamCity").

For production efficiency:
POST /api/release/deploy with release ID and environments.Example Body:{
"releaseId": "def456",
"environments": ["Production"],
"redownloadPackages": true
}
Invoke-ReleaseAndDeployProject combines creation and deploy.In enterprise setups, automate for zero-touch: Use webhooks or scheduled deploys; during Bamboo migrations, run parallel executions to compare outcomes.
For container workflows, logs now highlight image pulls/tags; enable verbose with __debug.
See deployment slots, statuses, errors/warnings, and trends across projects/environments.

__debug = true in project variables—logs all resolved values and contexts.If stuck, check machine/agent logs or Azure portal for cloud targets.
Executing deployments in Jaws Deploy turns your plans into action, with robust monitoring and automation for reliable outcomes—streamlining enterprise migrations from tools like Bamboo.
Learn more in Managing Release Progression with Lifecycles or Variables. Execute your first deploy now! For help, see Contact Us.
Deployment history and auditing in Jaws Deploy provide essential tools for tracking, reviewing, and ensuring compliance in your CD processes. History lets you view past deployments, analyze trends, and rollback if needed, while auditing focuses on who did what, when, and how—crucial for security and regulatory requirements. Together, they offer transparency into your operations, helping debug issues, optimize workflows, and maintain accountability.
In enterprise migrations from tools like Bamboo or Octopus, these features map to build logs and user permissions, but with enhanced UI dashboards and API access for automation. As of September 23, 2025, history now includes improved filtering for container-related deploys, and auditing logs API actions more granularly.
This article covers viewing history, accessing logs, auditing user actions, and best practices.
Deployment history records every release rollout, allowing you to revisit outcomes and patterns.
In migrations, use history to compare Jaws deploys with Bamboo runs; export data via API for reporting.
This displays projects with recent deployments, trends (bar graphs for activity), and summaries of statuses, errors, warnings, and durations. Filter to drill down.

Shows a release's deployment history with statuses, times, and triggers; click to view logs.

Logs provide detailed insights into what happened during a deployment.
__debug = true in variables for verbose output, including resolved vars and contexts—great for troubleshooting.For enterprises, logs aid compliance; integrate with external tools via API for centralized monitoring.
Auditing ensures traceability of changes and operations.
In Bamboo migrations, Jaws' auditing replaces plan logs with more granular, user-scoped tracking.
Lists accounts with names, roles, statuses, and IDs; manage API keys for audited automation.

Shows invite history with statuses, dates, inviters, and expirations—part of user audit.

Deployment history and auditing in Jaws Deploy deliver the visibility and accountability needed for robust CD, simplifying enterprise migrations from tools like Bamboo with intuitive UI and API support.
For more, see Executing Deployments or Service Accounts and Automation. Review your history—check the dashboard! New to Jaws? Start with Getting Started.
Variables in Jaws Deploy are dynamic placeholders that let you customize deployment behavior without hardcoding values, making your workflows flexible, secure, and reusable. They can hold configuration data, secrets, or computed values, resolved at runtime based on context like environments or targets. This eliminates repetition and reduces errors, especially in multi-stage pipelines where settings vary (e.g., dev vs. prod connection strings).
Variables are a cornerstone for enterprises, enabling centralized management of configs during migrations from tools like Bamboo—map scattered env vars to Jaws' scoped system for better control. Types include text, secrets, numbers, booleans, dates, and maps, with expressions for advanced logic. As of September 23, 2025, variables now support enhanced scoping for container tags, aiding hybrid deployments.
This introduction covers types, scoping, expressions, usage, and tips to get started.
Variables store values that inject into steps, scripts, or configs during deployment. They resolve based on scopes, ensuring the right value applies (e.g., a secret only in Production).
In migrations, import Bamboo vars as workspace variables for quick setup.
This shows the variables list with actions, names, types, values (masked for secrets), scopes (environment, tag, etc.), and add buttons. Hover for history.

Jaws supports various types for different needs:
Choose types when adding; secrets auto-encrypt. For enterprises, use secrets with Azure Key Vault integration for external storage.
Scoping controls where values apply, preventing leaks:
Add scopes when creating variables; multiple per var for overrides. Resolution favors specifics (e.g., machine beats environment).
In action: A "ConnectionString" secret scoped to "Production" ensures it's only used there.
Expressions make variables dynamic: #{VAR.baseUrl}/#{VAR.endpoint} resolves to a full URL. Nest them, use conditionals (e.g., #{if VAR.isProd then "prod-value" else "dev-value"}), or reference outputs (e.g., #{PreviousStep.Output}).
In scripts: Access as $Jaws.Parameters["VAR.name"].Value.
For migrations, expressions replace Bamboo's variable substitutions, with more power.
Not directly variables, but shows user management; for vars, imagine a similar list with scoping columns.

Variables introduce flexibility and security to your deployments, making Jaws Deploy adaptable for any scale—perfect for enterprise migrations from tools like Bamboo.
Dive deeper with Variables or Project Steps Explained. Add your first variable—open a project now! New to Jaws? Start with Getting Started.
Variable resolution in Jaws Deploy determines how multi-valued variables are evaluated and selected during a deployment, based on the current context. Variables are designed as multi-valued entities, meaning a single variable can hold different values depending on the deployment context, such as the machine or cloud target being deployed to. This context includes assigned environments and tags, allowing for flexible parametrization of deployment flows.
Understanding these rules is crucial for avoiding unexpected behavior and ensuring precise control over configurations. The rules prioritize specificity and complexity to resolve potential matches, making them reliable for enterprise-scale setups where variables might overlap across environments, tags, machines, or cloud targets.
Variables can be scoped using the following attributes to define when a particular value applies:
Scopes allow you to tailor values to the deployment context. For example, you can create a variable named InstallationDirectory with:
C:\\\\deployments\\\\myApp when deploying to the Staging environment./opt/myApp when deploying to the Production environment.When a deployment context matches more than one value for a variable, Jaws Deploy resolves the conflict by selecting the value with the most complex or "strongest" scope. The complexity is determined by the combined amount and importance of the scoping attributes. The importance order is:
If multiple attributes are specified on a value (e.g., one environment and two tags), they are combined using AND logic between different attributes and OR logic between values of the same attribute. For instance, a scope with { Environment: ['Staging', 'UAT'], Tag: ['tag_A', 'tag_B'] } translates to:(context.Environment == 'Staging' OR context.Environment == 'UAT')
AND
(context.Tags.Contains('tag_A') OR context.Tags.Contains('tag_B')).
The overall scoping strength priorities are:
This ensures that more specific scopes (e.g., tied to a particular machine) override broader ones (e.g., environment-only).
Consider the variable InstallationDirectory in a project with:
Suppose ProdServer03 requires a custom value. The scoped values would be:
Resolution:
This example highlights how Jaws Deploy prioritizes specificity to select the appropriate value.
__debug = true) to log how variables are evaluated.These rules make variable management predictable and powerful, supporting complex deployment scenarios while minimizing risks. For more on using variables, see the full Variables guide.
Nested and referenced variables in Jaws Deploy enhance the flexibility of your deployment configurations by allowing variables to incorporate or depend on the values of other variables. This feature enables dynamic, context-aware setups where values are resolved at runtime based on the deployment environment, tags, machines, or cloud targets. It's particularly useful for creating modular and reusable configurations, reducing redundancy in complex workflows.
In enterprise migrations from tools like Bamboo, nested variables help replicate dynamic substitutions, while referenced variables ensure seamless integration in scripts and steps. This article explains nesting (how variables can include others in their values), referencing (how to access them in steps and scripts), syntax, examples, rules, and limitations, based on Jaws Deploy's variable system.
Nesting allows you to define a variable's value using the value of another variable. When editing workspace or project variables, you can embed references to other variables within a value. These nested values are resolved based on the deployment context, just like standard variable resolution.
Use the following syntax to nest variables:
#{VAR.variable_name}
Suppose you have a base variable BasePath set to C:\\\\Apps\\\\. You can nest it in another variable InstallPath as #{VAR.BasePath}MyApp. During deployment, InstallPath resolves to C:\\\\Apps\\\\MyApp, depending on the context (e.g., scoped overrides for BasePath).
This nesting can chain multiple levels, but be cautious of potential complexity in resolution.
Referenced variables are accessed within deployment steps or scripts to inject their resolved values. Jaws Deploy provides specific syntax for different contexts, ensuring variables are evaluated correctly at runtime.
Every deployment step is based on a step template with a GUI JSON definition. When editing a project step in the UI, text inputs support variable references.
#{VAR.variable_name}
In a "Run Script" step's body or a "Deploy Package" step's path field, use #{VAR.InstallationDirectory} to insert the resolved value (e.g., C:\\\\Apps\\\\MyApp).
PowerShell deployment scripts have access to the full context, including resolved variables.
$Jaws.Parameters["VAR.variable_name"].Value
In a script:
$installPath = $Jaws.Parameters["VAR.InstallationDirectory"].Value
Write-Host "Installing to $installPath"
This outputs the resolved path during execution.
__debug = true) to log resolutions and spot issues.Nested and referenced variables add power to your Jaws Deploy configurations, enabling dynamic resolutions that adapt to contexts. Master them for efficient, error-free deployments.
For more, see Variables guide or Project Steps Explained. Experiment in a project—add a nested variable today! New to Jaws? Start with Getting Started.
Jaws Deploy is a smart Continuous Delivery platform which is easy to integrate, significantly reducing setup time and improving deployment reliability compared to Octopus Deploy.
In this write-up we evaluated several other CI/CD and Software Delivery vendors in order to outline what are the best alternatives.
Octopus Deploy is a deployment automation platform built for orchestrating releases across multiple environments. It integrates cleanly with build systems and uses step-based workflows, but some teams encounter friction as infrastructure grows—setup can be time-consuming, variable modelling is limited, and scaling agents or targets increases overhead.
Common pain points include slow onboarding, heavy manual configuration, limited built-in verification/rollback, and rising maintenance and licensing overhead as the deployment surface expands.
Jaws Deploy offers capabilities similar to Octopus but focuses on simpler setup and lower ongoing cost, making it attractive for teams wanting fast adoption and reduced operational load.
It remains strong if your organisation already runs a large, stable Octopus installation or depends on niche integrations Jaws Deploy doesn’t yet support.
Ideal when you want quicker onboarding, simpler infrastructure, strong variable/tag modelling, clear pricing and a tool that scales with minimal maintenance.
When evaluating options, beware of tools that:
Octopus Deploy remains a solid platform, but many teams prioritise simpler setup, lower operating costs and clear modelling of environments and variables. Jaws Deploy offers a modern, lightweight alternative that delivers those benefits while remaining familiar to teams coming from Octopus.
Azure DevOps is Microsoft’s full lifecycle DevOps platform: code repo, build/test pipelines, package feeds, release pipelines and cloud/on-prem deployments. It allows teams to build, test and deploy applications to any cloud or on-premises target.
Release pipelines in Azure Pipelines let you define environments, deployment jobs, track deployment history and apply strategies.
While powerful, many teams find hurdles: initial setup, large ecosystem, and cost or complexity as deployment footprint grows.
When teams scale, particular friction points appear:
Jaws Deploy is a focused deployment automation platform designed to simplify CD workflows while retaining rich modelling and control.
Key benefits:
If you already use Azure DevOps end-to-end (repos, boards, pipelines, artifacts) and have invested in the ecosystem, it may make sense to keep using it for deployment. Also if you need deep integration with Microsoft stack and advanced features built into Azure Pipelines.
If your primary need is deployment automation (rather than full lifecycle), if you want to reduce infrastructure/agent overhead, or if you have many environments/machines/tags and need a simple, powerful tool to manage them—Jaws Deploy is a strong alternative.
Azure DevOps is a very capable platform. For teams seeking full lifecycle capabilities, it may be ideal. But if deployment automation is the core requirement and you want fast adoption, lower cost, and simpler topology modelling—Jaws Deploy offers a compelling alternative.
GitLab is a unified DevOps platform combining source control, CI/CD pipelines, project management and deployment capabilities. Its deployment features allow you to deploy applications to internal or public infrastructure, track deployment history, and use feature flags.
It supports review apps, feature-flags-based releases, and has a strong presence in the DevOps space for teams wanting an all-in-one solution.
Although GitLab is very integrated, some teams find:
Jaws Deploy provides deployment-specific features built to manage complex topologies, variables, and multi-target deployments while integrating with GitLab CI/CD.
Highlights:
If your team already uses GitLab for repositories, issues, CI/CD and you want to keep everything in one platform, deployment via GitLab can be very convenient. Also for smaller teams or simpler deployment footprints.
If deployment complexity is growing, you need better variable/machine/target modelling, or you want a dedicated tool with lower overhead that works alongside GitLab rather than relying on GitLab as the deployment engine.
GitLab provides a strong, unified platform for DevOps and deployment. But when deployment needs become more granular and complex—and you want a dedicated layer that simplifies variable/machine modelling and reduces maintenance—Jaws Deploy presents a compelling alternative.