anchor.diff:  # Deployments with Buildkite
   
   There are many ways to set up both manual and continuous deployment workflows using Buildkite.
  +
  +For more detailed platform-specific deployment guides, see the [Heroku](/docs/deployments/deploying-to-heroku) and [Kubernetes](/docs/deployments/deploying-to-kubernetes) guides. 
   
   <%= toc %>
   
  
positive.code: 
  ## Dedicated deployment pipelines
  
  Creating dedicated deployment pipelines, separate to your test pipelines, makes it easier to:
  
  * Separate deployment failures from test failures
  * Separate test and deployment pipeline.yml files
  * Re-run failed deployments
  * Simplify adding rollback steps
  * Use teams for role based access control
  * Whitelist deploy pipelines in agent hooks
  
  For example, the following "My App" test pipeline will trigger a deployment build whenever a master test build passes:
  
  ```yml
  steps:
  
negative.code:     concurrency_group: "my-app-deploy"
      concurrency_limit: 1
  ```
  
  The ":rocket:" step in the deployment example above uses the concurrency attributes `concurrency_group` and `concurrency_limit`. These work together to ensure that no matter how many builds are triggered on this pipeline at once, no ":rocket:" steps can run in parallel. This prevents deploys clashing and attempting to write to the same resources. 
  
  <screenshot of a deploy pipeline>
  
  