配置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
相关产品推荐
相关产品推荐

