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

如何在Jenkins任务完成后触发GitHub Action(非Jenkins脚本触发)

实现Jenkins任务完成后触发GitHub Action的两种方案

方案一:通过Jenkins Post-build步骤触发GitHub Repository Dispatch(无需修改核心构建脚本)

如果不想改动Jenkins任务里的构建逻辑脚本(比如Jenkinsfile),可以通过Jenkins UI配置Post-build操作,发送请求触发GitHub的Repository Dispatch事件,从而启动指定的GitHub Action。

操作步骤:

  1. 生成GitHub个人访问令牌(PAT):在GitHub账号设置里创建一个带repo权限的令牌,用于调用GitHub API。
  2. 配置Jenkins Post-build操作:
    进入「Example Jenkins Job」的配置页面,找到「Post-build Actions」,添加「Execute shell」(Linux/macOS)或「Execute Windows batch command」(Windows):
    curl -X POST \
      -H "Authorization: token YOUR_GITHUB_PAT" \
      -H "Accept: application/vnd.github.v3+json" \
      https://api.github.com/repos/你的GitHub用户名/目标仓库名/dispatches \
      -d '{"event_type": "jenkins_job_completed", "client_payload": {"job_name": "Example Jenkins Job", "build_number": "'$BUILD_NUMBER'"}}'
    
    替换YOUR_GITHUB_PAT、你的GitHub用户名、目标仓库名为实际值,BUILD_NUMBER是Jenkins内置环境变量,会自动填充当前构建编号。
  3. 编写GitHub Action触发规则:
    在目标GitHub仓库的.github/workflows/triggered-by-jenkins.yml中添加配置:
    name: Triggered by Jenkins Job Completion
    
    on:
      repository_dispatch:
        types: [jenkins_job_completed]
    
    jobs:
      post-jenkins-task:
        runs-on: ubuntu-latest
        steps:
          - name: Print Jenkins job info
            run: |
              echo "触发来源:Jenkins任务 ${{ github.event.client_payload.job_name }}"
              echo "Jenkins构建编号:${{ github.event.client_payload.build_number }}"
          - name: 执行后续任务
            run: |
              # 在这里添加你需要执行的操作,比如部署、自动化测试等
    

方案二:通过GitHub Action轮询Jenkins构建状态(完全不修改Jenkins配置)

如果完全不想改动Jenkins的任何配置,可以用GitHub Action定时轮询Jenkins的构建状态API,当检测到「Example Jenkins Job」最近一次构建成功完成时,执行后续任务。

操作步骤:

  1. 配置GitHub Secrets:
    在目标GitHub仓库的「Settings」→「Secrets and variables」→「Actions」中添加两个Secrets:
    • JENKINS_URL:你的Jenkins服务器完整地址(比如https://jenkins.yourcompany.com)
    • JENKINS_CREDENTIALS:Jenkins的「用户名:API令牌」(API令牌可在Jenkins个人设置中生成)
  2. 编写GitHub Action配置:
    在.github/workflows/poll-jenkins.yml中添加:
    name: Poll Jenkins Job Status
    
    on:
      schedule:
        # 每5分钟轮询一次,可根据需求调整频率
        - cron: '*/5 * * * *'
      workflow_dispatch: # 允许手动触发调试
    
    jobs:
      check-and-trigger:
        runs-on: ubuntu-latest
        steps:
          - name: 获取Jenkins最新构建状态
            id: get-build-info
            run: |
              # 拉取最新构建的状态和时间戳
              BUILD_DATA=$(curl -s -u ${{ secrets.JENKINS_CREDENTIALS }} \
                ${{ secrets.JENKINS_URL }}/job/Example%20Jenkins%20Job/lastBuild/api/json)
              BUILD_STATUS=$(echo $BUILD_DATA | jq -r '.result')
              BUILD_TIMESTAMP=$(echo $BUILD_DATA | jq -r '.timestamp')
              
              # 计算当前时间与构建完成时间的差值(分钟)
              CURRENT_TIMESTAMP=$(date +%s000)
              TIME_DIFF=$(( (CURRENT_TIMESTAMP - BUILD_TIMESTAMP) / 60000 ))
              
              echo "build_status=$BUILD_STATUS" >> $GITHUB_OUTPUT
              echo "time_diff=$TIME_DIFF" >> $GITHUB_OUTPUT
          
          - name: 执行后续任务(当构建成功且完成时间在10分钟内)
            if: steps.get-build-info.outputs.build_status == 'SUCCESS' && steps.get-build-info.outputs.time_diff < 10
            run: |
              echo "Jenkins任务 Example Jenkins Job 已成功完成,开始执行后续操作"
              # 在这里添加你的任务逻辑,比如部署、发送通知等
    
    注意:确保Jenkins服务器允许GitHub Actions的IP访问,必要时调整防火墙或反向代理规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:45:24