- Creating a new environment when a branch is created or a pull request is opened.
- Rebuilding the environment when new code is pushed to Bitbucket.
- Deleting the environment when a pull request is merged.
Before you begin
To manage source integrations, you need to be a project admin. You also need a Bitbucket Cloud or Bitbucket Server repository with working code.Bitbucket Cloud
1. Create an OAuth consumer
To integrate your Upsun project with an existing Bitbucket Cloud repository, create an OAuth consumer:Be sure to define the above as a private consumer by checking the This is a private consumer box.
http://localhost.
Copy the Key and Secret for your consumer.
2. Enable the Cloud integration
To enable the integration, use either the CLI or the Console.- Using the CLI
- In the Console
Run the following command:
PROJECT_IDis the ID of your Upsun project.OWNER/REPOSITORYis the name of your repository in Bitbucket.CONSUMER_KEYis the key of the OAuth consumer you created.CONSUMER_SECRETis the secret of the OAuth consumer you created.
https://bitbucket.org/platformsh/platformsh-docs,
the command is similar to the following:| CLI flag | Default | Description |
|---|---|---|
fetch-branches | true | Whether to mirror and update branches on Upsun and create inactive environments from them. When enabled, merging on an Upsun environment isn’t possible. That is, merging environments must be done on the source repository rather than on the Upsun project. See note below for details related to this flag and synchronizing code from a parent environment. |
prune-branches | true | Whether to delete branches from Upsun that don’t exist in the Bitbucket repository. When enabled, branching (creating environments) must be done on the source repository rather than on the Upsun project. Branches created on Upsun that are not on the source repository will not persist and will be quickly pruned. Automatically disabled when fetching branches is disabled. |
build-pull-requests | true | Whether to track all pull requests and create active environments from them, which builds the pull request. |
resync-pull-requests | false | Whether to sync data from the parent environment on every push to a pull request. |
resources-init | false | To specify a resource initialization strategy for new containers. Once set, the strategy applies to all the deployments you launch through your source integration. See more information on available resource initialization strategies. |
To keep your repository clean and avoid performance issues, make sure you enable both the
fetch-branches and prune-branches options.3. Validate the integration
Verify that your integration is functioning properly using the CLI:Add the webhook manually
If the integration was added with the correct permissions, the necessary webhook is added automatically. If you see a message that the webhook wasn’t added, add one manually. To configure a webhook on a Bitbucket repository, you need to have Admin user permissions.- Get the webhook URL by running this command:
upsun integration:get --property hook_url. - Copy the returned URL.
- Follow the Bitbucket instructions to create a webhook using the URL you copied. Make sure to update the triggers to include all pull request events except comments and approval.
Bitbucket Server
1. Generate a token
To integrate your Upsun project with a repository on a Bitbucket Server instance, you first need to create an access token associated with your account. Generate a token. and give it at least read access to projects and admin access to repositories. Copy the token.2. Enable the Server integration
To enable the integration, use either the CLI or the Console.- Using the CLI
- In the Console
Run the following command:
PROJECT_IDis the ID of your Upsun project.OWNER/REPOSITORYis the name of the repository in Bitbucket server.BITBUCKET_SERVER_ACCESS_TOKENis the token you generated.BITBUCKET_SERVER_URLis the URL for your Bitbucket server.
https://example.com/platformsh/platformsh-docs,
the command is similar to the following:| CLI flag | Default | Description |
|---|---|---|
fetch-branches | true | Whether to mirror and update branches on Upsun and create inactive environments from them. |
prune-branches | true | Whether to delete branches from Upsun that don’t exist in the Bitbucket server repository. Automatically disabled when fetching branches is disabled. |
build-pull-requests | true | Whether to track all pull requests and create active environments from them, which builds the pull request. |
pull-requests-clone-parent-data | true | Whether to clone data from the parent environment when creating a pull request environment. |
fetch-branches and prune-branches options.
3. Validate the integration
Verify that your integration is functioning properly using the CLI:Add the webhook manually
If the integration was added with the correct permissions, the necessary webhook is added automatically. If you see a message that the webhook wasn’t added, add one manually. To configure a webhook on a Bitbucket repository, you need to have Admin user permissions.- Get the webhook URL by running this command:
upsun integration:get --property hook_url. - Copy the returned URL.
- Follow the Bitbucket instructions to create a webhook using the URL you copied. Send all events except comments and approval.
Environment parent and status
When a branch is created in Bitbucket, an environment is created in Upsun with the default branch as its parent. It starts as an inactive environment with no data or services. When a pull request is opened in Bitbucket, an environment is created in Upsun with the pull request’s target branch as its parent. It starts as an active environment with a copy of its parent’s data.Source of truth
When you add an integration, your Bitbucket repository is considered to be the source of truth for the project. Your Upsun project is only a mirror of that repository and you can only push commits to Bitbucket. To clone your code, follow these steps:- Using the CLI
- Using Git
Run the following command:
Sync, fetch, and prune
An integration from your source repository to Upsun establishes that:- your source repository is the source of truth, where Git operations occur
- Upsun is a mirror of that repository, provisioning infrastructure according to configuration, and orchestrating environments according to the branch structure of the your source repository repository
fetch-branches (track branches on your source repository) and prune-branches (delete branches that don’t exist on your source repository) by default.
You can change these settings but it is recommended to keep them.
When enabled by default, you are limited by design as to what actions can be performed within the context of an Upsun project with a your source repository integration:
| Action | Observation | Recommendation |
|---|---|---|
| Branch from parent | Running environment:branch with the CLI, or selecting Branch in Console produces a new child environment, but it’s deleted shortly after automatically. | Contribute to the your source repository repository itself by creating a branch and pull request. When the PR has been opened, a new environment will be provisioned for it. |
| Merge in parent | Running environment:merge with the CLI fails locally, and the Merge option in Console is not clickable. | Review and merge pull requests and/or branches on the your source repository repository. |
| Merge into child (sync code) | Running environment:synchronize with the CLI fails locally, and the Sync option in Console won’t allow you to include code in that sync. | Perform the merge locally from a matching branch on your source repository. For example, clone the most recent parent (git pull origin parent-branch), switch to the pull request branch (git checkout ga-staging), and then merge the parent into the current branch (git merge main). |