Skip to content

prefect-bitbucket

The prefect-bitbucket library makes it easy to interact with Bitbucket repositories and credentials.

Getting Started

Prerequisites

Install prefect-bitbucket for Prefect 2

pip install 'prefect[bitbucket]<3'

Register newly installed block types

Register the block types in the prefect-bitbucket module to make them available for use.

prefect block register -m prefect_bitbucket

Examples

In the examples below, you create blocks with Python code. Alternatively, blocks can be created through the Prefect UI.

Store deployment flow code in a private Bitbucket repository

To create a deployment and run a deployment where the flow code is stored in a private Bitbucket repository, you can use the BitbucketCredentials block.

A deployment can use flow code stored in a Bitbucket repository without using this library in either of the following cases:

  • The repository is public
  • The deployment uses a Secret block to store the token

Create a Bitbucket Credentials block:

from prefect_bitbucket import BitbucketCredentials

bitbucket_credentials_block = BitbucketCredentials(token="x-token-auth:my-token")

bitbucket_credentials_block.save(name="my-bitbucket-credentials-block")

Difference between Bitbucket Server and Bitbucket Cloud authentication

If using a token to authenticate to Bitbucket Cloud, only set the token to authenticate. Do not include a value in the username field or authentication will fail. If using Bitbucket Server, provide both the token and username values.

Access flow code stored in a private Bitbucket repository in a deployment

Use the credentials block you created above to pass the Bitbucket access token during deployment creation. The code below assumes there's flow code stored in a private Bitbucket repository.

from prefect import flow
from prefect.runner.storage import GitRepository
from prefect_bitbucket import BitbucketCredentials


if __name__ == "__main__":
    flow.from_source(
        source=GitRepository(
            url="https://bitbucket.com/org/private-repo.git",
            credentials=BitbucketCredentials.load("my-bitbucket-credentials-block")
        ),
    entrypoint="my_file.py:my_flow",
    ).deploy(
        name="private-bitbucket-deploy",
        work_pool_name="my_pool",
        build=False
    )

Alternatively, if you use a prefect.yaml file to create the deployment, reference the Bitbucket Credentials block in the pull step:

pull:
    - prefect.deployments.steps.git_clone:
        credentials: https://bitbucket.org/org/private-repo.git
        credentials: "{{ prefect.blocks.bitbucket-credentials.my-bitbucket-credentials-block }}"

Interact with a Bitbucket repository

The code below shows how to reference a particular branch or tag of a Bitbucket repository.

from prefect_bitbucket import BitbucketRepository

def save_bitbucket_block():
    bitbucket_block = BitbucketRepository(
        repository="https://bitbucket.org/testing/my-repository.git",
        reference="branch-or-tag-name",
    )

    bitbucket_block.save("my-bitbucket-block")


if __name__ == "__main__":
    save_bitbucket_block()

Exclude the reference field to use the default branch. Reference a BitbucketCredentials block for authentication if the repository is private.

Use the newly created block to interact with the Bitbucket repository.

For example, download the repository contents with the .get_directory() method like this:

from prefect_bitbucket.repositories import BitbucketRepository

def fetch_repo():
    bitbucket_block = BitbucketRepository.load("my-bitbucket-block")
    bitbucket_block.get_directory()

if __name__ == "__main__":
    fetch_repo()

Resources

For assistance using Bitbucket, consult the Bitbucket documentation.

Refer to the prefect-bitbucket API documentation linked in the sidebar to explore all the capabilities of the prefect-bitbucket library.