# Bitbucket Pipelines (https://depot.dev/docs/container-builds/integrations/bitbucket-pipelines)

## Authentication

For Bitbucket Pipelines, you can use project or user access tokens for authenticating your build with Depot. We recommend using project tokens as they are scoped to a specific project and owned by the organization.

**Note:** The CLI looks for the `DEPOT_TOKEN` environment variable by default. For both token options, you should configure this variable for your build environment via [repository variables](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/).

### [Project token](/docs/cli/authentication#project-tokens)

You can inject project access tokens into the Pipeline environment for `depot` CLI authentication. These tokens are tied to a specific project in your organization and not a user.

### [User access token](/docs/cli/authentication#user-access-tokens)

It is also possible to generate a user access token to inject into the Pipeline environment for `depot` CLI authentication. This token is tied to a specific user and not a project. Therefore, it can be used to build all projects across all organizations that the user can access.

## Configuration

To build a Docker image from Bitbucket Pipelines, you must set the `DEPOT_TOKEN` environment variable in your repository settings. You can do this through the UI for your repository via the [`Repository Settings > Pipelines > Repository variables`](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/#Variablesinpipelines-Repositoryvariables).

In addition, you must also install the `depot` CLI before you run `depot build`.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Install Depot CLI and build
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - depot build .
```

## Examples

### Build multi-platform images natively without emulation

This example shows how you can use the `--platform` flag to build a multi-platform image for Intel and Arm architectures natively without emulation.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Build multi-architecture image
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - depot build --platform linux/amd64,linux/arm64 .
```

### Build and push to Docker Hub

This example installs the `depot` CLI to be used directly in the pipeline. Then, `docker login` is invoked with the environment variables for `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` for the authentication context of the build to push to the registry.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Authenticate, Build, Push to Docker Hub
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - docker login --username $DOCKERHUB_USERNAME --password $DOCKERHUB_TOKEN
            - depot build -t <your-registry>:<your-tag> --push .
          services:
            - docker # Needed just for logging the Docker build context into a registry
```

### Build and push to Amazon ECR

This example installs the `depot` and `aws` CLIs to be used directly in the pipeline. Then, `aws ecr get-login-password` is piped into `docker login` for the authentication context of the build to push to the registry.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Authenticate, Build, Push to ECR
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            - unzip awscliv2.zip
            - ./aws/install
            - aws --version
            - aws ecr get-login-password --region <your-ecr-region> | docker login --username AWS --password-stdin <your-ecr-registry>
            - depot build -t <your-ecr-registry>:<your-tag> --push .
          services:
            - docker # Needed just for logging the Docker build context into a registry
```

### Build and load the image back into the Pipeline for testing

You can use the [`--load` flag](/docs/cli/reference/container-builds#depot-build) to download the built container image into the workflow.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Install Depot CLI, build, load image back into the Pipeline
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - depot build --load .
```

### Build, push, and load the image back in one command

You can simultaneously push the built image to a registry and load it back into the CI job by using the [`--load` and `--push`](/docs/cli/reference/container-builds#depot-build) flag together.

```yaml showLineNumbers
pipelines:
  branches:
    master:
      - step:
          name: Install Depot CLI, build, load image back into the Pipeline
          script:
            - curl -L https://depot.dev/install-cli.sh | DEPOT_INSTALL_DIR=/usr/local/bin sh
            - depot build -t <your-registry> --push --load .
```

## For AI Agents

The full site index is at [llms.txt](https://depot.dev/llms.txt). Append `.md` to any documentation, blog, changelog, or customer URL to fetch its markdown source directly.