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

如何在Jenkins中获取定时触发构建的归档产物路径以对比构建结果?

获取上一次成功定时构建的归档产物路径

核心思路

关键是先通过CI系统的内置标识区分定时构建和手动构建,再筛选出最近一次成功的定时构建,最后获取其归档产物路径。以下是主流CI工具的实现方案:

Jenkins

  1. 区分定时构建:Jenkins定时触发的构建会自带TIMERTRIGGER类型的构建原因,可通过环境变量或API识别。
  2. 获取最近成功定时构建:
    • 用Shell脚本调用Jenkins API:
      # 替换为你的Jenkins实例信息
      JENKINS_URL="http://your-jenkins-domain"
      JOB_NAME="your-ci-job-name"
      AUTH="username:api-token"
      
      # 筛选出最近一次成功的定时构建号
      LAST_SUCCESS_TIMER_BUILD=$(curl -s -u $AUTH "$JENKINS_URL/job/$JOB_NAME/api/json?tree=builds[number,result,actions[causes[shortDescription]]]" | \
        jq -r '.builds[] | select(.result == "SUCCESS" and .actions[0].causes[0].shortDescription == "Started by timer") | .number' | head -n 1)
      
      # 拼接归档产物的绝对路径(替换为你的实际归档路径)
      ARCHIVE_PATH="$JENKINS_URL/job/$JOB_NAME/$LAST_SUCCESS_TIMER_BUILD/artifact/dist/"
      
    • 或者在Jenkins Pipeline中直接获取:
      def targetJob = Jenkins.instance.getItemByFullName("your-ci-job-name")
      def lastTimerSuccessBuild = targetJob.getBuilds().find {
        it.result == Result.SUCCESS && it.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) != null
      }
      def localArchivePath = lastTimerSuccessBuild.getArtifactsDir().getAbsolutePath() + "/dist/"
      

GitLab CI

  1. 区分定时构建:定时触发的流水线会自动设置CI_PIPELINE_SOURCE=schedule环境变量。
  2. 获取最近成功定时流水线:
    # 替换为你的GitLab实例信息
    GITLAB_API="https://your-gitlab-domain/api/v4"
    PROJECT_ID="123"
    PRIVATE_TOKEN="your-access-token"
    BUILD_JOB_NAME="build-and-archive"
    
    # 获取最近一次成功的定时流水线ID
    LAST_SUCCESS_TIMER_PIPELINE=$(curl -s --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$GITLAB_API/projects/$PROJECT_ID/pipelines?source=schedule&status=success" | \
      jq -r '.[0].id')
    
    # 获取归档产物的下载路径(或本地存储路径,取决于你的配置)
    ARCHIVE_PATH="$GITLAB_API/projects/$PROJECT_ID/jobs/artifacts/$LAST_SUCCESS_TIMER_PIPELINE/download?job=$BUILD_JOB_NAME"
    

GitHub Actions

  1. 区分定时构建:定时触发的工作流运行会标记github.event_name=schedule。
  2. 获取最近成功定时工作流:
    # 替换为你的仓库信息
    REPO="your-username/your-repo"
    GH_TOKEN="your-github-token"
    WORKFLOW_NAME="ci-workflow.yml"
    
    # 获取最近一次成功的定时工作流运行ID
    LAST_SUCCESS_TIMER_RUN=$(curl -s -H "Authorization: token $GH_TOKEN" "https://api.github.com/repos/$REPO/actions/runs?event=schedule&status=success" | \
      jq -r '.workflow_runs[0].id')
    
    # 获取归档产物的API路径
    ARCHIVE_PATH="https://api.github.com/repos/$REPO/actions/runs/$LAST_SUCCESS_TIMER_RUN/artifacts"
    

通用注意事项

  • 确保执行脚本的账号有足够权限访问CI系统的API或归档目录。
  • 如果你的CI系统有内置插件/工具(比如Jenkins的Copy Artifact插件),优先使用内置功能,比API调用更稳定。
  • 可将获取到的ARCHIVE_PATH直接传入你的对比脚本中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:12:29