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

旧版GitLab CI如何通过脚本触发下游流水线并等待执行完成?

用脚本触发下游流水线并等待执行完成(适配旧版GitLab)

完全可以用脚本实现,核心是调用GitLab的API触发下游流水线,再轮询查询状态直到任务结束,完美替代旧版不支持变量的trigger配置。

实现步骤与脚本示例

以下是可直接复用的bash脚本,适配GitLab CI环境:

#!/bin/bash

# 拼接下游项目名称(使用你的变量)
DOWNSTREAM_PROJECT="${my_downstream_project}_1"
# 转义项目路径中的斜杠为URL编码(如果项目包含分组路径需要这一步)
ENCODED_PROJECT=$(echo "$DOWNSTREAM_PROJECT" | sed 's/\//%2F/g')
# GitLab API地址(直接用CI内置环境变量)
GITLAB_TRIGGER_API="${CI_API_V4_URL}/projects/${ENCODED_PROJECT}/pipeline"

# 1. 触发下游流水线
echo "正在触发下游流水线:$DOWNSTREAM_PROJECT"
TRIGGER_RESPONSE=$(curl --silent --request POST \
  --header "Authorization: Bearer $CI_JOB_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"ref": "main"}' \
  "$GITLAB_TRIGGER_API")

# 检查触发是否成功
if ! echo "$TRIGGER_RESPONSE" | jq -e '.id' > /dev/null; then
  echo "触发失败!响应内容:$TRIGGER_RESPONSE"
  exit 1
fi

# 提取下游流水线ID
PIPELINE_ID=$(echo "$TRIGGER_RESPONSE" | jq -r '.id')
echo "下游流水线已启动,ID:$PIPELINE_ID"

# 2. 轮询等待流水线完成
while true; do
  # 查询当前流水线状态
  STATUS_RESPONSE=$(curl --silent --request GET \
    --header "Authorization: Bearer $CI_JOB_TOKEN" \
    "${CI_API_V4_URL}/projects/${ENCODED_PROJECT}/pipelines/${PIPELINE_ID}")
  CURRENT_STATUS=$(echo "$STATUS_RESPONSE" | jq -r '.status')

  echo "当前流水线状态:$CURRENT_STATUS"

  # 判断是否为终端状态(成功/失败/取消)
  case "$CURRENT_STATUS" in
    "success"|"failed"|"canceled")
      echo "下游流水线执行结束,状态:$CURRENT_STATUS"
      # 成功则返回0,失败/取消返回非0,上游流水线可据此判断结果
      [ "$CURRENT_STATUS" = "success" ] && exit 0 || exit 1
      ;;
    *)
      # 非终端状态,等待30秒后再次查询(可根据需求调整间隔)
      sleep 30
      ;;
  esac
done

注意事项

  • 依赖工具:确保上游流水线的运行环境安装了curl和jq(用于解析JSON),可在before_script中添加安装命令:
    # Ubuntu/Debian环境
    apt-get update && apt-get install -y curl jq
    # Alpine环境
    apk add --no-cache curl jq
    
  • 权限配置:上游流水线的CI_JOB_TOKEN需要拥有下游项目的流水线触发权限,可在下游项目的「设置」→「CI/CD」→「流水线触发权限」中,允许上游项目的服务账号触发流水线,或直接给上游服务账号分配下游项目的「开发者」角色。
  • 间隔调整:脚本中的sleep 30可根据流水线时长调整,避免过于频繁查询导致API限流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20