如何在Bamboo Java Specs中获取Git默认分支名?
在Bamboo Java Specs中获取Git默认分支并控制artifactBranch设置
完全可以通过Bamboo Java Specs的API获取Git仓库的默认分支,进而实现“仅当当前分支非默认分支时设置artifactBranch”的逻辑,具体实现如下:
核心实现思路
- 获取Git仓库默认分支:通过
GitRepository类的getDefaultBranch()方法获取配置的默认分支名;若仓库是Bamboo已配置的存量仓库,也可通过服务器访问工具拉取实际配置值。 - 获取当前构建分支:通过环境变量
bamboo_repository_branch_name获取当前触发构建的分支。 - 分支判断与artifactBranch设置:对比两个分支名,仅当不一致时为任务设置
artifactBranch参数。
代码示例
基础硬编码默认分支场景
import com.atlassian.bamboo.specs.api.builders.plan.Plan; import com.atlassian.bamboo.specs.api.builders.plan.Stage; import com.atlassian.bamboo.specs.api.builders.plan.job.Job; import com.atlassian.bamboo.specs.builders.task.ArtifactDownloaderTask; import com.atlassian.bamboo.specs.builders.repository.git.GitRepository; public class AutoDeploymentSpec { public Plan buildDeploymentPlan() { // 定义Git仓库配置 GitRepository gitRepo = new GitRepository() .url("https://your-git-repository-url.git") .defaultBranch("main"); // 对应仓库实际默认分支 // 获取当前构建分支与默认分支 String currentBranch = System.getenv("bamboo_repository_branch_name"); String defaultBranch = gitRepo.getDefaultBranch(); // 初始化制品下载任务 ArtifactDownloaderTask artifactTask = new ArtifactDownloaderTask(); // 仅当当前分支非默认分支时设置artifactBranch if (currentBranch != null && !currentBranch.equals(defaultBranch)) { artifactTask.artifactBranch(currentBranch); } // 组装部署计划 return new Plan() .name("自动部署计划") .key("DEPLOY") .stages(new Stage("部署执行阶段") .jobs(new Job("部署任务") .tasks(artifactTask))); } }
从Bamboo服务器获取存量仓库默认分支场景
如果Git仓库已在Bamboo中配置,可通过BambooServerAccessor拉取实际配置的默认分支,避免硬编码:
import com.atlassian.bamboo.specs.util.BambooServerAccessor; import com.atlassian.bamboo.specs.builders.repository.git.GitRepository; // 在计划构建逻辑中添加以下代码 BambooServerAccessor bambooAccessor = BambooServerAccessor.create( "https://your-bamboo-instance-url", "your-username", "your-password-or-api-token" ); // 通过仓库Key获取已配置的Git仓库 GitRepository existingRepo = bambooAccessor.getRepositoryByKey("YOUR_REPO_KEY", GitRepository.class); String defaultBranch = existingRepo.getDefaultBranch();
注意事项
- 确保环境变量
bamboo_repository_branch_name在构建上下文可用,该变量由Bamboo自动注入。 - 若分支名存在大小写差异,可根据需求添加
equalsIgnoreCase()判断逻辑。
内容的提问来源于stack exchange,提问作者Summy Saurav
相关产品推荐
相关产品推荐

