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

GitLab跨项目触发配置咨询:bat文件触发Python脚本执行

GitLab跨项目流水线配置方案

Project A 的 .gitlab-ci.yml

这套配置会在提交 .bat 文件时自动触发流水线,完成参数提取、触发Project B、清理bat文件的全流程:

stages:
  - extract_params
  - trigger_b
  - cleanup

# 从提交的bat文件中提取目标参数
extract_params:
  stage: extract_params
  rules:
    - changes:
        - "*.bat"  # 仅当提交包含bat文件时触发流水线
  script:
    # 拿到本次提交的bat文件名
    - BAT_FILE=$(git diff --name-only HEAD~1 HEAD | grep .bat)
    # 👇根据你的bat文件实际格式调整提取逻辑
    # 示例:假设bat文件里的第一行就是带4个参数的命令,提取前4个参数
    - ARGS=$(head -n1 $BAT_FILE | awk '{print $1, $2, $3, $4}')
    - ARG1=$(echo $ARGS | cut -d' ' -f1)
    - ARG2=$(echo $ARGS | cut -d' ' -f2)
    - ARG3=$(echo $ARGS | cut -d' ' -f3)
    - ARG4=$(echo $ARGS | cut -d' ' -f4)
    # 把参数和文件名存入环境变量,传给后续步骤
    - echo "ARG1=$ARG1" >> variables.env
    - echo "ARG2=$ARG2" >> variables.env
    - echo "ARG3=$ARG3" >> variables.env
    - echo "ARG4=$ARG4" >> variables.env
    - echo "BAT_FILE=$BAT_FILE" >> variables.env
  artifacts:
    reports:
      dotenv: variables.env  # 传递变量到后续阶段

# 触发Project B的流水线并传递参数,等待其执行完成
trigger_project_b:
  stage: trigger_b
  needs: [extract_params]
  rules:
    - changes:
        - "*.bat"
  script:
    # 用GitLab API触发Project B,替换成你的GitLab地址和Project B ID
    - |
      curl --request POST --header "PRIVATE-TOKEN: $PROJECT_B_TRIGGER_TOKEN" \
      "https://你的GitLab域名/api/v4/projects/ProjectB的ID/trigger/pipeline" \
      --form "ref=main"  # Project B要执行的分支
      --form "variables[ARG1]=$ARG1" \
      --form "variables[ARG2]=$ARG2" \
      --form "variables[ARG3]=$ARG3" \
      --form "variables[ARG4]=$ARG4" \
      --form "WAIT_FOR_COMPLETION=true"  # 强制等待B的流水线跑完再继续
  variables:
    # 这个令牌要在Project A的CI/CD变量里提前配置
    PROJECT_B_TRIGGER_TOKEN: $PROJECT_B_TRIGGER_TOKEN

# 清理已处理的bat文件,提交到仓库
cleanup_bat:
  stage: cleanup
  needs: [trigger_project_b]
  rules:
    - changes:
        - "*.bat"
  script:
    - git config --global user.name "GitLab CI Bot"
    - git config --global user.email "ci-bot@your-domain.com"
    - git rm $BAT_FILE
    - git commit -m "Cleanup: Remove processed $BAT_FILE"
    - git push origin HEAD:$CI_COMMIT_BRANCH

Project B 的 .gitlab-ci.yml

这套配置只接受触发式流水线,执行Python脚本并接收传递的参数:

stages:
  - run_script

run_python_script:
  stage: run_script
  rules:
    - if: $CI_PIPELINE_SOURCE == "trigger"  # 只处理来自Project A的触发请求
  script:
    # 执行你的Python脚本,传入参数
    - python 你的脚本文件名.py $ARG1 $ARG2 $ARG3 $ARG4

必做配置说明

  1. 权限与令牌:
    • 去Project B的「设置→CI/CD→流水线触发令牌」生成一个令牌,复制后到Project A的「设置→CI/CD→变量」里添加PROJECT_B_TRIGGER_TOKEN,值为这个令牌。
    • 确保Project A的CI/CD服务账号有Project B的流水线触发权限,以及Project A自身的代码推送权限。
  2. 参数提取逻辑:
    • 一定要根据你实际的.bat文件格式调整extract_params阶段的脚本,比如如果bat里是用set ARG1=xxx定义参数,就改成ARG1=$(grep ARG1 $BAT_FILE | cut -d'=' -f2)。
  3. 分支适配:
    • 把配置里的ref=main改成Project B实际要执行的分支名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:31