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

配置GitHub Workflow Action向Slack发送完整执行结果求助

解决GitHub Actions无法将完整sfdx执行结果发送到Slack的问题

我之前碰到过一模一样的问题,核心是两个关键点没处理好:shell命令替换会自动丢失换行符,以及Slack需要用代码块才能保留原格式和换行。下面是具体的修复方案:

1. 修复作业输出的换行保留问题

你现在用$(sfdx force:source:push)这种命令替换的方式获取输出,shell会把所有换行符转换成空格,直接导致格式丢失。改用文件暂存输出,再通过GitHub官方推荐的$GITHUB_OUTPUT(替代已弃用的::set-output)传递,能完整保留所有换行和格式:

修改scratch-org-test作业的步骤:

jobs:
  scratch-org-test:
    runs-on: ubuntu-latest
    outputs:
      deploy: ${{ steps.deploy.outputs.text }}
      apex-tests: ${{ steps.apex-tests.outputs.text }}
    steps:
      - name: "Push source to scratch org"
        id: "deploy"
        run: |
          # 将sfdx部署输出保存到文件,完整保留原格式
          sfdx force:source:push > deploy-result.txt
          # 用GITHUB_OUTPUT传递输出,确保换行不丢失
          echo "text=$(cat deploy-result.txt)" >> $GITHUB_OUTPUT
      - name: 'Run Apex tests'
        run: 'sfdx force:apex:test:run -c -r human -d ./tests/apex -w 20'
      - name: 'Output Apex Tests Execution results'
        id: "apex-tests"
        run: |
          # 直接读取测试结果文件,无需依赖第三方cat action
          echo "text=$(cat ./tests/apex/test-result.txt)" >> $GITHUB_OUTPUT

2. 在Slack消息中用代码块包裹内容

Slack默认会把换行当成空格处理,必须用三重反引号(```)包裹内容,让Slack识别为代码块,才能还原部署进度条、测试覆盖率表格的原格式:

修改slack-notification-with-optional-parameters作业的Slack步骤:

slack-notification-with-optional-parameters:
    runs-on: ubuntu-latest
    needs: scratch-org-test
    name: Sends a message to Slack when a push, a pull request or an issue is made
    steps:
      - name: Send message to Slack API
        uses: archive/github-actions-slack@v1.0.3
        id: notify
        with:
          slack-bot-user-oauth-access-token: ${{secrets.token}} # 注意补上$符号,否则无法读取密钥
          slack-channel: random
          # 用多行字符串+代码块包裹内容,完整保留格式
          slack-text: |
            ```
            Deploy
            ${{needs.scratch-org-test.outputs.deploy}}

            Apex Tests
            ${{needs.scratch-org-test.outputs.apex-tests}}
            ```
          slack-optional-icon_emoji: ":fire:"

额外提醒

  • 你原来的slack-bot-user-oauth-access-token写法少了$,正确写法是${{secrets.token}},否则无法正确读取仓库密钥。
  • 如果输出内容极端冗长(超过GitHub Actions输出变量的限制),可以考虑把结果上传为GitHub Artifact,然后在Slack消息里附上Artifact的链接,但根据你的示例内容,完全不会触发长度限制。

这样修改后,Slack消息就能完美显示你期望的部署进度和测试覆盖率表格了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:58:15