如何在不同Bitbucket Pipeline之间跨仓库导入构建产物?
Bitbucket Pipelines跨仓库共享构建产物解决方案
不用额外搭建公网可访问的Nuget服务器,通过Bitbucket自带能力即可实现你的需求,以下是两种可行方案:
方案一:基于Bitbucket Downloads实现(适配你现有的操作习惯)
你已经完成了产物上传到Downloads板块的步骤,只需补充拉取逻辑即可:
- 首先在库仓库的
设置-仓库权限-访问令牌中生成带有Downloads读取权限的访问令牌,将令牌以保密变量的形式存入应用仓库的Pipelines变量中,建议命名为LIB_DOWNLOAD_TOKEN - 调整应用的
bitbucket-pipelines.yml,在构建前增加拉取库产物的脚本,示例配置如下:
image: mcr.microsoft.com/dotnet/sdk:5.0 pipelines: default: - step: name: Build and Test caches: - dotnetcore - platform2 script: # 新建标准化相对路径目录 - mkdir -p NET5/Platform2/bin # 拉取对应分支的最新库产物,注意替换链接中的工作区、仓库名占位符 - curl -L -u 你的仓库用户名:${LIB_DOWNLOAD_TOKEN} "https://api.bitbucket.org/2.0/repositories/你的工作区/库仓库名/downloads/platform2-${BITBUCKET_BRANCH}-latest.zip" -o lib_bin.zip # 解压到目标路径 - unzip lib_bin.zip -d NET5/Platform2/bin # 原有构建逻辑 - export PROJECT_NAME=./PlatformDataService.sln - dotnet restore ${PROJECT_NAME} - dotnet build ${PROJECT_NAME} --no-restore --configuration Release artifacts: - PlatformDataService/bin/**
提示:你需要调整库仓库的上传逻辑,将产物打包为按分支命名的zip包上传,方便下游应用拉取对应版本
方案二:基于Bitbucket内置Nuget源实现(更适配.NET技术栈)
Bitbucket Cloud本身支持托管私有Nuget包,无需自建服务器,是更规范的.NET类库共享方案:
- 在库仓库中生成带访问权限的推送令牌,存入Pipelines保密变量
- 调整库的构建脚本,增加打包、推送Nuget包的逻辑:
script: - dotnet restore ./NET5/Platform2.sln - dotnet build ./NET5/Platform2.sln --no-restore --configuration Release # 打包生成Nuget包,版本号用构建号自动生成 - dotnet pack ./NET5/Platform2.sln --no-restore --configuration Release --output ./nupkg -p:PackageVersion=1.0.${BITBUCKET_BUILD_NUMBER} # 推送到Bitbucket私有Nuget源,替换占位符为你的实际工作区、仓库名 - dotnet nuget push ./nupkg/*.nupkg --source "https://api.bitbucket.org/2.0/repositories/你的工作区/库仓库名/nuget/packages" --api-key ${LIB_PUSH_TOKEN}
- 应用仓库只需在Nuget配置中添加该私有源,构建restore环节会自动拉取对应版本的类库,无需手动管理路径。
关于工作路径的说明
Bitbucket Pipelines支持完全自定义工作目录结构,你可以在脚本中通过mkdir、mv、git clone等命令任意调整目录层级,完全可以复现你之前在Jenkins、Bamboo上使用的标准化相对路径规则。
内容的提问来源于stack exchange,提问作者Denise Skidmore
相关产品推荐
相关产品推荐

