如何在Bitbucket Pipelines跨步骤传参到trigger-pipeline触发其他仓库流水线
解决Bitbucket Pipelines跨步骤传递变量到trigger-pipeline的方案
根本原因
Bitbucket Pipelines 每个步骤都运行在独立的隔离容器环境中,单步内通过export声明的环境变量仅在当前步骤的shell生命周期内有效,无法直接被后续步骤读取。同时你提到的「trigger-pipeline执行前无法运行自定义脚本」是误区,pipe本质是script段内的可执行命令,完全可以在调用pipe前插入任意自定义脚本做参数预处理。
解决方法
通过Bitbucket内置的**产物(artifacts)**能力传递变量文件,在触发流水线的步骤中先读取变量再调用pipe即可,修改后的流水线配置如下:
- step: name: upload to test image: name: ci:latest script: - bin=`ls | grep .bin` - export VERSION=${bin%.*} # 将变量写入文件,用于跨步骤传递 - echo "export VERSION=$VERSION" > build.env - aws s3 sync . s3://somebacketname/test/ # 声明build.env为产物,会自动传递给后续所有步骤 artifacts: - build.env - step: name: testing trigger: manual script: # 先读取上一步传递的变量文件,导入到当前步骤环境 - source build.env - pipe: atlassian/trigger-pipeline:4.1.5 variables: BITBUCKET_USERNAME: $USER BITBUCKET_APP_PASSWORD: $PASSWORD REPOSITORY: 'test' BRANCH_NAME: 'master' CUSTOM_PIPELINE_NAME: 'critical-test' WAIT: 'true' PIPELINE_VARIABLES: > [{ "key": "DESIRED_VERSION", "value": "$VERSION" }, { "key": "DURATION", "value": "15" }]
验证逻辑
配置修改后运行流水线,第一个步骤生成的VERSION值会被写入build.env并作为产物保留,第二个手动触发的步骤拉取产物后先导入变量,再调用trigger-pipeline时就能正常读取到$VERSION的值,传递到目标仓库的流水线中。
内容的提问来源于stack exchange,提问作者And.Dzh
相关产品推荐
相关产品推荐

