Smart pipelines pluginNEW
The Bitbucket Cloud smart pipelines plugin
brings all the flexibility and versatility of
Flowie to Bitbucket Pipelines. You define your pipelines as usual in your bitbucket-pipelines.yml
,
and use Flowie to trigger them, which gives you the following advantages:
- Use conditions to define which and when pipelines are triggered
- Trigger pipelines using different events as triggers. e.g., source or/and event updated
- Easily run custom pipelines for pull requests
- No trigger for conflicted pull requests
- Trigger multiple pipelines for an event
Triggering pipelines
Flowie can trigger pull-requests and custom pipelines.
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"configure ({plugins : [pipelines ({run : "custom:integration_tests",trigger : ["source_new_updated", "destination_updated"],}),],})
Select which pipeline from bitbucket-pipelines.yml
should be triggered using the run
property.
The trigger
property defines when the pipeline will run.
Currently, it supports source_new_updated
and destination_updated
.
Differently from Bitbucket Cloud standard functionality, it also lets you trigger the pipeline when
the pull request destination is updated.
Triggering based on the destination branch
By using conditions you can
define to which pull requests the pipeline should be applied.
For instance, it can be defined to only trigger the pipeline for a pull request
targeting main
as destination.
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"import {target } from "flowie.app/conditions"configure ({plugins : [pipelines ([target ("main"),{run : "custom:integration_tests",trigger : ["source_new_updated", "destination_updated"],variables : {my_var : "my_custom_value"},},]),],})
You can define different pipelines based on different conditions:
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"import {source ,target ,labels ,changeset } from "flowie.app/conditions"configure ({plugins : [pipelines ([target ("main").and (labels .has ("CI ready")),{run : "custom:sonar",trigger : ["destination_updated", "source_new_updated"],variables : {MY_MAIN_VAR : "MY_MAIN_VALUE"},},],[target (/release.*/).and (source (/hotfix.*/)),{run : "custom:quick_integration_tests",trigger : ["source_new_updated"],},],[target ("main").and (changeset .matches ("src/docs/*")),{run : "custom:build_docs",trigger : ["source_new_updated"],variables : {my_var : "my_custom_value"},},]),],})
Triggering custom
pipelines
Custom pipelines support variables and are triggered using the custom
prefix
on the run property:
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"configure ({plugins : [pipelines ({run : "custom:sonar",trigger : ["source_new_updated"],}),],})
Merge pull request destination
Flowie makes it easy to merge the pull request destination branch into your working branch when running custom pipelines, the same way pull-requests work.
Simply add eval $MERGE_PULL_REQUEST_CMD
as the first step of your script.
yaml
# bitbucket-pipelines.yamlpipelines:custom: # Pipelines that are triggered manuallysonar: # The name that is displayed in the list in the Bitbucket Cloud GUI- step:script:- eval $MERGE_PULL_REQUEST_CMD- echo "Manual triggers for Sonar are awesome!"
Alternatively,
you can use $REBASE_PULL_REQUEST_CMD
instead if you use a rebase workflow.
Variables
Flowie injects the BITBUCKET_PR_DESTINATION_BRANCH
,
BITBUCKET_PR_DESTINATION_COMMIT
and BITBUCKET_PR_ID
variables.
Additional variables can be specified using the variables
property.
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"configure ({plugins : [pipelines ({run : "custom:sonar",trigger : ["source_new_updated"],variables : {MY_VAR : "MY_VALUE"},}),],})
Pipelines UI limitation
Custom pipelines are triggered using the branch target, since Bitbucket does not support using a pull request as target. This means that the pull request won’t be displayed at the pipelines UI, only the pull request associated branch.
You can use pull-requests
pipelines
to be able to show the associated pull request instead.
Triggering pull-requests
pipelines
Pull-request
based pipelines are referenced
using the pull-requests
prefix on the run property.
The main difference from custom pipelines triggered for pull requests is that
pull-requests
pipelines are able
to show the associated pull request in the pipelines view as explained above.
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"import {target } from "flowie.app/conditions"configure ({plugins : [pipelines ([target (/main.*/),{run : "pull-requests:to_main",trigger : ["source_new_updated", "destination_updated"],},]),],})
yaml
# bitbucket-pipelines.yamlpipelines:pull-requests:to_main/**:- step:script:# Clean up dynamically generated branch- git push origin --delete $BITBUCKET_BRANCH- ./build.sh
Note that instead of specifying the source branch pattern, you specify a placeholder.
The placeholder can be any arbitrary name.
In the example we used to_main
.
The example is also using conditions to limit this pipeline only to pull requests
targeting main as destination.
Flowie will create the source branch dynamically for Bitbucket
to be able to match against it and run the pipeline.
After Bitbucket clones it, this generated branch can be discarded.
You should do this
by adding the git push origin --delete $BITBUCKET_BRANCH
command to your
pipeline as shown above.
Triggering multiple pipelines
ts
import {configure } from "flowie.app"import {pipelines } from "flowie.app/plugins"import {target } from "flowie.app/conditions"configure ({plugins : [pipelines ([target ("main"),[{run : "custom:pipeline_1",trigger : ["source_new_updated"],},{run : "custom:pipeline_2",trigger : ["source_new_updated"],},],]),],})