Help us learn about your current experience with the documentation. Take the survey.

Atlassian Bamboo

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

当您向 GitLab 项目推送更改时,可以自动触发 Atlassian Bamboo 中的构建。

Bamboo 在接受 webhook 和提交数据时,与传统构建系统提供的功能不同。您必须在 GitLab 中配置集成之前,先配置一个 Bamboo 构建计划。

配置 Bamboo

  1. 在 Bamboo 中,进入构建计划并选择 操作 > 配置计划
  2. 选择 触发器 选项卡。
  3. 选择 添加触发器
  4. 输入描述,如 GitLab 触发器
  5. 选择 提交更改时仓库触发构建
  6. 选择一个或多个仓库的复选框。
  7. 触发 IP 地址 中输入 GitLab IP 地址。这些 IP 地址被允许触发 Bamboo 构建。
  8. 保存触发器。
  9. 在左侧面板中,选择一个构建阶段。如果您有多个构建阶段,请选择包含 Git checkout 任务的最后一个阶段。
  10. 选择 杂项 选项卡。
  11. 模式匹配标签 下的 标签 中输入 ${bamboo.repository.revision.number}
  12. 选择 保存

Bamboo 已准备好接受来自 GitLab 的触发器。接下来,在 GitLab 中设置 Bamboo 集成。

配置 GitLab

  1. 在左侧边栏,选择 搜索或跳转 并找到您的项目。
  2. 选择 设置 > 集成
  3. 选择 Atlassian Bamboo
  4. 确保 启用 复选框被选中。
  5. 输入您的 Bamboo 服务器的基准 URL。例如,https://bamboo.example.com
  6. 可选。清除 启用 SSL 验证 复选框以禁用 SSL 验证
  7. 输入来自您的 Bamboo 构建计划的 构建密钥
  8. 如有必要,输入一个可以触发构建计划的 Bamboo 用户的用户名和密码。如果不需要身份验证,请将这些字段留空。
  9. 可选。选择 测试设置
  10. 选择 保存更改

识别 Bamboo 构建计划构建密钥

构建密钥是一个唯一标识符,通常由项目密钥和计划密钥组成。 构建密钥简短、全大写,并用短横线(-)分隔,例如 PROJ-PLAN

当您在 Bamboo 中查看计划时,构建密钥包含在浏览器 URL 中。例如,https://bamboo.example.com/browse/PROJ-PLAN

在 GitLab 中更新 Bamboo 构建状态

您可以使用一个使用 提交状态 API 和 Bamboo 构建变量的脚本来:

  • 更新提交的构建状态。
  • 将 Bamboo 构建计划 URL 作为提交的 target_url

例如:

  1. 在 GitLab 中创建一个具有 :api 权限的 访问令牌

  2. 将令牌保存为 Bamboo 中的 $GITLAB_TOKEN 变量。

  3. 将以下脚本作为最终任务添加到 Bamboo 计划的作业中:

    #!/bin/bash
    
    # 用于更新 GitLab CI 状态的脚本。
    # 将此脚本作为 Bamboo 作业中的最终内联脚本任务添加。
    #
    # 通用文档:https://docs.gitlab.com/ee/user/project/integrations/bamboo.html
    # 修复灵感来自 https://gitlab.com/gitlab-org/gitlab/-/issues/34744
    
    # 遇到第一个错误时停止
    set -e
    
    # 访问令牌。在 Bamboo 中将其设置为 CI 变量。
    #GITLAB_TOKEN=
    
    # 状态
    cistatus="failed"
    if [ "${bamboo_buildFailed}" = "false" ]; then
      cistatus="success"
    fi
    
    repo_url="${bamboo_planRepository_repositoryUrl}"
    
    # 检查我们使用的是 SSH 还是 HTTPS
    protocol=${repo_url::4}
    if [ "$protocol" == "git@" ]; then
      repo=${repo_url:${#protocol}};
      gitlab_url=${repo%%:*};
    else
      protocol="https://"
      repo=${repo_url:${#protocol}};
      gitlab_url=${repo%%/*};
    fi
    
    start=$((${#gitlab_url} + 1)) # +1 用于 / (https) 或 : (ssh)
    end=$((${#repo} - $start -4)) # -4 用于 .git
    repo=${repo:$start:$end}
    repo=$(echo "$repo" | sed "s/\//%2F/g")
    
    # 发送请求
    url="https://${gitlab_url}/api/v4/projects/${repo}/statuses/${bamboo_planRepository_revision}?state=${cistatus}&target_url=${bamboo_buildResultsUrl}"
    echo "正在发送请求到 $url"
    curl --fail --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$url"

故障排除

构建未触发

如果构建未触发,请确保您在 Bamboo 的 触发 IP 地址 中输入了正确的 GitLab IP 地址。同时检查集成 webhook 日志中的请求失败情况。

GitLab UI 中不可用的高级 Atlassian Bamboo 功能

高级 Atlassian Bamboo 功能与 GitLab 不兼容。这些功能包括但不限于从 GitLab UI 查看构建日志的能力。