You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bitbucket Pipeline中Slack通知步骤无论前置成败都执行?

解决Bitbucket Pipeline Slack通知始终执行及优化用法

一、让Slack通知步骤始终执行

Bitbucket Pipeline提供两种可靠方式,确保通知步骤不受前置步骤成败影响:

  1. 给通知步骤添加always: true属性
    在定义Slack通知的step中配置always: true,即可强制该步骤在任何情况下(前置步骤成功、失败或跳过)都运行。示例配置:

    pipelines:
      default:
        - step:
            name: 构建&测试
            script:
              - echo "执行构建和测试逻辑"
              - # 这里替换为你的业务执行步骤
        - step:
            name: Slack通知
            always: true # 核心配置,确保步骤必执行
            script:
              - |
                if [ $BITBUCKET_EXIT_CODE -eq 0 ]; then
                  # 发送成功通知
                  curl -X POST -H 'Content-type: application/json' --data '{"text":"✅ 流水线执行成功!分支: '"$BITBUCKET_BRANCH"' 构建链接: '"$BITBUCKET_BUILD_URL"'"}' YOUR_SLACK_WEBHOOK_URL
                else
                  # 发送失败通知
                  curl -X POST -H 'Content-type: application/json' --data '{"text":"❌ 流水线执行失败!分支: '"$BITBUCKET_BRANCH"' 构建链接: '"$BITBUCKET_BUILD_URL"'"}' YOUR_SLACK_WEBHOOK_URL
                fi
    
  2. 使用after-script段
    若通知逻辑简单,可将Slack通知写入步骤的after-script中,它会在当前步骤所有逻辑执行完毕后自动运行,不受步骤结果影响:

    pipelines:
      default:
        - step:
            name: 构建&测试
            script:
              - echo "执行构建和测试逻辑"
            after-script:
              - |
                STATUS="成功"
                COLOR="#36a64f"
                if [ $BITBUCKET_EXIT_CODE -ne 0 ]; then
                  STATUS="失败"
                  COLOR="#dc3545"
                fi
                curl -X POST -H 'Content-type: application/json' --data '{"attachments":[{"color":"'"$COLOR"'","title":"Bitbucket流水线状态","text":"分支: '"$BITBUCKET_BRANCH"'\n状态: '"$STATUS"'\n构建链接: '"$BITBUCKET_BUILD_URL"'"}]}' YOUR_SLACK_WEBHOOK_URL
    

二、Slack通知的进阶巧妙用法

除了判断BITBUCKET_EXIT_CODE,还有这些实用技巧提升通知价值:

  • 利用内置变量丰富通知维度
    结合Bitbucket提供的其他内置变量,让通知包含更多关键信息:

    • BITBUCKET_COMMIT:提交哈希值
    • BITBUCKET_COMMIT_MESSAGE:提交说明
    • BITBUCKET_REPO_SLUG:仓库名称
    • BITBUCKET_BUILD_NUMBER:构建编号
  • 用Slack Blocks/Attachments做可视化通知
    放弃纯文本格式,用Slack的块结构或附件实现更直观的通知,比如用颜色区分状态、添加跳转按钮:

    # 示例:带详情按钮的失败通知
    curl -X POST -H 'Content-type: application/json' --data '{
      "blocks": [
        {
          "type": "section",
          "text": {
            "type": "mrkdwn",
            "text": "❌ *Bitbucket流水线执行失败*"
          }
        },
        {
          "type": "section",
          "fields": [
            {
              "type": "mrkdwn",
              "text": "*分支:* '"$BITBUCKET_BRANCH"'"
            },
            {
              "type": "mrkdwn",
              "text": "*提交:* '"$BITBUCKET_COMMIT"'"
            }
          ]
        },
        {
          "type": "actions",
          "elements": [
            {
              "type": "button",
              "text": {
                "type": "plain_text",
                "text": "查看构建详情"
              },
              "url": "'"$BITBUCKET_BUILD_URL"'"
            }
          ]
        }
      ]
    }' YOUR_SLACK_WEBHOOK_URL
    
  • 按分支/环境差异化发送
    比如主分支失败时@全体成员,开发分支仅发送普通通知:

    if [ $BITBUCKET_BRANCH = "main" ]; then
      # 主分支失败@频道所有人
      curl -X POST -H 'Content-type: application/json' --data '{"text":"❌ 主分支流水线失败!<!channel> 分支: '"$BITBUCKET_BRANCH"' 构建链接: '"$BITBUCKET_BUILD_URL"'"}' YOUR_SLACK_WEBHOOK_URL
    else
      # 其他分支发送常规通知
      curl -X POST -H 'Content-type: application/json' --data '{"text":"⚠️ 分支 '"$BITBUCKET_BRANCH"' 流水线执行 '"$STATUS"'!构建链接: '"$BITBUCKET_BUILD_URL"'"}' YOUR_SLACK_WEBHOOK_URL
    fi
    
  • 使用Slack Bot账号发送通知
    替换默认的Incoming Webhook机器人,用专门的Slack Bot发送通知,可自定义头像、用户名,提升通知辨识度,还能借助Bot权限实现更多联动(比如根据失败状态创建Slack任务)。

内容的提问来源于stack exchange,提问作者Rabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:25:35