Github Actions是否有Jenkins Pipeline中‘fixed’状态的等效功能?
Github Actions实现类似Jenkins的"Fixed"状态通知
Github Actions本身没有原生的"fixed"状态标识,但可以通过自定义逻辑实现仅在前次失败、本次成功时发送Slack通知的需求,核心思路是获取上一次Workflow运行的状态,再和当前状态做对比。
实现步骤
- 获取上一次Workflow运行状态:利用GitHub CLI(
gh)在Actions环境中调用API,获取同分支、同工作流的上一次运行状态。 - 状态判断与触发通知:判断当前运行是否成功,且上一次运行是否失败,满足条件则发送Slack通知。
示例Workflow代码
name: Build with Fixed Status Notification on: [push, pull_request] jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 # 替换为你的实际构建/测试步骤 - name: Execute build and tests run: | echo "Running build process..." # 这里模拟测试,实际替换为你的构建命令 exit 0 - name: Fetch previous workflow run status id: previous_run run: | # 获取上一次完成的运行状态(跳过当前正在运行的实例) PREVIOUS_STATUS=$(gh run list \ --workflow "${{ github.workflow }}" \ --branch "${{ github.ref_name }}" \ --limit 2 \ --json status \ --jq '.[1].status') echo "prev_status=$PREVIOUS_STATUS" >> $GITHUB_OUTPUT env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Send Slack notification on fixed status if: success() && steps.previous_run.outputs.prev_status == 'failure' uses: slackapi/slack-github-action@v1.24.0 with: slack-message: "✅ Build fixed! Previous run failed, current run succeeded for branch ${{ github.ref_name }}." env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
关键细节说明
- GitHub CLI权限:默认的
GITHUB_TOKEN已具备读取仓库Workflow运行记录的权限,无需额外配置。 - 边界情况处理:如果是分支首次运行、或上一次运行被取消/跳过,
prev_status会为空,此时不会触发通知,符合预期。 - 精准筛选:如果需要针对特定Job而非整个Workflow判断状态,可以在
gh run list中添加--job "job-name"参数,获取对应Job的上一次状态。
内容的提问来源于stack exchange,提问作者King
相关产品推荐
相关产品推荐

